From f2b367f421a420ae5b15a4e10c170b2346561ac1 Mon Sep 17 00:00:00 2001 From: Michael Lee Date: Mon, 8 Sep 2025 09:09:42 -0500 Subject: [PATCH 001/212] [core-image/tga] implement Option.do_not_expand_grayscale --- core/image/tga/tga.odin | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/image/tga/tga.odin b/core/image/tga/tga.odin index 5fda803c5..c20201d6a 100644 --- a/core/image/tga/tga.odin +++ b/core/image/tga/tga.odin @@ -153,7 +153,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a // Intentionally blank case .Uncompressed_Black_White: black_white = true - dest_depth = 24 + dest_depth = 8 if .do_not_expand_grayscale in options else 24 case .Uncompressed_Color_Mapped: color_mapped = true case .Compressed_Color_Mapped: @@ -162,7 +162,7 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a case .Compressed_Black_White: black_white = true rle_encoding = true - dest_depth = 24 + dest_depth = 8 if .do_not_expand_grayscale in options else 24 case: return nil, .Unsupported_Format @@ -181,6 +181,9 @@ load_from_context :: proc(ctx: ^$C, options := Options{}, allocator := context.a } switch dest_depth { + case 8: // R8 + src_channels = 1 + dest_channels = 1 case 15: // B5G5R5 src_channels = 2 dest_channels = 3 From 4b9e15786d8db44741cd6fd5c89a033e18548d66 Mon Sep 17 00:00:00 2001 From: IllusionMan1212 Date: Fri, 24 Oct 2025 00:49:33 +0200 Subject: [PATCH 002/212] encoding/json: custom json (un)marshalling --- core/encoding/json/marshal.odin | 49 +++++++++++++++---------- core/encoding/json/unmarshal.odin | 61 ++++++++++++++++++------------- 2 files changed, 66 insertions(+), 44 deletions(-) diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index e563c326a..81884b71b 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -62,7 +62,10 @@ Marshal_Options :: struct { mjson_skipped_first_braces_end: bool, } -marshal :: proc(v: any, opt: Marshal_Options = {}, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Marshal_Error) { +User_Marshaller :: #type proc(w: io.Writer, v: any) +User_Marshaller_Map :: map[typeid]User_Marshaller + +marshal :: proc(v: any, opt: Marshal_Options = {}, user_marshallers: User_Marshaller_Map = nil, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Marshal_Error) { b := strings.builder_make(allocator, loc) defer if err != nil { strings.builder_destroy(&b) @@ -72,7 +75,7 @@ marshal :: proc(v: any, opt: Marshal_Options = {}, allocator := context.allocato runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = allocator == context.temp_allocator) opt := opt - marshal_to_builder(&b, v, &opt) or_return + marshal_to_builder(&b, v, &opt, user_marshallers) or_return if len(b.buf) != 0 { data = b.buf[:] @@ -81,16 +84,24 @@ marshal :: proc(v: any, opt: Marshal_Options = {}, allocator := context.allocato return data, nil } -marshal_to_builder :: proc(b: ^strings.Builder, v: any, opt: ^Marshal_Options) -> Marshal_Error { - return marshal_to_writer(strings.to_writer(b), v, opt) +marshal_to_builder :: proc(b: ^strings.Builder, v: any, opt: ^Marshal_Options, user_marshallers: User_Marshaller_Map = nil) -> Marshal_Error { + return marshal_to_writer(strings.to_writer(b), v, opt, user_marshallers) } -marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: Marshal_Error) { +marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_marshallers: User_Marshaller_Map = nil) -> (err: Marshal_Error) { if v == nil { io.write_string(w, "null") or_return return } + if user_marshallers != nil { + marshaller := user_marshallers[v.id] + if marshaller != nil { + marshaller(w, v) + return + } + } + ti := runtime.type_info_base(type_info_of(v.id)) a := any{v.data, ti.id} @@ -208,7 +219,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: for i in 0.. (err: opt_write_iteration(w, opt, i == 0) or_return opt_write_key(w, opt, enum_type.names[index]) or_return data := uintptr(v.data) + uintptr(i*info.elem_size) - marshal_to_writer(w, any{rawptr(data), info.elem.id}, opt) or_return + marshal_to_writer(w, any{rawptr(data), info.elem.id}, opt, user_marshallers) or_return } opt_write_end(w, opt, '}') or_return @@ -237,7 +248,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: for i in 0.. (err: for i in 0.. (err: } } - marshal_to_writer(w, any{value, info.value.id}, opt) or_return + marshal_to_writer(w, any{value, info.value.id}, opt, user_marshallers) or_return } } else { Entry :: struct { @@ -340,7 +351,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: for s, i in sorted { opt_write_iteration(w, opt, i == 0) or_return opt_write_key(w, opt, s.key) or_return - marshal_to_writer(w, s.value, opt) or_return + marshal_to_writer(w, s.value, opt, user_marshallers) or_return } } } @@ -384,7 +395,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: return false } - marshal_struct_fields :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: Marshal_Error) { + marshal_struct_fields :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_marshallers: User_Marshaller_Map) -> (err: Marshal_Error) { ti := runtime.type_info_base(type_info_of(v.id)) info := ti.variant.(runtime.Type_Info_Struct) first_iteration := true @@ -419,7 +430,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: } else { // Marshal the fields of 'using _: T' fields directly into the parent struct if info.usings[i] && name == "_" { - marshal_struct_fields(w, the_value, opt) or_return + marshal_struct_fields(w, the_value, opt, user_marshallers) or_return continue } else { opt_write_key(w, opt, name) or_return @@ -427,13 +438,13 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: } - marshal_to_writer(w, the_value, opt) or_return + marshal_to_writer(w, the_value, opt, user_marshallers) or_return } return } opt_write_start(w, opt, '{') or_return - marshal_struct_fields(w, v, opt) or_return + marshal_struct_fields(w, v, opt, user_marshallers) or_return opt_write_end(w, opt, '}') or_return case runtime.Type_Info_Union: @@ -466,17 +477,17 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: tag -= 1 } id := info.variants[tag].id - return marshal_to_writer(w, any{v.data, id}, opt) + return marshal_to_writer(w, any{v.data, id}, opt, user_marshallers) case runtime.Type_Info_Enum: if !opt.use_enum_names || len(info.names) == 0 { - return marshal_to_writer(w, any{v.data, info.base.id}, opt) + return marshal_to_writer(w, any{v.data, info.base.id}, opt, user_marshallers) } else { name, found := reflect.enum_name_from_value_any(v) if found { - return marshal_to_writer(w, name, opt) + return marshal_to_writer(w, name, opt, user_marshallers) } else { - return marshal_to_writer(w, any{v.data, info.base.id}, opt) + return marshal_to_writer(w, any{v.data, info.base.id}, opt, user_marshallers) } } diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index 3cdc6429d..c1a2725a4 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -26,7 +26,10 @@ Unmarshal_Error :: union { Unsupported_Type_Error, } -unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error { +User_Unmarshaller :: #type proc(p: ^Parser, v: any) +User_Unmarshaller_Map :: map[typeid]User_Unmarshaller + +unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map, allocator := context.allocator) -> Unmarshal_Error { v := v if v == nil || v.id == nil { return .Invalid_Parameter @@ -53,20 +56,20 @@ unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, alloc if p.spec == .MJSON { #partial switch p.curr_token.kind { case .Ident, .String: - return unmarshal_object(&p, data, .EOF) + return unmarshal_object(&p, data, .EOF, user_unmarshallers) } } - return unmarshal_value(&p, data) + return unmarshal_value(&p, data, user_unmarshallers) } -unmarshal :: proc(data: []byte, ptr: ^$T, spec := DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error { - return unmarshal_any(data, ptr, spec, allocator) +unmarshal :: proc(data: []byte, ptr: ^$T, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map = nil, allocator := context.allocator) -> Unmarshal_Error { + return unmarshal_any(data, ptr, spec, user_unmarshallers, allocator) } -unmarshal_string :: proc(data: string, ptr: ^$T, spec := DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error { - return unmarshal_any(transmute([]byte)data, ptr, spec, allocator) +unmarshal_string :: proc(data: string, ptr: ^$T, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map = nil, allocator := context.allocator) -> Unmarshal_Error { + return unmarshal_any(transmute([]byte)data, ptr, spec, user_unmarshallers, allocator) } @@ -267,10 +270,18 @@ unmarshal_string_token :: proc(p: ^Parser, val: any, token: Token, ti: ^reflect. @(private) -unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { +unmarshal_value :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshaller_Map = nil) -> (err: Unmarshal_Error) { UNSUPPORTED_TYPE := Unsupported_Type_Error{v.id, p.curr_token} token := p.curr_token + if user_unmarshallers != nil { + unmarshaller := user_unmarshallers[v.id] + if unmarshaller != nil { + unmarshaller(p, v) + return + } + } + v := v ti := reflect.type_info_base(type_info_of(v.id)) if u, ok := ti.variant.(reflect.Type_Info_Union); ok && token.kind != .Null { @@ -287,7 +298,7 @@ unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { for variant, i in u.variants { variant_any := any{v.data, variant.id} variant_p := p^ - if err = unmarshal_value(&variant_p, variant_any); err == nil { + if err = unmarshal_value(&variant_p, variant_any, user_unmarshallers); err == nil { p^ = variant_p raw_tag := i @@ -363,10 +374,10 @@ unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { return UNSUPPORTED_TYPE case .Open_Brace: - return unmarshal_object(p, v, .Close_Brace) + return unmarshal_object(p, v, .Close_Brace, user_unmarshallers) case .Open_Bracket: - return unmarshal_array(p, v) + return unmarshal_array(p, v, user_unmarshallers) case: if p.spec != .JSON { @@ -423,7 +434,7 @@ json_name_from_tag_value :: proc(value: string) -> (json_name, extra: string) { @(private) -unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unmarshal_Error) { +unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind, user_unmarshallers: User_Unmarshaller_Map = nil) -> (err: Unmarshal_Error) { UNSUPPORTED_TYPE := Unsupported_Type_Error{v.id, p.curr_token} if end_token == .Close_Brace { @@ -522,7 +533,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm field_ptr := rawptr(uintptr(v.data) + offset) field := any{field_ptr, type.id} - unmarshal_value(p, field) or_return + unmarshal_value(p, field, user_unmarshallers) or_return if parse_comma(p) { break struct_loop @@ -564,7 +575,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm mem.zero_slice(elem_backing) - if uerr := unmarshal_value(p, map_backing_value); uerr != nil { + if uerr := unmarshal_value(p, map_backing_value, user_unmarshallers); uerr != nil { delete(key, p.allocator) return uerr } @@ -626,7 +637,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm index_ptr := rawptr(uintptr(v.data) + uintptr(index*t.elem_size)) index_any := any{index_ptr, t.elem.id} - unmarshal_value(p, index_any) or_return + unmarshal_value(p, index_any, user_unmarshallers) or_return if parse_comma(p) { break enumerated_array_loop @@ -662,8 +673,8 @@ unmarshal_count_array :: proc(p: ^Parser) -> (length: uintptr) { } @(private) -unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { - assign_array :: proc(p: ^Parser, base: rawptr, elem: ^reflect.Type_Info, length: uintptr) -> Unmarshal_Error { +unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshaller_Map = nil) -> (err: Unmarshal_Error) { + assign_array :: proc(p: ^Parser, base: rawptr, elem: ^reflect.Type_Info, length: uintptr, user_unmarshallers: User_Unmarshaller_Map = nil) -> Unmarshal_Error { unmarshal_expect_token(p, .Open_Bracket) for idx: uintptr = 0; p.curr_token.kind != .Close_Bracket; idx += 1 { @@ -672,7 +683,7 @@ unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { elem_ptr := rawptr(uintptr(base) + idx*uintptr(elem.size)) elem := any{elem_ptr, elem.id} - unmarshal_value(p, elem) or_return + unmarshal_value(p, elem, user_unmarshallers) or_return if parse_comma(p) { break @@ -698,7 +709,7 @@ unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { raw.data = raw_data(data) raw.len = int(length) - return assign_array(p, raw.data, t.elem, length) + return assign_array(p, raw.data, t.elem, length, user_unmarshallers) case reflect.Type_Info_Dynamic_Array: raw := (^mem.Raw_Dynamic_Array)(v.data) @@ -708,7 +719,7 @@ unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { raw.cap = int(length) raw.allocator = p.allocator - return assign_array(p, raw.data, t.elem, length) + return assign_array(p, raw.data, t.elem, length, user_unmarshallers) case reflect.Type_Info_Array: // NOTE(bill): Allow lengths which are less than the dst array @@ -716,7 +727,7 @@ unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { return UNSUPPORTED_TYPE } - return assign_array(p, v.data, t.elem, length) + return assign_array(p, v.data, t.elem, length, user_unmarshallers) case reflect.Type_Info_Enumerated_Array: // NOTE(bill): Allow lengths which are less than the dst array @@ -724,7 +735,7 @@ unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { return UNSUPPORTED_TYPE } - return assign_array(p, v.data, t.elem, length) + return assign_array(p, v.data, t.elem, length, user_unmarshallers) case reflect.Type_Info_Complex: // NOTE(bill): Allow lengths which are less than the dst array @@ -733,9 +744,9 @@ unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { } switch ti.id { - case complex32: return assign_array(p, v.data, type_info_of(f16), 2) - case complex64: return assign_array(p, v.data, type_info_of(f32), 2) - case complex128: return assign_array(p, v.data, type_info_of(f64), 2) + case complex32: return assign_array(p, v.data, type_info_of(f16), 2, user_unmarshallers) + case complex64: return assign_array(p, v.data, type_info_of(f32), 2, user_unmarshallers) + case complex128: return assign_array(p, v.data, type_info_of(f64), 2, user_unmarshallers) } return UNSUPPORTED_TYPE From 72d65603eb513d6788a21f02bc211b662c6102e8 Mon Sep 17 00:00:00 2001 From: Hisham Aburaqibah Date: Thu, 6 Nov 2025 09:02:05 +0200 Subject: [PATCH 003/212] encoding/json: error handling for custom (un)marshallers --- core/encoding/json/marshal.odin | 4 ++-- core/encoding/json/unmarshal.odin | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index 81884b71b..58fbbd852 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -62,7 +62,7 @@ Marshal_Options :: struct { mjson_skipped_first_braces_end: bool, } -User_Marshaller :: #type proc(w: io.Writer, v: any) +User_Marshaller :: #type proc(w: io.Writer, v: any) -> Marshal_Error User_Marshaller_Map :: map[typeid]User_Marshaller marshal :: proc(v: any, opt: Marshal_Options = {}, user_marshallers: User_Marshaller_Map = nil, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Marshal_Error) { @@ -97,7 +97,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_mars if user_marshallers != nil { marshaller := user_marshallers[v.id] if marshaller != nil { - marshaller(w, v) + marshaller(w, v) or_return return } } diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index c1a2725a4..564b84842 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -26,7 +26,7 @@ Unmarshal_Error :: union { Unsupported_Type_Error, } -User_Unmarshaller :: #type proc(p: ^Parser, v: any) +User_Unmarshaller :: #type proc(p: ^Parser, v: any) -> Unmarshal_Error User_Unmarshaller_Map :: map[typeid]User_Unmarshaller unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map, allocator := context.allocator) -> Unmarshal_Error { @@ -277,7 +277,7 @@ unmarshal_value :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle if user_unmarshallers != nil { unmarshaller := user_unmarshallers[v.id] if unmarshaller != nil { - unmarshaller(p, v) + unmarshaller(p, v) or_return return } } From 83fb7ba9523bc67b9f3d72ba961abd3a55dffda0 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Wed, 10 Dec 2025 17:54:12 +0100 Subject: [PATCH 004/212] Make custom JSON (un)marshalers more like core:fmt's --- core/encoding/json/marshal.odin | 120 +++++++++++++++++++------ core/encoding/json/unmarshal.odin | 141 ++++++++++++++++++++++-------- 2 files changed, 200 insertions(+), 61 deletions(-) diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index 58fbbd852..93d0b523e 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -62,10 +62,79 @@ Marshal_Options :: struct { mjson_skipped_first_braces_end: bool, } -User_Marshaller :: #type proc(w: io.Writer, v: any) -> Marshal_Error -User_Marshaller_Map :: map[typeid]User_Marshaller +User_Marshaler :: #type proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> Marshal_Error -marshal :: proc(v: any, opt: Marshal_Options = {}, user_marshallers: User_Marshaller_Map = nil, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Marshal_Error) { +Register_User_Marshaler_Error :: enum { + None, + No_User_Marshaler, + Marshaler_Previously_Found, +} + +// Example User Marshaler: +// Custom Marshaler for `int` +// Some_Marshaler :: proc(w: io.Writer, v: any, opt: ^json.Marshal_Options) -> json.Marshal_Error { +// io.write_string(w, fmt.tprintf("%b", v)) +// return json.Marshal_Data_Error.None +// } +// +// main :: proc() { +// // Ensure the json._user_marshaler map is initialized +// json.set_user_marshalers(new(map[typeid]json.User_Marshaler)) +// reg_err := json.register_user_marshaler(type_info_of(int).id, Some_Marshaler) +// assert(reg_err == .None) +// +// +// // Use the custom marshaler +// SomeType :: struct { +// value: int, +// } +// +// x := SomeType{42} +// data, marshal_err := json.marshal(x) +// assert(marshal_err == nil) +// defer delete(data) +// +// fmt.println("Custom output:", string(data)) // Custom output: {"value":101010} +// } + +// NOTE(Jeroen): This is a pointer to prevent accidental additions +// it is prefixed with `_` rather than marked with a private attribute so that users can access it if necessary +_user_marshalers: ^map[typeid]User_Marshaler + +// Sets user-defined marshalers for custom json marshaling of specific types +// +// Inputs: +// - m: A pointer to a map of typeids to User_Marshaler procs. +// +// NOTE: Must be called before using register_user_marshaler. +// +set_user_marshalers :: proc(m: ^map[typeid]User_Marshaler) { + assert(_user_marshalers == nil, "set_user_marshalers must not be called more than once.") + _user_marshalers = m +} + +// Registers a user-defined marshaler for a specific typeid +// +// Inputs: +// - id: The typeid of the custom type. +// - formatter: The User_Marshaler function for the custom type. +// +// Returns: A Register_User_Marshaler_Error value indicating the success or failure of the operation. +// +// WARNING: set_user_marshalers must be called before using this procedure. +// +register_user_marshaler :: proc(id: typeid, marshaler: User_Marshaler) -> Register_User_Marshaler_Error { + if _user_marshalers == nil { + return .No_User_Marshaler + } + if prev, found := _user_marshalers[id]; found && prev != nil { + return .Marshaler_Previously_Found + } + _user_marshalers[id] = marshaler + return .None +} + +marshal :: proc(v: any, opt: Marshal_Options = {}, allocator := context.allocator, loc := #caller_location) -> (data: []byte, err: Marshal_Error) { b := strings.builder_make(allocator, loc) defer if err != nil { strings.builder_destroy(&b) @@ -75,7 +144,7 @@ marshal :: proc(v: any, opt: Marshal_Options = {}, user_marshallers: User_Marsha runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD(ignore = allocator == context.temp_allocator) opt := opt - marshal_to_builder(&b, v, &opt, user_marshallers) or_return + marshal_to_builder(&b, v, &opt) or_return if len(b.buf) != 0 { data = b.buf[:] @@ -84,21 +153,20 @@ marshal :: proc(v: any, opt: Marshal_Options = {}, user_marshallers: User_Marsha return data, nil } -marshal_to_builder :: proc(b: ^strings.Builder, v: any, opt: ^Marshal_Options, user_marshallers: User_Marshaller_Map = nil) -> Marshal_Error { - return marshal_to_writer(strings.to_writer(b), v, opt, user_marshallers) +marshal_to_builder :: proc(b: ^strings.Builder, v: any, opt: ^Marshal_Options) -> Marshal_Error { + return marshal_to_writer(strings.to_writer(b), v, opt) } -marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_marshallers: User_Marshaller_Map = nil) -> (err: Marshal_Error) { +marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: Marshal_Error) { if v == nil { io.write_string(w, "null") or_return return } - if user_marshallers != nil { - marshaller := user_marshallers[v.id] - if marshaller != nil { - marshaller(w, v) or_return - return + if _user_marshalers != nil { + marshaler := _user_marshalers[v.id] + if marshaler != nil { + return marshaler(w, v, opt) } } @@ -219,7 +287,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_mars for i in 0.. (err: Marshal_Error) { + marshal_struct_fields :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: Marshal_Error) { ti := runtime.type_info_base(type_info_of(v.id)) info := ti.variant.(runtime.Type_Info_Struct) first_iteration := true @@ -430,7 +498,7 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_mars } else { // Marshal the fields of 'using _: T' fields directly into the parent struct if info.usings[i] && name == "_" { - marshal_struct_fields(w, the_value, opt, user_marshallers) or_return + marshal_struct_fields(w, the_value, opt) or_return continue } else { opt_write_key(w, opt, name) or_return @@ -438,13 +506,13 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_mars } - marshal_to_writer(w, the_value, opt, user_marshallers) or_return + marshal_to_writer(w, the_value, opt) or_return } return } opt_write_start(w, opt, '{') or_return - marshal_struct_fields(w, v, opt, user_marshallers) or_return + marshal_struct_fields(w, v, opt) or_return opt_write_end(w, opt, '}') or_return case runtime.Type_Info_Union: @@ -477,17 +545,17 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options, user_mars tag -= 1 } id := info.variants[tag].id - return marshal_to_writer(w, any{v.data, id}, opt, user_marshallers) + return marshal_to_writer(w, any{v.data, id}, opt) case runtime.Type_Info_Enum: if !opt.use_enum_names || len(info.names) == 0 { - return marshal_to_writer(w, any{v.data, info.base.id}, opt, user_marshallers) + return marshal_to_writer(w, any{v.data, info.base.id}, opt) } else { name, found := reflect.enum_name_from_value_any(v) if found { - return marshal_to_writer(w, name, opt, user_marshallers) + return marshal_to_writer(w, name, opt) } else { - return marshal_to_writer(w, any{v.data, info.base.id}, opt, user_marshallers) + return marshal_to_writer(w, any{v.data, info.base.id}, opt) } } diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index 564b84842..25209439f 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -26,10 +26,81 @@ Unmarshal_Error :: union { Unsupported_Type_Error, } -User_Unmarshaller :: #type proc(p: ^Parser, v: any) -> Unmarshal_Error -User_Unmarshaller_Map :: map[typeid]User_Unmarshaller +User_Unmarshaler :: #type proc(p: ^Parser, v: any) -> Unmarshal_Error -unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map, allocator := context.allocator) -> Unmarshal_Error { +Register_User_Unmarshaler_Error :: enum { + None, + No_User_Unmarshaler, + Unmarshaler_Previously_Found, +} + +// Example User Unmarshaler: +// Custom Unmarshaler for `int` +// Some_Unmarshaler :: proc(p: ^json.Parser, v: any) -> json.Unmarshal_Error { +// token := p.curr_token.text +// i, ok := strconv.parse_i64_of_base(token, 2) +// if !ok { +// return .Invalid_Data +// +// } +// (^int)(v.data)^ = int(i) +// return .None +// } +// +// _main :: proc() { +// // Ensure the json._user_unmarshaler map is initialized +// json.set_user_unmarshalers(new(map[typeid]json.User_Unmarshaler)) +// reg_err := json.register_user_unmarshaler(type_info_of(int).id, Some_Unmarshaler) +// assert(reg_err == .None) +// +// data := `{"value":101010}` +// SomeType :: struct { +// value: int, +// } +// y: SomeType +// +// unmarshal_err := json.unmarshal(transmute([]byte)data, &y) +// fmt.println(y, unmarshal_err) +// } + +// NOTE(Jeroen): This is a pointer to prevent accidental additions +// it is prefixed with `_` rather than marked with a private attribute so that users can access it if necessary +_user_unmarshalers: ^map[typeid]User_Unmarshaler + +// Sets user-defined unmarshalers for custom json unmarshaling of specific types +// +// Inputs: +// - m: A pointer to a map of typeids to User_Unmarshaler procs. +// +// NOTE: Must be called before using register_user_unmarshaler. +// +set_user_unmarshalers :: proc(m: ^map[typeid]User_Unmarshaler) { + assert(_user_unmarshalers == nil, "set_user_unmarshalers must not be called more than once.") + _user_unmarshalers = m +} + +// Registers a user-defined unmarshaler for a specific typeid +// +// Inputs: +// - id: The typeid of the custom type. +// - unmarshaler: The User_Unmarshaler function for the custom type. +// +// Returns: A Register_User_Unmarshaler_Error value indicating the success or failure of the operation. +// +// WARNING: set_user_unmarshalers must be called before using this procedure. +// +register_user_unmarshaler :: proc(id: typeid, unmarshaler: User_Unmarshaler) -> Register_User_Unmarshaler_Error { + if _user_unmarshalers == nil { + return .No_User_Unmarshaler + } + if prev, found := _user_unmarshalers[id]; found && prev != nil { + return .Unmarshaler_Previously_Found + } + _user_unmarshalers[id] = unmarshaler + return .None +} + +unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error { v := v if v == nil || v.id == nil { return .Invalid_Parameter @@ -40,8 +111,10 @@ unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, user_ return .Non_Pointer_Parameter } PARSE_INTEGERS :: true - - if !is_valid(data, spec, PARSE_INTEGERS) { + + // If we have custom unmarshalers, we skip validation in case the custom data is not quite up to spec. + have_custom := _user_unmarshalers != nil && len(_user_unmarshalers) > 0 + if !have_custom && !is_valid(data, spec, PARSE_INTEGERS) { return .Invalid_Data } p := make_parser(data, spec, PARSE_INTEGERS, allocator) @@ -56,20 +129,20 @@ unmarshal_any :: proc(data: []byte, v: any, spec := DEFAULT_SPECIFICATION, user_ if p.spec == .MJSON { #partial switch p.curr_token.kind { case .Ident, .String: - return unmarshal_object(&p, data, .EOF, user_unmarshallers) + return unmarshal_object(&p, data, .EOF) } } - return unmarshal_value(&p, data, user_unmarshallers) + return unmarshal_value(&p, data) } -unmarshal :: proc(data: []byte, ptr: ^$T, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map = nil, allocator := context.allocator) -> Unmarshal_Error { - return unmarshal_any(data, ptr, spec, user_unmarshallers, allocator) +unmarshal :: proc(data: []byte, ptr: ^$T, spec := DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error { + return unmarshal_any(data, ptr, spec, allocator) } -unmarshal_string :: proc(data: string, ptr: ^$T, spec := DEFAULT_SPECIFICATION, user_unmarshallers: User_Unmarshaller_Map = nil, allocator := context.allocator) -> Unmarshal_Error { - return unmarshal_any(transmute([]byte)data, ptr, spec, user_unmarshallers, allocator) +unmarshal_string :: proc(data: string, ptr: ^$T, spec := DEFAULT_SPECIFICATION, allocator := context.allocator) -> Unmarshal_Error { + return unmarshal_any(transmute([]byte)data, ptr, spec, allocator) } @@ -268,17 +341,15 @@ unmarshal_string_token :: proc(p: ^Parser, val: any, token: Token, ti: ^reflect. return false, nil } - @(private) -unmarshal_value :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshaller_Map = nil) -> (err: Unmarshal_Error) { +unmarshal_value :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { UNSUPPORTED_TYPE := Unsupported_Type_Error{v.id, p.curr_token} token := p.curr_token - if user_unmarshallers != nil { - unmarshaller := user_unmarshallers[v.id] - if unmarshaller != nil { - unmarshaller(p, v) or_return - return + if _user_unmarshalers != nil { + unmarshaler := _user_unmarshalers[v.id] + if unmarshaler != nil { + return unmarshaler(p, v) } } @@ -298,7 +369,7 @@ unmarshal_value :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle for variant, i in u.variants { variant_any := any{v.data, variant.id} variant_p := p^ - if err = unmarshal_value(&variant_p, variant_any, user_unmarshallers); err == nil { + if err = unmarshal_value(&variant_p, variant_any); err == nil { p^ = variant_p raw_tag := i @@ -374,10 +445,10 @@ unmarshal_value :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle return UNSUPPORTED_TYPE case .Open_Brace: - return unmarshal_object(p, v, .Close_Brace, user_unmarshallers) + return unmarshal_object(p, v, .Close_Brace) case .Open_Bracket: - return unmarshal_array(p, v, user_unmarshallers) + return unmarshal_array(p, v) case: if p.spec != .JSON { @@ -434,7 +505,7 @@ json_name_from_tag_value :: proc(value: string) -> (json_name, extra: string) { @(private) -unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind, user_unmarshallers: User_Unmarshaller_Map = nil) -> (err: Unmarshal_Error) { +unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unmarshal_Error) { UNSUPPORTED_TYPE := Unsupported_Type_Error{v.id, p.curr_token} if end_token == .Close_Brace { @@ -533,7 +604,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind, user_unmarsh field_ptr := rawptr(uintptr(v.data) + offset) field := any{field_ptr, type.id} - unmarshal_value(p, field, user_unmarshallers) or_return + unmarshal_value(p, field) or_return if parse_comma(p) { break struct_loop @@ -575,7 +646,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind, user_unmarsh mem.zero_slice(elem_backing) - if uerr := unmarshal_value(p, map_backing_value, user_unmarshallers); uerr != nil { + if uerr := unmarshal_value(p, map_backing_value); uerr != nil { delete(key, p.allocator) return uerr } @@ -637,7 +708,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind, user_unmarsh index_ptr := rawptr(uintptr(v.data) + uintptr(index*t.elem_size)) index_any := any{index_ptr, t.elem.id} - unmarshal_value(p, index_any, user_unmarshallers) or_return + unmarshal_value(p, index_any) or_return if parse_comma(p) { break enumerated_array_loop @@ -673,8 +744,8 @@ unmarshal_count_array :: proc(p: ^Parser) -> (length: uintptr) { } @(private) -unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshaller_Map = nil) -> (err: Unmarshal_Error) { - assign_array :: proc(p: ^Parser, base: rawptr, elem: ^reflect.Type_Info, length: uintptr, user_unmarshallers: User_Unmarshaller_Map = nil) -> Unmarshal_Error { +unmarshal_array :: proc(p: ^Parser, v: any) -> (err: Unmarshal_Error) { + assign_array :: proc(p: ^Parser, base: rawptr, elem: ^reflect.Type_Info, length: uintptr) -> Unmarshal_Error { unmarshal_expect_token(p, .Open_Bracket) for idx: uintptr = 0; p.curr_token.kind != .Close_Bracket; idx += 1 { @@ -683,7 +754,7 @@ unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle elem_ptr := rawptr(uintptr(base) + idx*uintptr(elem.size)) elem := any{elem_ptr, elem.id} - unmarshal_value(p, elem, user_unmarshallers) or_return + unmarshal_value(p, elem) or_return if parse_comma(p) { break @@ -709,7 +780,7 @@ unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle raw.data = raw_data(data) raw.len = int(length) - return assign_array(p, raw.data, t.elem, length, user_unmarshallers) + return assign_array(p, raw.data, t.elem, length) case reflect.Type_Info_Dynamic_Array: raw := (^mem.Raw_Dynamic_Array)(v.data) @@ -719,7 +790,7 @@ unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle raw.cap = int(length) raw.allocator = p.allocator - return assign_array(p, raw.data, t.elem, length, user_unmarshallers) + return assign_array(p, raw.data, t.elem, length) case reflect.Type_Info_Array: // NOTE(bill): Allow lengths which are less than the dst array @@ -727,7 +798,7 @@ unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle return UNSUPPORTED_TYPE } - return assign_array(p, v.data, t.elem, length, user_unmarshallers) + return assign_array(p, v.data, t.elem, length) case reflect.Type_Info_Enumerated_Array: // NOTE(bill): Allow lengths which are less than the dst array @@ -735,7 +806,7 @@ unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle return UNSUPPORTED_TYPE } - return assign_array(p, v.data, t.elem, length, user_unmarshallers) + return assign_array(p, v.data, t.elem, length) case reflect.Type_Info_Complex: // NOTE(bill): Allow lengths which are less than the dst array @@ -744,9 +815,9 @@ unmarshal_array :: proc(p: ^Parser, v: any, user_unmarshallers: User_Unmarshalle } switch ti.id { - case complex32: return assign_array(p, v.data, type_info_of(f16), 2, user_unmarshallers) - case complex64: return assign_array(p, v.data, type_info_of(f32), 2, user_unmarshallers) - case complex128: return assign_array(p, v.data, type_info_of(f64), 2, user_unmarshallers) + case complex32: return assign_array(p, v.data, type_info_of(f16), 2) + case complex64: return assign_array(p, v.data, type_info_of(f32), 2) + case complex128: return assign_array(p, v.data, type_info_of(f64), 2) } return UNSUPPORTED_TYPE From a5809d0185dfeb2473f2a3947459b889c4dd5098 Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Thu, 18 Dec 2025 15:04:22 +0100 Subject: [PATCH 005/212] Fix #packed #all_or_none --- src/parser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parser.cpp b/src/parser.cpp index 06703d643..de5655ce1 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2803,7 +2803,7 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { } is_packed = true; } else if (tag.string == "all_or_none") { - if (is_packed) { + if (is_all_or_none) { syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string)); } is_all_or_none = true; From c06fc7da98237f00e1a2905bd5c7039f34199edf Mon Sep 17 00:00:00 2001 From: Xotchkass <78706300+Xotchkass@users.noreply.github.com> Date: Thu, 18 Dec 2025 20:14:31 +0200 Subject: [PATCH 006/212] [core:io/utils] fix buffer size in write_* procs --- core/io/util.odin | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/io/util.odin b/core/io/util.odin index 86a89cfb1..a82a80be0 100644 --- a/core/io/util.odin +++ b/core/io/util.odin @@ -21,12 +21,12 @@ write_ptr_at :: proc(w: Writer_At, p: rawptr, byte_size: int, offset: i64, n_wri } write_u64 :: proc(w: Writer, i: u64, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) { - buf: [32]byte + buf: [64]byte s := strconv.write_bits(buf[:], i, base, false, 64, strconv.digits, nil) return write_string(w, s, n_written) } write_i64 :: proc(w: Writer, i: i64, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) { - buf: [32]byte + buf: [65]byte s := strconv.write_bits(buf[:], u64(i), base, true, 64, strconv.digits, nil) return write_string(w, s, n_written) } @@ -39,12 +39,12 @@ write_int :: proc(w: Writer, i: int, base: int = 10, n_written: ^int = nil) -> ( } write_u128 :: proc(w: Writer, i: u128, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) { - buf: [39]byte + buf: [128]byte s := strconv.write_bits_128(buf[:], i, base, false, 128, strconv.digits, nil) return write_string(w, s, n_written) } write_i128 :: proc(w: Writer, i: i128, base: int = 10, n_written: ^int = nil) -> (n: int, err: Error) { - buf: [40]byte + buf: [129]byte s := strconv.write_bits_128(buf[:], u128(i), base, true, 128, strconv.digits, nil) return write_string(w, s, n_written) } From ca20a9c8e78df9e0d483589ec58300d05d92b425 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 21 Dec 2025 15:21:26 +0000 Subject: [PATCH 007/212] Pre`reserve` the memory needed for `strings.builder_replace` --- core/strings/builder.odin | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/core/strings/builder.odin b/core/strings/builder.odin index da9b6df27..ce636a2a1 100644 --- a/core/strings/builder.odin +++ b/core/strings/builder.odin @@ -880,6 +880,20 @@ builder_replace :: proc(b: ^Builder, old, new: string, n: int, loc := #caller_lo } if len(old) == 0 { + // NOTE(bill): reserve the necessary memory + found := 0 + for i := 0; i <= len(b.buf); i += len(new)+1 { + if n > 0 && found == n { + break + } + found += 1 + } + if found == 0 { + return + } + reserve(&b.buf, len(b.buf) + len(new)*found) or_return + + for i := 0; i <= len(b.buf); i += len(new)+1 { if n > 0 && replaced == n { break @@ -891,6 +905,27 @@ builder_replace :: proc(b: ^Builder, old, new: string, n: int, loc := #caller_lo replaced += 1 } } else { + if len(new) > len(old) { + // NOTE(bill): reserve the necessary memory + found := 0 + for i := 0; i < len(b.buf); /**/ { + if n > 0 && found == n { + break + } + + j := index(string(b.buf[i:]), old) + if j < 0 { + break + } + i += j+len(old) + found += 1 + } + if found == 0 { + return + } + reserve(&b.buf, len(b.buf) + (len(new)-len(old))*found) or_return + } + for i := 0; i < len(b.buf); /**/ { if n > 0 && replaced == n { break @@ -901,7 +936,7 @@ builder_replace :: proc(b: ^Builder, old, new: string, n: int, loc := #caller_lo break } - if len(new) >= len(old) { + if len(new) > len(old) { resize(&b.buf, len(b.buf) + len(new)-len(old)) or_return } From 06076e02c0acd0559eeefb32a1a420e4d7243aa7 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 21 Dec 2025 17:02:41 +0100 Subject: [PATCH 008/212] js: improve warning about conflicting memory strategies --- core/sys/wasm/js/odin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index 43a6b002a..ef203e24d 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -2107,7 +2107,7 @@ async function runWasm(wasmPath, consoleElement, extraForeignImports, wasmMemory if (exports.memory) { if (wasmMemoryInterface.memory) { - console.warn("WASM module exports memory, but `runWasm` was given an interface with existing memory too"); + console.warn('WASM module exports memory, but `runWasm` was given an interface with existing memory too. Did you mean to use `-extra-linker-flags:"--import-memory"` to tell the compiler not to export memory?'); } wasmMemoryInterface.setMemory(exports.memory); } From 998da2c2da72853cff9ceeb86d07ad20bb81a8c6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 21 Dec 2025 17:09:22 +0000 Subject: [PATCH 009/212] Add `reflect.default_map_hash_by_ptr` --- core/reflect/reflect.odin | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/reflect/reflect.odin b/core/reflect/reflect.odin index 5fbff08c2..378c50ff0 100644 --- a/core/reflect/reflect.odin +++ b/core/reflect/reflect.odin @@ -2003,4 +2003,14 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_ runtime.print_typeid(a.id) runtime.print_string("\n") return true +} + + +@(require_results) +default_map_hash_by_ptr :: proc(ptr: ^$T, seed: uintptr = runtime.INITIAL_HASH_SEED) -> uintptr where intrinsics.type_is_comparable(T) { + assert(ptr != nil) + + info := intrinsics.type_map_info(map[T]struct{}) + + return info.key_hasher(ptr, seed) } \ No newline at end of file From cb2f3aca8b63ca59f63cf794c767096860990f6e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 21 Dec 2025 17:13:59 +0000 Subject: [PATCH 010/212] Change seed logic --- core/reflect/reflect.odin | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/reflect/reflect.odin b/core/reflect/reflect.odin index 378c50ff0..b39c6ac6b 100644 --- a/core/reflect/reflect.odin +++ b/core/reflect/reflect.odin @@ -2007,10 +2007,12 @@ equal :: proc(a, b: any, including_indirect_array_recursion := false, recursion_ @(require_results) -default_map_hash_by_ptr :: proc(ptr: ^$T, seed: uintptr = runtime.INITIAL_HASH_SEED) -> uintptr where intrinsics.type_is_comparable(T) { +default_map_hash_by_ptr :: proc(ptr: ^$T, seed: uintptr = 0) -> uintptr where intrinsics.type_is_comparable(T) { assert(ptr != nil) - info := intrinsics.type_map_info(map[T]struct{}) - return info.key_hasher(ptr, seed) + h := u64(seed) + runtime.INITIAL_HASH_SEED + actual_seed := uintptr(h) | uintptr(uintptr(h) == 0) + + return info.key_hasher(ptr, actual_seed) } \ No newline at end of file From 8ca7fc481fad1a335b5ca46b9f997396df9be1aa Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Sun, 21 Dec 2025 18:59:21 +0100 Subject: [PATCH 011/212] Fix misleading error messages for init, fini and test attributes These look like copy-pasta from the private attribute. --- src/checker.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index 4d5482933..33121b453 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -3581,7 +3581,7 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { return true; } else if (name == "test") { if (value != nullptr) { - error(value, "'%.*s' expects no parameter, or a string literal containing \"file\" or \"package\"", LIT(name)); + error(value, "Expected no value for '%.*s'", LIT(name)); } ac->test = true; return true; @@ -3629,13 +3629,13 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { return true; } else if (name == "init") { if (value != nullptr) { - error(value, "'%.*s' expects no parameter, or a string literal containing \"file\" or \"package\"", LIT(name)); + error(value, "Expected no value for '%.*s'", LIT(name)); } ac->init = true; return true; } else if (name == "fini") { if (value != nullptr) { - error(value, "'%.*s' expects no parameter, or a string literal containing \"file\" or \"package\"", LIT(name)); + error(value, "Expected no value for '%.*s'", LIT(name)); } ac->fini = true; return true; From 9cace192776656d2237c25e402fd321f05ae1aeb Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 21 Dec 2025 18:01:50 +0100 Subject: [PATCH 012/212] net(docs): recv of 0 bytes with no error is a graceful close --- core/net/errors.odin | 8 ++++--- core/net/socket.odin | 19 +++++++++++++++-- tests/core/net/test_core_net.odin | 35 +++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+), 5 deletions(-) diff --git a/core/net/errors.odin b/core/net/errors.odin index 4853327b0..de53640fc 100644 --- a/core/net/errors.odin +++ b/core/net/errors.odin @@ -149,7 +149,8 @@ TCP_Recv_Error :: enum i32 { Invalid_Argument, // The socket is not connected. Not_Connected, - // Connection was closed/broken/shutdown while receiving data. + // Connection was closed due to an error or shutdown. + // NOTE: a graceful close is indicated by a `0, nil` (0 bytes received and no error) return. Connection_Closed, // Timed out before being able to receive any data. Timeout, @@ -170,7 +171,8 @@ UDP_Recv_Error :: enum i32 { Insufficient_Resources, // Invalid socket or buffer given. Invalid_Argument, - // "Connection" was refused by remote, or closed/broken/shutdown while receiving data. + // "Connection" was refused, or closed due to an error. + // NOTE: a graceful close is indicated by a `0, nil` (0 bytes received and no error) return. Connection_Refused, // Timed out before being able to receive any data. Timeout, @@ -193,7 +195,7 @@ TCP_Send_Error :: enum i32 { Insufficient_Resources, // Invalid socket or buffer given. Invalid_Argument, - // Connection was closed/broken/shutdown while receiving data. + // Connection was closed/broken/shutdown while sending data. Connection_Closed, // The socket is not connected. Not_Connected, diff --git a/core/net/socket.odin b/core/net/socket.odin index 7e96ba2b2..edb47cd0b 100644 --- a/core/net/socket.odin +++ b/core/net/socket.odin @@ -193,21 +193,36 @@ close :: proc(socket: Any_Socket) { _close(socket) } +/* + Receive data into a buffer from a TCP socket. + + If no error occurs, `recv_tcp` returns the number of bytes received and `buf` will contain this data received. + If the connection has been gracefully closed, the return value is `0, nil` (0 bytes read and no error). +*/ recv_tcp :: proc(socket: TCP_Socket, buf: []byte) -> (bytes_read: int, err: TCP_Recv_Error) { return _recv_tcp(socket, buf) } +/* + Receive data into a buffer from a UDP socket. + + If no error occurs, `recv_udp` returns the number of bytes received and `buf` will contain this data received. + If the "connection" has been gracefully closed, the return value is `0, nil` (0 bytes read and no error). +*/ recv_udp :: proc(socket: UDP_Socket, buf: []byte) -> (bytes_read: int, remote_endpoint: Endpoint, err: UDP_Recv_Error) { return _recv_udp(socket, buf) } /* - Receive data from into a buffer from any socket. + Receive data into a buffer from any socket. Note: `remote_endpoint` parameter is non-nil only if the socket type is UDP. On TCP sockets it will always return `nil`. - Errors that can be returned: `TCP_Recv_Error`, or `UDP_Recv_Error` + Errors that can be returned: `TCP_Recv_Error`, or `UDP_Recv_Error`. + + If no error occurs, `recv_any` returns the number of bytes received and `buf` will contain this data received. + If the connection has been gracefully closed, the return value is `0, nil, nil` (0 bytes read and no error). */ recv_any :: proc(socket: Any_Socket, buf: []byte) -> ( bytes_read: int, diff --git a/tests/core/net/test_core_net.odin b/tests/core/net/test_core_net.odin index ec45744f3..9b3973a60 100644 --- a/tests/core/net/test_core_net.odin +++ b/tests/core/net/test_core_net.odin @@ -624,6 +624,41 @@ test_nonblocking_option :: proc(t: ^testing.T) { } } +// Test that when the server closes it's connection, the client's next receive is `0, nil` to indicate a correct close. +@(test) +test_connection_close :: proc(t: ^testing.T) { + server, listen_err := net.listen_tcp({address=net.IP4_Address{127, 0, 0, 1}, port=0}) + testing.expect_value(t, listen_err, nil) + defer net.close(server) + + server_ep, bound_endpoint_err := net.bound_endpoint(server) + testing.expect_value(t, bound_endpoint_err, nil) + + client, dial_err := net.dial_tcp(server_ep) + testing.expect_value(t, dial_err, nil) + defer net.close(client) + + server_client, _, accept_err := net.accept_tcp(server) + testing.expect_value(t, accept_err, nil) + + send_buf: [512]byte = 1 + sent, send_err := net.send(server_client, send_buf[:]) + testing.expect_value(t, sent, 512) + testing.expect_value(t, send_err, nil) + net.close(server_client) + + recv_buf: [512]byte = --- + received, recv_err := net.recv(client, recv_buf[:]) + testing.expect_value(t, received, 512) + testing.expect_value(t, recv_err, nil) + + testing.expect_value(t, recv_buf, send_buf) + + received, recv_err = net.recv(client, recv_buf[:]) + testing.expect_value(t, received, 0) + testing.expect_value(t, recv_err, nil) +} + @(private) address_to_binstr :: proc(address: net.Address) -> (binstr: string) { switch t in address { From 8ce30dbb72ebb8162b1e36f29bb7a71abc8ad6de Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Mon, 22 Dec 2025 16:56:10 +0100 Subject: [PATCH 013/212] sys/wasm/js: fix vet error --- core/sys/wasm/js/dom.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sys/wasm/js/dom.odin b/core/sys/wasm/js/dom.odin index 902dfc941..a4f8d7687 100644 --- a/core/sys/wasm/js/dom.odin +++ b/core/sys/wasm/js/dom.odin @@ -15,7 +15,7 @@ foreign dom_lib { get_element_value_string_length :: proc(id: string) -> int --- set_element_key_string :: proc(id: string, key: string, value: string) --- - get_element_key_string_length :: proc(id: string, key: string, ) -> int --- + get_element_key_string_length :: proc(id: string, key: string) -> int --- device_pixel_ratio :: proc() -> f64 --- From b53ee3dba3f21bf5a22b9cf211ae49ff92b3e08b Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Mon, 22 Dec 2025 16:57:58 +0100 Subject: [PATCH 014/212] container/xar: fix undeclared `n` assignment --- core/container/xar/xar.odin | 1 - 1 file changed, 1 deletion(-) diff --git a/core/container/xar/xar.odin b/core/container/xar/xar.odin index 616a05e06..71fc13a27 100644 --- a/core/container/xar/xar.odin +++ b/core/container/xar/xar.odin @@ -323,7 +323,6 @@ push_back_elem_and_get_ptr :: proc(x: ^$X/Xar($T, $SHIFT), value: T, loc := #cal } x.chunks[chunk_idx][elem_idx] = value x.len += 1 - n = 1 ptr = &x.chunks[chunk_idx][elem_idx] return } From 7062f89bcd1d98275e4a1977207b1c7993c90f41 Mon Sep 17 00:00:00 2001 From: Wrath Date: Mon, 22 Dec 2025 16:10:51 -0500 Subject: [PATCH 015/212] core:math/rand small documentation fix --- core/math/rand/rand.odin | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/math/rand/rand.odin b/core/math/rand/rand.odin index 41b066255..2ed2c9e70 100644 --- a/core/math/rand/rand.odin +++ b/core/math/rand/rand.odin @@ -260,7 +260,7 @@ Example: Possible Output: 6 - 500 + 13 */ @(require_results) @@ -301,7 +301,7 @@ Example: Possible Output: 6 - 500 + 13 */ @(require_results) @@ -342,7 +342,7 @@ Example: Possible Output: 6 - 500 + 13 */ @(require_results) From cb98a83f77ca7a3eb0f43c013cdce1f8ee65deb5 Mon Sep 17 00:00:00 2001 From: Dusty Miller Date: Mon, 22 Dec 2025 20:16:24 -0600 Subject: [PATCH 016/212] Update letter.odin Fix MAX_RUNE to include planes up to 16. --- core/unicode/letter.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/unicode/letter.odin b/core/unicode/letter.odin index a1024dd6c..5191dd900 100644 --- a/core/unicode/letter.odin +++ b/core/unicode/letter.odin @@ -2,7 +2,7 @@ package unicode import "base:runtime" -MAX_RUNE :: '\U00010fff' // Maximum valid unicode code point +MAX_RUNE :: '\U0010ffff' // Maximum valid unicode code point REPLACEMENT_CHAR :: '\ufffd' // Represented an invalid code point MAX_ASCII :: '\u007f' // Maximum ASCII value MAX_LATIN1 :: '\u00ff' // Maximum Latin-1 value From ab74b8283d48ca96ea800298ae0f227a9cc0eb99 Mon Sep 17 00:00:00 2001 From: StudebakerGuy <> Date: Tue, 23 Dec 2025 09:35:09 -0500 Subject: [PATCH 017/212] Address issue identifying of CDATA The XML library wasn't identifying CDATA and skipping over it. This was found when CDATA contained a <. This patch addresses that issue. --- core/encoding/xml/xml_reader.odin | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/encoding/xml/xml_reader.odin b/core/encoding/xml/xml_reader.odin index 0e773fd8a..99d73670b 100644 --- a/core/encoding/xml/xml_reader.odin +++ b/core/encoding/xml/xml_reader.odin @@ -308,6 +308,7 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha case .Open_Bracket: // This could be a CDATA tag part of a tag's body. Unread the ` (id: Element_ID) { cur := doc.element_count doc.element_count += 1 return cur -} \ No newline at end of file +} From 2e6554b8c85c904eb1eb010f0312641be800823f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 26 Dec 2025 11:49:46 +0000 Subject: [PATCH 018/212] Disallow importing directories with an `.odin` extension/suffix --- src/parser.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/parser.cpp b/src/parser.cpp index de5655ce1..b2ff55396 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -5818,6 +5818,11 @@ gb_internal AstPackage *try_add_import_path(Parser *p, String path, String const return nullptr; } + if (string_ends_with(path, str_lit(".odin"))) { + error(pos, "'import' declarations cannot import directories with a .odin extension/suffix"); + return nullptr; + } + isize files_with_ext = 0; isize files_to_reserve = 1; // always reserve 1 for (FileInfo fi : list) { From 7e39239907885447b73c8c03648a85554552f1bc Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Fri, 26 Dec 2025 23:02:35 +0100 Subject: [PATCH 019/212] WebGL: Add GetActiveAttrib binding --- core/sys/wasm/js/odin.js | 21 +++++++++++++++++ vendor/wasm/WebGL/webgl.odin | 44 +++++++++++++++++++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index ef203e24d..ca4af18b8 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -625,6 +625,26 @@ class WebGLInterface { this.ctx.generateMipmap(target); }, + GetActiveAttrib: (program, index, size_ptr, type_ptr, name_buf_ptr, name_buf_len, name_len_ptr) => { + let info = this.ctx.getActiveAttrib(program, index); + + if (size_ptr) { + this.mem.storeInt(size_ptr, info.size); + } + + if (type_ptr) { + this.mem.storeI32(type_ptr, info.type); + } + + if name_buf_ptr && name_buf_len > 0 { + let n = Math.min(name_buf_len, info.name.length); + let name = info.name.substring(0, n); + this.mem.loadBytes(name_buf_ptr, name_buf_len).set(new TextEncoder().encode(name)); + this.mem.storeInt(name_len_ptr, n); + } else if name_len_ptr { + this.mem.storeInt(name_len_ptr, info.name.length); + } + }, GetAttribLocation: (program, name_ptr, name_len) => { let name = this.mem.loadString(name_ptr, name_len); @@ -1840,6 +1860,7 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) { return false; }, + // Writes a struct of type `Gamepad_State`, see `core/sys/wasm/js/events.odin` get_gamepad_state: (gamepad_id, ep) => { let index = gamepad_id; let gps = navigator.getGamepads(); diff --git a/vendor/wasm/WebGL/webgl.odin b/vendor/wasm/WebGL/webgl.odin index 5616f3660..1c3bda2e6 100644 --- a/vendor/wasm/WebGL/webgl.odin +++ b/vendor/wasm/WebGL/webgl.odin @@ -3,6 +3,7 @@ package webgl foreign import "webgl" import glm "core:math/linalg/glsl" +import "base:runtime" Enum :: distinct u32 @@ -25,6 +26,12 @@ ContextAttribute :: enum u32 { } ContextAttributes :: distinct bit_set[ContextAttribute; u32] +ActiveInfo :: struct { + size: int, + type: Enum, + name: string, +} + DEFAULT_CONTEXT_ATTRIBUTES :: ContextAttributes{} @(default_calling_convention="contextless") @@ -260,7 +267,6 @@ UniformMatrix4fv :: proc "contextless" (location: i32, m: glm.mat4) { value := transmute([4*4]f32)m _UniformMatrix4fv(location, &value[0]) } - GetShaderiv :: proc "contextless" (shader: Shader, pname: Enum) -> (p: i32) { foreign webgl { @(link_name="GetShaderiv") @@ -270,6 +276,42 @@ GetShaderiv :: proc "contextless" (shader: Shader, pname: Enum) -> (p: i32) { return } +GetActiveAttribBuf :: proc "contextless" (program: Program, index: u32, name_buf: []byte) -> (info: ActiveInfo) { + foreign webgl { + @(link_name="GetActiveAttrib") + _GetActiveAttrib :: proc "contextless" (shader: Program, index: u32, size: ^int, type: ^Enum, name_buf: []byte, name_len: ^int) --- + } + name_len: int + _GetActiveAttrib(program, index, &info.size, &info.type, name_buf, &name_len) + info.name = string(name_buf[:name_len]) + return +} + +GetActiveAttribAlloc :: proc(program: Program, index: u32, allocator: runtime.Allocator, loc := #caller_location) -> (info: ActiveInfo) { + foreign webgl { + @(link_name="GetActiveAttrib") + _GetActiveAttrib :: proc "contextless" (shader: Program, index: u32, size: ^int, type: ^Enum, name_buf: []byte, name_len: ^int) --- + } + + name_len: int + + // Passing {} to the buf but giving it a name_len ptr will write the needed len into that int + _GetActiveAttrib(program, index, &info.size, &info.type, {}, &name_len) + + if name_len > 0 { + name_buf := make([]byte, name_len, allocator, loc) + _GetActiveAttrib(program, index, &info.size, &info.type, name_buf, &name_len) + assert(name_len == len(name_buf)) + info.name = string(name_buf[:name_len]) + } + + return +} + +GetActiveAttrib :: proc { + GetActiveAttribBuf, + GetActiveAttribAlloc, +} GetProgramInfoLog :: proc "contextless" (program: Program, buf: []byte) -> string { foreign webgl { From 7dee25bdcc069bbb0ceb5d4a1ac1a9e3009bfb83 Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Fri, 26 Dec 2025 23:34:45 +0100 Subject: [PATCH 020/212] More allocator-aware webgl bindings and added more missing bindings. --- core/sys/wasm/js/odin.js | 21 ++++++++++++++++++++ vendor/wasm/WebGL/webgl.odin | 37 +++++++++++++++++++++++++++++++++++ vendor/wasm/WebGL/webgl2.odin | 25 ++++++++++++++++++++++- 3 files changed, 82 insertions(+), 1 deletion(-) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index ca4af18b8..b0a01f66c 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -646,6 +646,27 @@ class WebGLInterface { } }, + GetActiveUniform: (program, index, size_ptr, type_ptr, name_buf_ptr, name_buf_len, name_len_ptr) => { + let info = this.ctx.getActiveUniform(program, index); + + if (size_ptr) { + this.mem.storeInt(size_ptr, info.size); + } + + if (type_ptr) { + this.mem.storeI32(type_ptr, info.type); + } + + if name_buf_ptr && name_buf_len > 0 { + let n = Math.min(name_buf_len, info.name.length); + let name = info.name.substring(0, n); + this.mem.loadBytes(name_buf_ptr, name_buf_len).set(new TextEncoder().encode(name)); + this.mem.storeInt(name_len_ptr, n); + } else if name_len_ptr { + this.mem.storeInt(name_len_ptr, info.name.length); + } + }, + GetAttribLocation: (program, name_ptr, name_len) => { let name = this.mem.loadString(name_ptr, name_len); return this.ctx.getAttribLocation(this.programs[program], name); diff --git a/vendor/wasm/WebGL/webgl.odin b/vendor/wasm/WebGL/webgl.odin index 1c3bda2e6..601071c3a 100644 --- a/vendor/wasm/WebGL/webgl.odin +++ b/vendor/wasm/WebGL/webgl.odin @@ -313,6 +313,43 @@ GetActiveAttrib :: proc { GetActiveAttribAlloc, } +GetActiveUniformBuf :: proc "contextless" (program: Program, index: u32, name_buf: []byte) -> (info: ActiveInfo) { + foreign webgl { + @(link_name="GetActiveUniform") + _GetActiveUniform :: proc "contextless" (shader: Program, index: u32, size: ^int, type: ^Enum, name_buf: []byte, name_len: ^int) --- + } + name_len: int + _GetActiveUniform(program, index, &info.size, &info.type, name_buf, &name_len) + info.name = string(name_buf[:name_len]) + return +} + +GetActiveUniformAlloc :: proc(program: Program, index: u32, allocator: runtime.Allocator, loc := #caller_location) -> (info: ActiveInfo) { + foreign webgl { + @(link_name="GetActiveUniform") + _GetActiveUniform :: proc "contextless" (shader: Program, index: u32, size: ^int, type: ^Enum, name_buf: []byte, name_len: ^int) --- + } + + name_len: int + + // Passing {} to the buf but giving it a name_len ptr will write the needed len into that int + _GetActiveUniform(program, index, &info.size, &info.type, {}, &name_len) + + if name_len > 0 { + name_buf := make([]byte, name_len, allocator, loc) + _GetActiveUniform(program, index, &info.size, &info.type, name_buf, &name_len) + assert(name_len == len(name_buf)) + info.name = string(name_buf[:name_len]) + } + + return +} + +GetActiveUniform :: proc { + GetActiveUniformBuf, + GetActiveUniformAlloc, +} + GetProgramInfoLog :: proc "contextless" (program: Program, buf: []byte) -> string { foreign webgl { @(link_name="GetProgramInfoLog") diff --git a/vendor/wasm/WebGL/webgl2.odin b/vendor/wasm/WebGL/webgl2.odin index 66a739303..3494559a5 100644 --- a/vendor/wasm/WebGL/webgl2.odin +++ b/vendor/wasm/WebGL/webgl2.odin @@ -3,6 +3,7 @@ package webgl foreign import "webgl2" import "base:intrinsics" +import "base:runtime" import glm "core:math/linalg/glsl" Query :: distinct u32 @@ -109,7 +110,7 @@ foreign webgl2 { BindVertexArray :: proc(vertexArray: VertexArrayObject) --- } -GetActiveUniformBlockName :: proc(program: Program, uniformBlockIndex: i32, buf: []byte) -> string { +GetActiveUniformBlockNameBuf :: proc(program: Program, uniformBlockIndex: i32, buf: []byte) -> string { foreign webgl2 { _GetActiveUniformBlockName :: proc "contextless" (program: Program, uniformBlockIndex: i32, buf: []byte, length: ^int) --- } @@ -118,6 +119,28 @@ GetActiveUniformBlockName :: proc(program: Program, uniformBlockIndex: i32, buf: return string(buf[:n]) } +GetActiveUniformBlockNameAlloc :: proc(program: Program, uniformBlockIndex: i32, allocator: runtime.Allocator, loc := #caller_location) -> string { + foreign webgl2 { + _GetActiveUniformBlockName :: proc "contextless" (program: Program, uniformBlockIndex: i32, buf: []byte, length: ^int) --- + } + n: int + _GetActiveUniformBlockName(program, uniformBlockIndex, {}, &n) + + if n > 0 { + buf := make([]byte, n, allocator, loc) + _GetActiveUniformBlockName(program, uniformBlockIndex, buf, &n) + assert(n == len(buf)) + return string(buf[:n]) + } + + return "" +} + +GetActiveUniformBlockName :: proc { + GetActiveUniformBlockNameBuf, + GetActiveUniformBlockNameAlloc, +} + Uniform1uiv :: proc "contextless" (location: i32, v: u32) { Uniform1ui(location, v) From 159eab133b4b6dc9df6896d003134c1f0ccfde92 Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Sat, 27 Dec 2025 01:41:59 +0100 Subject: [PATCH 021/212] More webgl bindings and fixes --- core/sys/wasm/js/odin.js | 29 ++++++++++++++++++++++------- vendor/wasm/WebGL/webgl2.odin | 15 ++++++++++++++- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index b0a01f66c..0c617dd8e 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -626,7 +626,7 @@ class WebGLInterface { }, GetActiveAttrib: (program, index, size_ptr, type_ptr, name_buf_ptr, name_buf_len, name_len_ptr) => { - let info = this.ctx.getActiveAttrib(program, index); + const info = this.ctx.getActiveAttrib(this.programs[program], index); if (size_ptr) { this.mem.storeInt(size_ptr, info.size); @@ -636,18 +636,18 @@ class WebGLInterface { this.mem.storeI32(type_ptr, info.type); } - if name_buf_ptr && name_buf_len > 0 { + if (name_buf_ptr && name_buf_len > 0) { let n = Math.min(name_buf_len, info.name.length); let name = info.name.substring(0, n); this.mem.loadBytes(name_buf_ptr, name_buf_len).set(new TextEncoder().encode(name)); this.mem.storeInt(name_len_ptr, n); - } else if name_len_ptr { + } else if (name_len_ptr) { this.mem.storeInt(name_len_ptr, info.name.length); } }, GetActiveUniform: (program, index, size_ptr, type_ptr, name_buf_ptr, name_buf_len, name_len_ptr) => { - let info = this.ctx.getActiveUniform(program, index); + let info = this.ctx.getActiveUniform(this.programs[program], index); if (size_ptr) { this.mem.storeInt(size_ptr, info.size); @@ -657,12 +657,12 @@ class WebGLInterface { this.mem.storeI32(type_ptr, info.type); } - if name_buf_ptr && name_buf_len > 0 { + if (name_buf_ptr && name_buf_len > 0) { let n = Math.min(name_buf_len, info.name.length); let name = info.name.substring(0, n); this.mem.loadBytes(name_buf_ptr, name_buf_len).set(new TextEncoder().encode(name)); this.mem.storeInt(name_len_ptr, n); - } else if name_len_ptr { + } else if (name_len_ptr) { this.mem.storeInt(name_len_ptr, info.name.length); } }, @@ -1301,7 +1301,6 @@ class WebGLInterface { this.assertWebGL2(); return this.ctx.getUniformBlockIndex(this.programs[program], this.mem.loadString(uniformBlockName_ptr, uniformBlockName_len)); }, - // any getActiveUniformBlockParameter(WebGLProgram program, GLuint uniformBlockIndex, GLenum pname); GetActiveUniformBlockName: (program, uniformBlockIndex, buf_ptr, buf_len, length_ptr) => { this.assertWebGL2(); let name = this.ctx.getActiveUniformBlockName(this.programs[program], uniformBlockIndex); @@ -1311,6 +1310,22 @@ class WebGLInterface { this.mem.loadBytes(buf_ptr, buf_len).set(new TextEncoder().encode(name)) this.mem.storeInt(length_ptr, n); }, + GetActiveUniforms: (program, uniformIndices_ptr, uniformIndices_len, pname, res_ptr) => { + thid.assertWebGL2(); + let indices = this.mem.loadU32Array(uniformIndices_ptr, uniformIndices_len); + this.ctx.getActiveUniforms(this.programs[program], indices, pname) + this.mem.loadI32Array(res_ptr, indices.length).set(indices) + }, + GetActiveUniformBlockParameter: (program, uniformBlockIndex, pname, params_ptr) => { + this.assertWebGL2(); + let res = this.ctx.getActiveUniformBlockParameter(this.programs[program], uniformBlockIndex, pname); + + if (e instanceof Uint32Array) { // for pname GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES + this.mem.loadU32Array(params_ptr, res.length).set(res) + } else { + this.mem.storeI32(params_ptr, res) + } + }, UniformBlockBinding: (program, uniformBlockIndex, uniformBlockBinding) => { this.assertWebGL2(); this.ctx.uniformBlockBinding(this.programs[program], uniformBlockIndex, uniformBlockBinding); diff --git a/vendor/wasm/WebGL/webgl2.odin b/vendor/wasm/WebGL/webgl2.odin index 3494559a5..1e36fd0fd 100644 --- a/vendor/wasm/WebGL/webgl2.odin +++ b/vendor/wasm/WebGL/webgl2.odin @@ -104,6 +104,12 @@ foreign webgl2 { GetUniformBlockIndex :: proc(program: Program, uniformBlockName: string) -> i32 --- UniformBlockBinding :: proc(program: Program, uniformBlockIndex: i32, uniformBlockBinding: i32) --- + // if `pname` is `UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES` then an array will be written at + // `params`, in that case the length `params` need to have is given first querying using `pname` + // `UNIFORM_BLOCK_ACTIVE_UNIFORMS`. + GetActiveUniformBlockParameter :: proc(program: Program, uniformBlockIndex: i32, pname: Enum, params: [^]i32) --- + GetActiveUniforms :: proc(program: Program, uniformIndices: []u32, pname: Enum, res: [^]i32) --- + CreateVertexArray :: proc() -> VertexArrayObject --- DeleteVertexArray :: proc(vertexArray: VertexArrayObject) --- IsVertexArray :: proc(vertexArray: VertexArrayObject) -> bool --- @@ -112,6 +118,7 @@ foreign webgl2 { GetActiveUniformBlockNameBuf :: proc(program: Program, uniformBlockIndex: i32, buf: []byte) -> string { foreign webgl2 { + @(link_name="GetActiveUniformBlockName") _GetActiveUniformBlockName :: proc "contextless" (program: Program, uniformBlockIndex: i32, buf: []byte, length: ^int) --- } n: int @@ -121,6 +128,7 @@ GetActiveUniformBlockNameBuf :: proc(program: Program, uniformBlockIndex: i32, b GetActiveUniformBlockNameAlloc :: proc(program: Program, uniformBlockIndex: i32, allocator: runtime.Allocator, loc := #caller_location) -> string { foreign webgl2 { + @(link_name="GetActiveUniformBlockName") _GetActiveUniformBlockName :: proc "contextless" (program: Program, uniformBlockIndex: i32, buf: []byte, length: ^int) --- } n: int @@ -141,7 +149,6 @@ GetActiveUniformBlockName :: proc { GetActiveUniformBlockNameAlloc, } - Uniform1uiv :: proc "contextless" (location: i32, v: u32) { Uniform1ui(location, v) } @@ -157,6 +164,7 @@ Uniform4uiv :: proc "contextless" (location: i32, v: glm.uvec4) { UniformMatrix3x2fv :: proc "contextless" (location: i32, m: glm.mat3x2) { foreign webgl2 { + @(link_name="UniformMatrix3x2fv") _UniformMatrix3x2fv :: proc "contextless" (location: i32, addr: [^]f32) --- } array := intrinsics.matrix_flatten(m) @@ -164,6 +172,7 @@ UniformMatrix3x2fv :: proc "contextless" (location: i32, m: glm.mat3x2) { } UniformMatrix4x2fv :: proc "contextless" (location: i32, m: glm.mat4x2) { foreign webgl2 { + @(link_name="UniformMatrix4x2fv") _UniformMatrix4x2fv :: proc "contextless" (location: i32, addr: [^]f32) --- } array := intrinsics.matrix_flatten(m) @@ -171,6 +180,7 @@ UniformMatrix4x2fv :: proc "contextless" (location: i32, m: glm.mat4x2) { } UniformMatrix2x3fv :: proc "contextless" (location: i32, m: glm.mat2x3) { foreign webgl2 { + @(link_name="UniformMatrix2x3fv") _UniformMatrix2x3fv :: proc "contextless" (location: i32, addr: [^]f32) --- } array := intrinsics.matrix_flatten(m) @@ -178,6 +188,7 @@ UniformMatrix2x3fv :: proc "contextless" (location: i32, m: glm.mat2x3) { } UniformMatrix4x3fv :: proc "contextless" (location: i32, m: glm.mat4x3) { foreign webgl2 { + @(link_name="UniformMatrix4x3fv") _UniformMatrix4x3fv :: proc "contextless" (location: i32, addr: [^]f32) --- } array := intrinsics.matrix_flatten(m) @@ -185,6 +196,7 @@ UniformMatrix4x3fv :: proc "contextless" (location: i32, m: glm.mat4x3) { } UniformMatrix2x4fv :: proc "contextless" (location: i32, m: glm.mat2x4) { foreign webgl2 { + @(link_name="UniformMatrix2x4fv") _UniformMatrix2x4fv :: proc "contextless" (location: i32, addr: [^]f32) --- } array := intrinsics.matrix_flatten(m) @@ -192,6 +204,7 @@ UniformMatrix2x4fv :: proc "contextless" (location: i32, m: glm.mat2x4) { } UniformMatrix3x4fv :: proc "contextless" (location: i32, m: glm.mat3x4) { foreign webgl2 { + @(link_name="UniformMatrix3x4fv") _UniformMatrix3x4fv :: proc "contextless" (location: i32, addr: [^]f32) --- } array := intrinsics.matrix_flatten(m) From d802a4e9fa412e1234a5970b8545994293946409 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zolt=C3=A1n=20K=C3=A9ri?= Date: Sat, 27 Dec 2025 04:30:37 +0100 Subject: [PATCH 022/212] encoding/base32: Fix padding validation for malformed input Fix a bug where padding characters in the middle of input were not detected when there was no trailing padding. The "verify no padding in middle" check was inside `if padding_count > 0`, so inputs like "MZ===YTBMZXW6YTB" would incorrectly pass validation. Test case added for this edge case. --- core/encoding/base32/base32.odin | 14 +++++++------- tests/core/encoding/base32/base32.odin | 14 +++++++++++--- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/core/encoding/base32/base32.odin b/core/encoding/base32/base32.odin index 34de2ff53..d272b32b8 100644 --- a/core/encoding/base32/base32.odin +++ b/core/encoding/base32/base32.odin @@ -153,15 +153,15 @@ decode :: proc( padding_count += 1 } + // Verify no padding in the middle + for i := 0; i < data_len - padding_count; i += 1 { + if data[i] == byte(PADDING) { + return nil, .Malformed_Input + } + } + // Check for proper padding and length combinations if padding_count > 0 { - // Verify no padding in the middle - for i := 0; i < data_len - padding_count; i += 1 { - if data[i] == byte(PADDING) { - return nil, .Malformed_Input - } - } - content_len := data_len - padding_count mod8 := content_len % 8 required_padding: int diff --git a/tests/core/encoding/base32/base32.odin b/tests/core/encoding/base32/base32.odin index f757e99e5..2abb244ca 100644 --- a/tests/core/encoding/base32/base32.odin +++ b/tests/core/encoding/base32/base32.odin @@ -1,4 +1,3 @@ -#+test package test_encoding_base32 import "core:testing" @@ -83,7 +82,16 @@ test_base32_decode_invalid :: proc(t: ^testing.T) { // Section 3.2 - Padding requirements { - // Padding must only be at end + // Padding in middle without trailing padding + input := "MZ===YTBMZXW6YTB" // '===' in middle, no trailing padding + output, err := base32.decode(input) + if output != nil { + defer delete(output) + } + testing.expect_value(t, err, Error.Malformed_Input) + } + { + // Padding must only be at end (with trailing padding) input := "MZ=Q====" output, err := base32.decode(input) if output != nil { @@ -228,4 +236,4 @@ test_base32_custom_alphabet :: proc(t: ^testing.T) { } testing.expect_value(t, err, Error.Invalid_Character) } -} \ No newline at end of file +} From 40eab9991efbd090d2b473f5f121859c544f5d6b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 27 Dec 2025 11:35:13 +0000 Subject: [PATCH 023/212] Split some procedures up --- core/fmt/fmt.odin | 661 ++++++++++++++++++++++++---------------------- 1 file changed, 345 insertions(+), 316 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index c958c2d2e..27168d6c2 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -2142,6 +2142,108 @@ __handle_raw_union_tag :: proc(fi: ^Info, v: any, the_verb: rune, info: runtime. return false } +@(private) +fmt_soa_struct_internal :: proc(fi: ^Info, v: any, the_verb: rune, info: runtime.Type_Info_Struct, type_name: string, hash: bool, indent: int) { + is_empty := info.field_count == 0 + + fi.indent += 1 + defer fi.indent -= 1 + + base_type_name: string + if v, ok := info.soa_base_type.variant.(runtime.Type_Info_Named); ok { + base_type_name = v.name + } + + actual_field_count := info.field_count + + n := uintptr(info.soa_len) + + if info.soa_kind == .Slice { + actual_field_count = info.field_count-1 // len + + n = uintptr((^int)(uintptr(v.data) + info.offsets[actual_field_count])^) + + } else if info.soa_kind == .Dynamic { + actual_field_count = info.field_count-3 // len, cap, allocator + + n = uintptr((^int)(uintptr(v.data) + info.offsets[actual_field_count])^) + } + + if hash && n > 0 { + io.write_byte(fi.writer, '\n', &fi.n) + } + + for index in 0.. 0 { io.write_string(fi.writer, ", ", &fi.n) } + + field_count := -1 + + if !hash && field_count > 0 { io.write_string(fi.writer, ", ", &fi.n) } + + if hash { + fi.indent -= 1 + fmt_write_indent(fi) + fi.indent += 1 + } + io.write_string(fi.writer, base_type_name, &fi.n) + io.write_byte(fi.writer, '{', &fi.n) + if hash && !is_empty { io.write_byte(fi.writer, '\n', &fi.n) } + defer { + if hash && !is_empty { + fi.indent -= 1 + fmt_write_indent(fi) + fi.indent += 1 + } + io.write_byte(fi.writer, '}', &fi.n) + if hash { io.write_string(fi.writer, ",\n", &fi.n) } + } + fi.record_level += 1 + defer fi.record_level -= 1 + + for i in 0.. 0 { io.write_string(fi.writer, ", ", &fi.n) } + if hash { + fmt_write_indent(fi) + } + + io.write_string(fi.writer, name, &fi.n) + io.write_string(fi.writer, " = ", &fi.n) + + if info.soa_kind == .Fixed { + t := info.types[i].variant.(runtime.Type_Info_Array).elem + t_size := uintptr(t.size) + if reflect.is_any(t) { + io.write_string(fi.writer, "any{}", &fi.n) + } else { + data := rawptr(uintptr(v.data) + info.offsets[i] + index*t_size) + fmt_arg(fi, any{data, t.id}, verb) + } + } else { + t := info.types[i].variant.(runtime.Type_Info_Multi_Pointer).elem + t_size := uintptr(t.size) + if reflect.is_any(t) { + io.write_string(fi.writer, "any{}", &fi.n) + } else { + field_ptr := (^^byte)(uintptr(v.data) + info.offsets[i])^ + data := rawptr(uintptr(field_ptr) + index*t_size) + fmt_arg(fi, any{data, t.id}, verb) + } + } + + if hash { io.write_string(fi.writer, ",\n", &fi.n) } + } + } + + if hash && n > 0 { + for _ in 0.. 0 { - io.write_byte(fi.writer, '\n', &fi.n) - } - - for index in 0.. 0 { io.write_string(fi.writer, ", ", &fi.n) } - - field_count := -1 - - if !hash && field_count > 0 { io.write_string(fi.writer, ", ", &fi.n) } - - if hash { - fi.indent -= 1 - fmt_write_indent(fi) - fi.indent += 1 - } - io.write_string(fi.writer, base_type_name, &fi.n) - io.write_byte(fi.writer, '{', &fi.n) - if hash && !is_empty { io.write_byte(fi.writer, '\n', &fi.n) } - defer { - if hash && !is_empty { - fi.indent -= 1 - fmt_write_indent(fi) - fi.indent += 1 - } - io.write_byte(fi.writer, '}', &fi.n) - if hash { io.write_string(fi.writer, ",\n", &fi.n) } - } - fi.record_level += 1 - defer fi.record_level -= 1 - - for i in 0.. 0 { io.write_string(fi.writer, ", ", &fi.n) } - if hash { - fmt_write_indent(fi) - } - - io.write_string(fi.writer, name, &fi.n) - io.write_string(fi.writer, " = ", &fi.n) - - if info.soa_kind == .Fixed { - t := info.types[i].variant.(runtime.Type_Info_Array).elem - t_size := uintptr(t.size) - if reflect.is_any(t) { - io.write_string(fi.writer, "any{}", &fi.n) - } else { - data := rawptr(uintptr(v.data) + info.offsets[i] + index*t_size) - fmt_arg(fi, any{data, t.id}, verb) - } - } else { - t := info.types[i].variant.(runtime.Type_Info_Multi_Pointer).elem - t_size := uintptr(t.size) - if reflect.is_any(t) { - io.write_string(fi.writer, "any{}", &fi.n) - } else { - field_ptr := (^^byte)(uintptr(v.data) + info.offsets[i])^ - data := rawptr(uintptr(field_ptr) + index*t_size) - fmt_arg(fi, any{data, t.id}, verb) - } - } - - if hash { io.write_string(fi.writer, ",\n", &fi.n) } - } - } - - if hash && n > 0 { - for _ in 0..", &fi.n) + return + } + if fi.indirection_level < 1 { + fi.indirection_level += 1 + defer fi.indirection_level -= 1 + io.write_byte(fi.writer, '&') + fmt_value(fi, a, verb) + return + } + + case runtime.Type_Info_Struct, + runtime.Type_Info_Union, + runtime.Type_Info_Bit_Field: + if ptr == nil { + io.write_string(fi.writer, "", &fi.n) + return + } + if fi.indirection_level < 1 { + fi.indirection_level += 1 + defer fi.indirection_level -= 1 + io.write_byte(fi.writer, '&', &fi.n) + fmt_value(fi, a, verb) + return + } + } + } + } + fmt_pointer(fi, ptr, verb) + } +} + +@(private) +fmt_multi_pointer :: proc(fi: ^Info, v: any, info: runtime.Type_Info_Multi_Pointer, verb: rune) { + ptr := (^rawptr)(v.data)^ + if ptr == nil { + io.write_string(fi.writer, "", &fi.n) + return + } + if verb != 'p' && info.elem != nil { + a := any{ptr, info.elem.id} + + elem := runtime.type_info_base(info.elem) + if elem != nil { + if n, ok := fi.optional_len.?; ok { + fi.optional_len = nil + fmt_array(fi, ptr, n, elem.size, elem, verb) + return + } else if fi.use_nul_termination { + fi.use_nul_termination = false + fmt_array_nul_terminated(fi, ptr, -1, elem.size, elem, verb) + return + } + + #partial switch &e in elem.variant { + case runtime.Type_Info_Integer: + switch verb { + case 's', 'q': + switch elem.id { + case u8: + fmt_cstring(fi, cstring(ptr), verb) + return + case u16, u32, rune: + n := search_nul_termination(ptr, elem.size, -1) + fmt_array(fi, ptr, n, elem.size, elem, verb) + return + } + } + + case runtime.Type_Info_Array, + runtime.Type_Info_Slice, + runtime.Type_Info_Dynamic_Array, + runtime.Type_Info_Map: + if fi.indirection_level < 1 { + fi.indirection_level += 1 + defer fi.indirection_level -= 1 + io.write_byte(fi.writer, '&', &fi.n) + fmt_value(fi, a, verb) + return + } + + case runtime.Type_Info_Struct, + runtime.Type_Info_Union: + if fi.indirection_level < 1 { + fi.indirection_level += 1 + defer fi.indirection_level -= 1 + io.write_byte(fi.writer, '&', &fi.n) + fmt_value(fi, a, verb) + return + } + } + } + } + fmt_pointer(fi, ptr, verb) +} + +fmt_enumerated_array :: proc(fi: ^Info, v: any, info: runtime.Type_Info_Enumerated_Array, verb: rune) { + fi.record_level += 1 + defer fi.record_level -= 1 + + if fi.hash { + io.write_byte(fi.writer, '[' if verb != 'w' else '{', &fi.n) + io.write_byte(fi.writer, '\n', &fi.n) + defer { + fmt_write_indent(fi) + io.write_byte(fi.writer, ']' if verb != 'w' else '}', &fi.n) + } + indent := fi.indent + fi.indent += 1 + defer fi.indent = indent + + for i in 0.. 0 { io.write_string(fi.writer, ", ", &fi.n) } + + idx, ok := stored_enum_value_to_string(info.index, info.min_value, i) + if ok { + io.write_byte(fi.writer, '.', &fi.n) + io.write_string(fi.writer, idx, &fi.n) + } else { + io.write_i64(fi.writer, i64(info.min_value)+i64(i), 10, &fi.n) + } + io.write_string(fi.writer, " = ", &fi.n) + + data := uintptr(v.data) + uintptr(i*info.elem_size) + fmt_arg(fi, any{rawptr(data), info.elem.id}, verb) + } + } +} + +fmt_map :: proc(fi: ^Info, v: any, info: runtime.Type_Info_Map, verb: rune) { + switch verb { + case: + fmt_bad_verb(fi, verb) + case 'v', 'w': + if verb == 'v' { + io.write_string(fi.writer, "map", &fi.n) + } + io.write_byte(fi.writer, '[' if verb != 'w' else '{', &fi.n) + defer io.write_byte(fi.writer, ']' if verb != 'w' else '}', &fi.n) + + + hash := fi.hash; defer fi.hash = hash + indent := fi.indent; defer fi.indent -= 1 + do_trailing_comma := hash + + fi.indent += 1 + if hash { + io.write_byte(fi.writer, '\n', &fi.n) + } + defer { + if hash { + for _ in 0.. 0 { io.write_string(fi.writer, ", ") } + if hash { + fmt_write_indent(fi) + } + j += 1 + + key := runtime.map_cell_index_dynamic(ks, info.map_info.ks, bucket_index) + value := runtime.map_cell_index_dynamic(vs, info.map_info.vs, bucket_index) + + fmt_arg(&Info{writer = fi.writer}, any{rawptr(key), info.key.id}, verb) + if hash { + io.write_string(fi.writer, " = ", &fi.n) + } else { + io.write_string(fi.writer, "=", &fi.n) + } + fmt_arg(fi, any{rawptr(value), info.value.id}, verb) + + if do_trailing_comma { io.write_string(fi.writer, ",\n", &fi.n) } + } + } + } + +} // Formats a value based on its type and formatting verb // @@ -2872,184 +3106,35 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) { type_info := type_info_of(v.id) switch &info in type_info.variant { - case runtime.Type_Info_Any: // Ignore - case runtime.Type_Info_Parameters: // Ignore + case runtime.Type_Info_Any: + // Ignore + case runtime.Type_Info_Parameters: + // Ignore case runtime.Type_Info_Named: fmt_named(fi, v, verb, info) - case runtime.Type_Info_Boolean: fmt_arg(fi, v, verb) - case runtime.Type_Info_Integer: fmt_arg(fi, v, verb) - case runtime.Type_Info_Rune: fmt_arg(fi, v, verb) - case runtime.Type_Info_Float: fmt_arg(fi, v, verb) - case runtime.Type_Info_Complex: fmt_arg(fi, v, verb) - case runtime.Type_Info_Quaternion: fmt_arg(fi, v, verb) - case runtime.Type_Info_String: fmt_arg(fi, v, verb) + case runtime.Type_Info_Boolean, + runtime.Type_Info_Integer, + runtime.Type_Info_Rune, + runtime.Type_Info_Float, + runtime.Type_Info_Complex, + runtime.Type_Info_Quaternion, + runtime.Type_Info_String: + fmt_arg(fi, v, verb) case runtime.Type_Info_Pointer: - if v.id == typeid_of(^runtime.Type_Info) { - reflect.write_type(fi.writer, (^^runtime.Type_Info)(v.data)^, &fi.n) - } else { - ptr := (^rawptr)(v.data)^ - if verb != 'p' && info.elem != nil { - a := any{ptr, info.elem.id} - - elem := runtime.type_info_base(info.elem) - if elem != nil { - #partial switch &e in elem.variant { - case runtime.Type_Info_Array, - runtime.Type_Info_Slice, - runtime.Type_Info_Dynamic_Array, - runtime.Type_Info_Map: - if ptr == nil { - io.write_string(fi.writer, "", &fi.n) - return - } - if fi.indirection_level < 1 { - fi.indirection_level += 1 - defer fi.indirection_level -= 1 - io.write_byte(fi.writer, '&') - fmt_value(fi, a, verb) - return - } - - case runtime.Type_Info_Struct, - runtime.Type_Info_Union, - runtime.Type_Info_Bit_Field: - if ptr == nil { - io.write_string(fi.writer, "", &fi.n) - return - } - if fi.indirection_level < 1 { - fi.indirection_level += 1 - defer fi.indirection_level -= 1 - io.write_byte(fi.writer, '&', &fi.n) - fmt_value(fi, a, verb) - return - } - } - } - } - fmt_pointer(fi, ptr, verb) - } + fmt_pointer_from_value(fi, v, info, verb) case runtime.Type_Info_Soa_Pointer: ptr := (^runtime.Raw_Soa_Pointer)(v.data)^ fmt_soa_pointer(fi, ptr, verb) case runtime.Type_Info_Multi_Pointer: - ptr := (^rawptr)(v.data)^ - if ptr == nil { - io.write_string(fi.writer, "", &fi.n) - return - } - if verb != 'p' && info.elem != nil { - a := any{ptr, info.elem.id} - - elem := runtime.type_info_base(info.elem) - if elem != nil { - if n, ok := fi.optional_len.?; ok { - fi.optional_len = nil - fmt_array(fi, ptr, n, elem.size, elem, verb) - return - } else if fi.use_nul_termination { - fi.use_nul_termination = false - fmt_array_nul_terminated(fi, ptr, -1, elem.size, elem, verb) - return - } - - #partial switch &e in elem.variant { - case runtime.Type_Info_Integer: - switch verb { - case 's', 'q': - switch elem.id { - case u8: - fmt_cstring(fi, cstring(ptr), verb) - return - case u16, u32, rune: - n := search_nul_termination(ptr, elem.size, -1) - fmt_array(fi, ptr, n, elem.size, elem, verb) - return - } - } - - case runtime.Type_Info_Array, - runtime.Type_Info_Slice, - runtime.Type_Info_Dynamic_Array, - runtime.Type_Info_Map: - if fi.indirection_level < 1 { - fi.indirection_level += 1 - defer fi.indirection_level -= 1 - io.write_byte(fi.writer, '&', &fi.n) - fmt_value(fi, a, verb) - return - } - - case runtime.Type_Info_Struct, - runtime.Type_Info_Union: - if fi.indirection_level < 1 { - fi.indirection_level += 1 - defer fi.indirection_level -= 1 - io.write_byte(fi.writer, '&', &fi.n) - fmt_value(fi, a, verb) - return - } - } - } - } - fmt_pointer(fi, ptr, verb) + fmt_multi_pointer(fi, v, info, verb) case runtime.Type_Info_Enumerated_Array: - fi.record_level += 1 - defer fi.record_level -= 1 - - if fi.hash { - io.write_byte(fi.writer, '[' if verb != 'w' else '{', &fi.n) - io.write_byte(fi.writer, '\n', &fi.n) - defer { - fmt_write_indent(fi) - io.write_byte(fi.writer, ']' if verb != 'w' else '}', &fi.n) - } - indent := fi.indent - fi.indent += 1 - defer fi.indent = indent - - for i in 0.. 0 { io.write_string(fi.writer, ", ", &fi.n) } - - idx, ok := stored_enum_value_to_string(info.index, info.min_value, i) - if ok { - io.write_byte(fi.writer, '.', &fi.n) - io.write_string(fi.writer, idx, &fi.n) - } else { - io.write_i64(fi.writer, i64(info.min_value)+i64(i), 10, &fi.n) - } - io.write_string(fi.writer, " = ", &fi.n) - - data := uintptr(v.data) + uintptr(i*info.elem_size) - fmt_arg(fi, any{rawptr(data), info.elem.id}, verb) - } - } + fmt_enumerated_array(fi, v, info, verb) case runtime.Type_Info_Array: n := info.count @@ -3104,63 +3189,7 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) { case runtime.Type_Info_Map: - switch verb { - case: - fmt_bad_verb(fi, verb) - case 'v', 'w': - if verb == 'v' { - io.write_string(fi.writer, "map", &fi.n) - } - io.write_byte(fi.writer, '[' if verb != 'w' else '{', &fi.n) - defer io.write_byte(fi.writer, ']' if verb != 'w' else '}', &fi.n) - - - hash := fi.hash; defer fi.hash = hash - indent := fi.indent; defer fi.indent -= 1 - do_trailing_comma := hash - - fi.indent += 1 - if hash { - io.write_byte(fi.writer, '\n', &fi.n) - } - defer { - if hash { - for _ in 0.. 0 { io.write_string(fi.writer, ", ") } - if hash { - fmt_write_indent(fi) - } - j += 1 - - key := runtime.map_cell_index_dynamic(ks, info.map_info.ks, bucket_index) - value := runtime.map_cell_index_dynamic(vs, info.map_info.vs, bucket_index) - - fmt_arg(&Info{writer = fi.writer}, any{rawptr(key), info.key.id}, verb) - if hash { - io.write_string(fi.writer, " = ", &fi.n) - } else { - io.write_string(fi.writer, "=", &fi.n) - } - fmt_arg(fi, any{rawptr(value), info.value.id}, verb) - - if do_trailing_comma { io.write_string(fi.writer, ",\n", &fi.n) } - } - } - } + fmt_map(fi, v, info, verb) case runtime.Type_Info_Struct: fmt_struct(fi, v, verb, info, "") From de761cbdd39ed4ba036fc42c4b572abdd9da88d3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 27 Dec 2025 11:53:01 +0000 Subject: [PATCH 024/212] Remove temporary tuple fix alloca instructions if they are never used --- src/llvm_backend_opt.cpp | 10 +++++++++- src/llvm_backend_proc.cpp | 9 --------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/llvm_backend_opt.cpp b/src/llvm_backend_opt.cpp index 4971b1f10..4131f32bf 100644 --- a/src/llvm_backend_opt.cpp +++ b/src/llvm_backend_opt.cpp @@ -309,7 +309,15 @@ gb_internal void lb_run_remove_dead_instruction_pass(lbProcedure *p) { // NOTE(bill): Explicit instructions are set here because some instructions could have side effects switch (LLVMGetInstructionOpcode(curr_instr)) { - // case LLVMAlloca: + case LLVMAlloca: + if (map_get(&p->tuple_fix_map, curr_instr) != nullptr) { + // NOTE(bill, 2025-12-27): Remove temporary tuple fix alloca instructions + // if they are never used + removal_count += 1; + LLVMInstructionEraseFromParent(curr_instr); + was_dead_instructions = true; + } + break; case LLVMLoad: if (LLVMGetVolatile(curr_instr)) { break; diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 27167aefd..216d600da 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -1212,15 +1212,6 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array c } tuple_fix_values[ret_count-1] = result; - #if 0 - for (isize j = 0; j < ret_count; j++) { - tuple_geps[j] = lb_emit_struct_ep(p, result_ptr, cast(i32)j); - } - for (isize j = 0; j < ret_count; j++) { - lb_emit_store(p, tuple_geps[j], tuple_fix_values[j]); - } - #endif - result = lb_emit_load(p, result_ptr); lbTupleFix tf = {tuple_fix_values}; From 4e40b808c4ab5f29fe6c50c9dccbf4acd99c8c45 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 27 Dec 2025 12:42:52 +0000 Subject: [PATCH 025/212] Split of the built-in custom formatters to improve code generation --- core/fmt/fmt.odin | 314 ++++++++++++++++++++++++---------------------- 1 file changed, 162 insertions(+), 152 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 27168d6c2..059413787 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -2447,6 +2447,166 @@ fmt_array :: proc(fi: ^Info, data: rawptr, n: int, elem_size: int, elem: ^reflec fmt_write_array(fi, data, n, elem_size, elem.id, verb) } } + + +@(private) +fmt_named_buitlin_custom_formatters :: proc(fi: ^Info, v: any, verb: rune, info: runtime.Type_Info_Named) -> bool { + switch a in v { + case runtime.Source_Code_Location: + io.write_string(fi.writer, a.file_path, &fi.n) + + when ODIN_ERROR_POS_STYLE == .Default { + io.write_byte(fi.writer, '(', &fi.n) + io.write_int(fi.writer, int(a.line), 10, &fi.n) + if a.column != 0 { + io.write_byte(fi.writer, ':', &fi.n) + io.write_int(fi.writer, int(a.column), 10, &fi.n) + } + io.write_byte(fi.writer, ')', &fi.n) + } else when ODIN_ERROR_POS_STYLE == .Unix { + io.write_byte(fi.writer, ':', &fi.n) + io.write_int(fi.writer, int(a.line), 10, &fi.n) + if a.column != 0 { + io.write_byte(fi.writer, ':', &fi.n) + io.write_int(fi.writer, int(a.column), 10, &fi.n) + } + io.write_byte(fi.writer, ':', &fi.n) + } else { + #panic("Unhandled ODIN_ERROR_POS_STYLE") + } + return true + + case time.Duration: + ffrac :: proc(buf: []byte, v: u64, prec: int) -> (nw: int, nv: u64) { + v := v + w := len(buf) + print := false + for _ in 0.. int { + v := v + w := len(buf) + if v == 0 { + w -= 1 + buf[w] = '0' + } else { + for v > 0 { + w -= 1 + buf[w] = byte(v%10) + '0' + v /= 10 + } + } + return w + } + + buf: [32]byte + w := len(buf) + u := u64(a) + neg := a < 0 + if neg { + u = -u + } + + if u < u64(time.Second) { + prec: int + w -= 1 + buf[w] = 's' + w -= 1 + switch { + case u == 0: + io.write_string(fi.writer, "0s", &fi.n) + return true + case u < u64(time.Microsecond): + prec = 0 + buf[w] = 'n' + case u < u64(time.Millisecond): + prec = 3 + // U+00B5 'µ' micro sign == 0xC2 0xB5 + w -= 1 // Need room for two bytes + copy(buf[w:], "µ") + case: + prec = 6 + buf[w] = 'm' + } + w, u = ffrac(buf[:w], u, prec) + w = fint(buf[:w], u) + } else { + w -= 1 + buf[w] = 's' + w, u = ffrac(buf[:w], u, 9) + w = fint(buf[:w], u%60) + u /= 60 + if u > 0 { + w -= 1 + buf[w] = 'm' + w = fint(buf[:w], u%60) + u /= 60 + if u > 0 { + w -= 1 + buf[w] = 'h' + w = fint(buf[:w], u) + } + } + } + + if neg { + w -= 1 + buf[w] = '-' + } + io.write_string(fi.writer, string(buf[w:]), &fi.n) + return true + + case time.Time: + write_padded_number :: proc(fi: ^Info, i: i64, width: int) { + n := width-1 + for x := i; x >= 10; x /= 10 { + n -= 1 + } + for _ in 0..= 10; x /= 10 { - n -= 1 - } - for _ in 0.. (nw: int, nv: u64) { - v := v - w := len(buf) - print := false - for _ in 0.. int { - v := v - w := len(buf) - if v == 0 { - w -= 1 - buf[w] = '0' - } else { - for v > 0 { - w -= 1 - buf[w] = byte(v%10) + '0' - v /= 10 - } - } - return w - } - - buf: [32]byte - w := len(buf) - u := u64(a) - neg := a < 0 - if neg { - u = -u - } - - if u < u64(time.Second) { - prec: int - w -= 1 - buf[w] = 's' - w -= 1 - switch { - case u == 0: - io.write_string(fi.writer, "0s", &fi.n) - return - case u < u64(time.Microsecond): - prec = 0 - buf[w] = 'n' - case u < u64(time.Millisecond): - prec = 3 - // U+00B5 'µ' micro sign == 0xC2 0xB5 - w -= 1 // Need room for two bytes - copy(buf[w:], "µ") - case: - prec = 6 - buf[w] = 'm' - } - w, u = ffrac(buf[:w], u, prec) - w = fint(buf[:w], u) - } else { - w -= 1 - buf[w] = 's' - w, u = ffrac(buf[:w], u, 9) - w = fint(buf[:w], u%60) - u /= 60 - if u > 0 { - w -= 1 - buf[w] = 'm' - w = fint(buf[:w], u%60) - u /= 60 - if u > 0 { - w -= 1 - buf[w] = 'h' - w = fint(buf[:w], u) - } - } - } - - if neg { - w -= 1 - buf[w] = '-' - } - io.write_string(fi.writer, string(buf[w:]), &fi.n) - return - - case time.Time: - t := a - y, mon, d := time.date(t) - h, min, s := time.clock(t) - ns := (t._nsec - (t._nsec/1e9 + time.UNIX_TO_ABSOLUTE)*1e9) % 1e9 - write_padded_number(fi, i64(y), 4) - io.write_byte(fi.writer, '-', &fi.n) - write_padded_number(fi, i64(mon), 2) - io.write_byte(fi.writer, '-', &fi.n) - write_padded_number(fi, i64(d), 2) - io.write_byte(fi.writer, ' ', &fi.n) - - write_padded_number(fi, i64(h), 2) - io.write_byte(fi.writer, ':', &fi.n) - write_padded_number(fi, i64(min), 2) - io.write_byte(fi.writer, ':', &fi.n) - write_padded_number(fi, i64(s), 2) - io.write_byte(fi.writer, '.', &fi.n) - write_padded_number(fi, (ns), 9) - io.write_string(fi.writer, " +0000 UTC", &fi.n) - return - } + if verb != 'w' && fmt_named_buitlin_custom_formatters(fi, v, verb, info) { + return } #partial switch &b in info.base.variant { From 14a60adefe005d09066f420b1a24f11e365d9cec Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 27 Dec 2025 12:48:25 +0000 Subject: [PATCH 026/212] LLVM IR: Improve type switch case names for better debuggability when generating LLVM IR --- src/llvm_backend_stmt.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index 3dbcea4fb..a8cc459c3 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -1962,7 +1962,7 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss num_cases += cc->list.count; if (cc->list.count == 0) { GB_ASSERT(default_block == nullptr); - default_block = lb_create_block(p, "typeswitch.default.body"); + default_block = lb_create_block(p, "typeswitch.case.default"); else_block = default_block; } } @@ -2042,7 +2042,16 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss continue; } - lbBlock *body = lb_create_block(p, "typeswitch.body"); + char const *body_name = "typeswitch.case"; + + if (!are_types_identical(case_entity->type, parent_base_type)) { + gbString canonical_name = temp_canonical_string(case_entity->type); + gbString bn = gb_string_make(heap_allocator(), "typeswitch.case."); + bn = gb_string_append_length(bn, canonical_name, gb_string_length(canonical_name)); + body_name = cast(char const *)bn; + } + + lbBlock *body = lb_create_block(p, body_name); if (p->debug_info != nullptr) { LLVMSetCurrentDebugLocation2(p->builder, lb_debug_location_from_ast(p, clause)); } From 33352ed6cb15904021ff60c6e44fcb374a660400 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Sat, 27 Dec 2025 17:04:30 +0100 Subject: [PATCH 027/212] Add user32 scroll bar related bindings, and FrameRect --- core/sys/windows/user32.odin | 59 ++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 76826f80b..11c01db25 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -279,6 +279,7 @@ foreign user32 { SetLayeredWindowAttributes :: proc(hWnd: HWND, crKey: COLORREF, bAlpha: BYTE, dwFlags: DWORD) -> BOOL --- FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> int --- + FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> int --- EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL --- OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- @@ -321,6 +322,11 @@ foreign user32 { SetClipboardData :: proc(uFormat: UINT, hMem: HANDLE) -> HANDLE --- IsClipboardFormatAvailable :: proc(format: UINT) -> BOOL --- EmptyClipboard :: proc() -> BOOL --- + + SetScrollInfo :: proc(hwnd: HWND, nBar: c_int, lpsi: ^SCROLLINFO, redraw: BOOL) -> c_int --- + GetScrollInfo :: proc(hwnd: HWND, nBar: c_int, lpsi: ^SCROLLINFO) -> BOOL --- + ShowScrollBar :: proc(hwnd: HWND, nBar: c_int, bShow: BOOL) -> BOOL --- + EnableScrollBar :: proc(hwnd: HWND, wSBflags: UINT, wArrows: UINT) -> BOOL --- } CreateWindowW :: #force_inline proc "system" ( @@ -874,3 +880,56 @@ LPNONCLIENTMETRICSW :: ^NONCLIENTMETRICSW LWA_COLORKEY :: 0x1 LWA_ALPHA :: 0x2 + +SCROLLINFO :: struct { + cbSize: UINT, + fMask: UINT, + nMin: c_int, + nMax: c_int, + nPage: UINT, + nPos: c_int, + nTrackPos: c_int, +} +LPSCROLLINFO :: ^SCROLLINFO + +// Scroll Bar Constants +SB_MIN :: 0 +SB_HORZ :: 0 +SB_VERT :: 1 +SB_CTL :: 2 +SB_BOTH :: 3 + +// Scroll Bar Commands +SB_LINEUP :: 0 +SB_LINELEFT :: 0 +SB_LINEDOWN :: 1 +SB_LINERIGHT :: 1 +SB_PAGEUP :: 2 +SB_PAGELEFT :: 2 +SB_PAGEDOWN :: 3 +SB_PAGERIGHT :: 3 +SB_THUMBPOSITION :: 4 +SB_THUMBTRACK :: 5 +SB_TOP :: 6 +SB_LEFT :: 6 +SB_BOTTOM :: 7 +SB_RIGHT :: 7 +SB_ENDSCROLL :: 8 + +// Constants for SCROLLINFO.fMask +SIF_RANGE :: 0x0001 +SIF_PAGE :: 0x0002 +SIF_POS :: 0x0004 +SIF_DISABLENOSCROLL :: 0x0008 +SIF_TRACKPOS :: 0x0010 +SIF_ALL :: (SIF_RANGE | SIF_PAGE | SIF_POS | SIF_TRACKPOS) + +// EnableScrollBar() flags +ESB_ENABLE_BOTH :: 0x0000 +ESB_DISABLE_BOTH :: 0x0003 +ESB_DISABLE_LEFT :: 0x0001 +ESB_DISABLE_RIGHT :: 0x0002 +ESB_DISABLE_UP :: 0x0001 +ESB_DISABLE_DOWN :: 0x0002 +ESB_DISABLE_LTUP :: ESB_DISABLE_LEFT +ESB_DISABLE_RTDN :: ESB_DISABLE_RIGHT From 39fa1b72015d25e738c6228b438e965cff7eef72 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 28 Dec 2025 11:52:31 +0000 Subject: [PATCH 028/212] LLVM IR: Improve basic block names for trivial switch statements for debuggability --- src/llvm_backend_stmt.cpp | 41 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index a8cc459c3..90b9c0204 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -1720,7 +1720,46 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * Ast *clause = body->stmts[i]; ast_node(cc, CaseClause, clause); - body_blocks[i] = lb_create_block(p, cc->list.count == 0 ? "switch.default.body" : "switch.case.body"); + char const *block_name = cc->list.count == 0 ? "switch.default.body" : "switch.case.body"; + + if (is_trivial && cc->list.count >= 1) { + gbString bn = gb_string_make(heap_allocator(), "switch.case."); + + Ast *first = cc->list[0]; + if (first->tav.mode == Addressing_Type) { + bn = gb_string_appendc(bn, "type."); + } else if (is_type_rune(first->tav.type)) { + bn = gb_string_appendc(bn, "rune."); + } else { + bn = gb_string_appendc(bn, "value."); + } + + for_array(i, cc->list) { + if (i > 0) { + bn = gb_string_appendc(bn, ".."); + } + + Ast *expr = cc->list[i]; + if (expr->tav.mode == Addressing_Type) { + bn = write_type_to_string(bn, expr->tav.type, false); + } else { + ExactValue value = expr->tav.value; + if (is_type_rune(expr->tav.type) && value.kind == ExactValue_Integer) { + + Rune r = cast(Rune)exact_value_to_i64(value); + u8 rune_temp[6] = {}; + isize size = gb_utf8_encode_rune(rune_temp, r); + bn = gb_string_append_length(bn, rune_temp, size); + } else { + bn = write_exact_value_to_string(bn, value, 1024); + } + } + } + + block_name = cast(char const *)bn; + } + + body_blocks[i] = lb_create_block(p, block_name); if (cc->list.count == 0) { default_block = body_blocks[i]; } From f1e29fadabc9168206938a8ff3c58d7cfc0b8cbb Mon Sep 17 00:00:00 2001 From: DarathDev Date: Sun, 28 Dec 2025 14:46:45 -0700 Subject: [PATCH 029/212] Add missing 'caller_location' to several procedures in 'slice' package --- core/slice/map.odin | 16 ++++++++-------- core/slice/permute.odin | 3 ++- core/slice/slice.odin | 32 ++++++++++++++++---------------- core/slice/sort.odin | 16 ++++++++-------- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/core/slice/map.odin b/core/slice/map.odin index c68488d26..fafbb55ee 100644 --- a/core/slice/map.odin +++ b/core/slice/map.odin @@ -6,8 +6,8 @@ import "base:runtime" _ :: intrinsics _ :: runtime -map_keys :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (keys: []K, err: runtime.Allocator_Error) { - keys = make(type_of(keys), len(m), allocator) or_return +map_keys :: proc(m: $M/map[$K]$V, allocator := context.allocator, loc := #caller_location) -> (keys: []K, err: runtime.Allocator_Error) { + keys = make(type_of(keys), len(m), allocator, loc) or_return i := 0 for key in m { keys[i] = key @@ -15,8 +15,8 @@ map_keys :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (keys: []K, } return } -map_values :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (values: []V, err: runtime.Allocator_Error) { - values = make(type_of(values), len(m), allocator) or_return +map_values :: proc(m: $M/map[$K]$V, allocator := context.allocator, loc := #caller_location) -> (values: []V, err: runtime.Allocator_Error) { + values = make(type_of(values), len(m), allocator, loc) or_return i := 0 for _, value in m { values[i] = value @@ -37,8 +37,8 @@ Map_Entry_Info :: struct($Key, $Value: typeid) { } -map_entries :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (entries: []Map_Entry(K, V), err: runtime.Allocator_Error) { - entries = make(type_of(entries), len(m), allocator) or_return +map_entries :: proc(m: $M/map[$K]$V, allocator := context.allocator, loc := #caller_location) -> (entries: []Map_Entry(K, V), err: runtime.Allocator_Error) { + entries = make(type_of(entries), len(m), allocator, loc) or_return i := 0 for key, value in m { entries[i].key = key @@ -48,13 +48,13 @@ map_entries :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (entries return } -map_entry_infos :: proc(m: $M/map[$K]$V, allocator := context.allocator) -> (entries: []Map_Entry_Info(K, V), err: runtime.Allocator_Error) #no_bounds_check { +map_entry_infos :: proc(m: $M/map[$K]$V, allocator := context.allocator, loc := #caller_location) -> (entries: []Map_Entry_Info(K, V), err: runtime.Allocator_Error) #no_bounds_check { m := m rm := (^runtime.Raw_Map)(&m) info := runtime.type_info_base(type_info_of(M)).variant.(runtime.Type_Info_Map) if info.map_info != nil { - entries = make(type_of(entries), len(m), allocator) or_return + entries = make(type_of(entries), len(m), allocator, loc) or_return map_cap := uintptr(cap(m)) ks, vs, hs, _, _ := runtime.map_kvh_data_dynamic(rm^, info.map_info) diff --git a/core/slice/permute.odin b/core/slice/permute.odin index 42b6d4129..280989e47 100644 --- a/core/slice/permute.odin +++ b/core/slice/permute.odin @@ -29,12 +29,13 @@ Returns: make_permutation_iterator :: proc( slice: []$T, allocator := context.allocator, + loc := #caller_location, ) -> ( iter: Permutation_Iterator(T), error: runtime.Allocator_Error, ) #optional_allocator_error { iter.slice = slice - iter.counters = make([]int, len(iter.slice), allocator) or_return + iter.counters = make([]int, len(iter.slice), allocator, loc) or_return return } diff --git a/core/slice/slice.odin b/core/slice/slice.odin index 4e3289321..58d35b9f0 100644 --- a/core/slice/slice.odin +++ b/core/slice/slice.odin @@ -454,7 +454,7 @@ swap_with_slice :: proc(a, b: $T/[]$E, loc := #caller_location) { } @(require_results) -concatenate :: proc(a: []$T/[]$E, allocator := context.allocator) -> (res: T, err: runtime.Allocator_Error) #optional_allocator_error { +concatenate :: proc(a: []$T/[]$E, allocator := context.allocator, loc := #caller_location) -> (res: T, err: runtime.Allocator_Error) #optional_allocator_error { if len(a) == 0 { return } @@ -462,7 +462,7 @@ concatenate :: proc(a: []$T/[]$E, allocator := context.allocator) -> (res: T, er for s in a { n += len(s) } - res = make(T, n, allocator) or_return + res = make(T, n, allocator, loc) or_return i := 0 for s in a { i += copy(res[i:], s) @@ -584,8 +584,8 @@ as_ptr :: proc "contextless" (array: $T/[]$E) -> [^]E { @(require_results) -mapper :: proc(s: $S/[]$U, f: proc(U) -> $V, allocator := context.allocator) -> (r: []V, err: runtime.Allocator_Error) #optional_allocator_error { - r = make([]V, len(s), allocator) or_return +mapper :: proc(s: $S/[]$U, f: proc(U) -> $V, allocator := context.allocator, loc := #caller_location) -> (r: []V, err: runtime.Allocator_Error) #optional_allocator_error { + r = make([]V, len(s), allocator, loc) or_return for v, i in s { r[i] = f(v) } @@ -611,33 +611,33 @@ reduce_reverse :: proc(s: $S/[]$U, initializer: $V, f: proc(V, U) -> V) -> V { } @(require_results) -filter :: proc(s: $S/[]$U, f: proc(U) -> bool, allocator := context.allocator) -> (res: S, err: runtime.Allocator_Error) #optional_allocator_error { - r := make([dynamic]U, 0, 0, allocator) or_return +filter :: proc(s: $S/[]$U, f: proc(U) -> bool, allocator := context.allocator, loc := #caller_location) -> (res: S, err: runtime.Allocator_Error) #optional_allocator_error { + r := make([dynamic]U, 0, 0, allocator, loc) or_return for v in s { if f(v) { - append(&r, v) + append(&r, v, loc) } } return r[:], nil } @(require_results) -filter_reverse :: proc(s: $S/[]$U, f: proc(U) -> bool, allocator := context.allocator) -> (res: S, err: runtime.Allocator_Error) #optional_allocator_error { - r := make([dynamic]U, 0, 0, allocator) or_return +filter_reverse :: proc(s: $S/[]$U, f: proc(U) -> bool, allocator := context.allocator, loc := #caller_location) -> (res: S, err: runtime.Allocator_Error) #optional_allocator_error { + r := make([dynamic]U, 0, 0, allocator, loc) or_return for i := len(s)-1; i >= 0; i -= 1 { #no_bounds_check v := s[i] if f(v) { - append(&r, v) + append(&r, v, loc) } } return r[:], nil } @(require_results) -scanner :: proc (s: $S/[]$U, initializer: $V, f: proc(V, U) -> V, allocator := context.allocator) -> (res: []V, err: runtime.Allocator_Error) #optional_allocator_error { +scanner :: proc (s: $S/[]$U, initializer: $V, f: proc(V, U) -> V, allocator := context.allocator, loc := #caller_location) -> (res: []V, err: runtime.Allocator_Error) #optional_allocator_error { if len(s) == 0 { return } - res = make([]V, len(s), allocator) or_return + res = make([]V, len(s), allocator, loc) or_return p := as_ptr(s) q := as_ptr(res) r := initializer @@ -654,14 +654,14 @@ scanner :: proc (s: $S/[]$U, initializer: $V, f: proc(V, U) -> V, allocator := c @(require_results) -repeat :: proc(s: $S/[]$U, count: int, allocator := context.allocator) -> (b: S, err: runtime.Allocator_Error) #optional_allocator_error { +repeat :: proc(s: $S/[]$U, count: int, allocator := context.allocator, loc := #caller_location) -> (b: S, err: runtime.Allocator_Error) #optional_allocator_error { if count < 0 { panic("slice: negative repeat count") } else if count > 0 && (len(s)*count)/count != len(s) { panic("slice: repeat count will cause an overflow") } - b = make(S, len(s)*count, allocator) or_return + b = make(S, len(s)*count, allocator, loc) or_return i := copy(b, s) for i < len(b) { // 2^N trick to reduce the need to copy copy(b[i:], b[:i]) @@ -918,8 +918,8 @@ bitset_to_enum_slice_with_buffer :: proc(buf: []$E, bs: $T) -> (slice: []E) wher // e.g.: // sl := slice.bitset_to_enum_slice(bs) @(require_results) -bitset_to_enum_slice_with_make :: proc(bs: $T, $E: typeid, allocator := context.allocator) -> (slice: []E) where intrinsics.type_is_enum(E), intrinsics.type_bit_set_elem_type(T) == E { - buf := make([]E, card(bs), allocator) +bitset_to_enum_slice_with_make :: proc(bs: $T, $E: typeid, allocator := context.allocator, loc := #caller_location) -> (slice: []E) where intrinsics.type_is_enum(E), intrinsics.type_bit_set_elem_type(T) == E { + buf := make([]E, card(bs), allocator, loc) return bitset_to_enum_slice(buf, bs) } diff --git a/core/slice/sort.odin b/core/slice/sort.odin index a9f8c1067..d438cfc1b 100644 --- a/core/slice/sort.odin +++ b/core/slice/sort.odin @@ -54,9 +54,9 @@ sort :: proc(data: $T/[]$E) where ORD(E) { sort_by_indices :: proc{ sort_by_indices_allocate, _sort_by_indices} -sort_by_indices_allocate :: proc(data: $T/[]$E, indices: []int, allocator := context.allocator) -> (sorted: T) { +sort_by_indices_allocate :: proc(data: $T/[]$E, indices: []int, allocator := context.allocator, loc := #caller_location) -> (sorted: T) { assert(len(data) == len(indices)) - sorted = make(T, len(data), allocator) + sorted = make(T, len(data), allocator, loc) for v, i in indices { sorted[i] = data[v] } @@ -100,8 +100,8 @@ sort_from_permutation_indices :: proc(data: $T/[]$E, indices: []int) { // sort sorts a slice and returns a slice of the original indices // This sort is not guaranteed to be stable -sort_with_indices :: proc(data: $T/[]$E, allocator := context.allocator) -> (indices: []int) where ORD(E) { - indices = make([]int, len(data), allocator) +sort_with_indices :: proc(data: $T/[]$E, allocator := context.allocator, loc := #caller_location) -> (indices: []int) where ORD(E) { + indices = make([]int, len(data), allocator, loc) when size_of(E) != 0 { if n := len(data); n > 1 { for _, idx in indices { @@ -173,8 +173,8 @@ sort_by_with_data :: proc(data: $T/[]$E, less: proc(i, j: E, user_data: rawptr) // sort_by sorts a slice with a given procedure to test whether two values are ordered "i < j" // This sort is not guaranteed to be stable -sort_by_with_indices :: proc(data: $T/[]$E, less: proc(i, j: E) -> bool, allocator := context.allocator) -> (indices : []int) { - indices = make([]int, len(data), allocator) +sort_by_with_indices :: proc(data: $T/[]$E, less: proc(i, j: E) -> bool, allocator := context.allocator, loc := #caller_location) -> (indices : []int) { + indices = make([]int, len(data), allocator, loc) when size_of(E) != 0 { if n := len(data); n > 1 { for _, idx in indices { @@ -205,8 +205,8 @@ sort_by_with_indices :: proc(data: $T/[]$E, less: proc(i, j: E) -> bool, allocat return indices } -sort_by_with_indices_with_data :: proc(data: $T/[]$E, less: proc(i, j: E, user_data: rawptr) -> bool, user_data: rawptr, allocator := context.allocator) -> (indices : []int) { - indices = make([]int, len(data), allocator) +sort_by_with_indices_with_data :: proc(data: $T/[]$E, less: proc(i, j: E, user_data: rawptr) -> bool, user_data: rawptr, allocator := context.allocator, loc := #caller_location) -> (indices : []int) { + indices = make([]int, len(data), allocator, loc) when size_of(E) != 0 { if n := len(data); n > 1 { for _, idx in indices { From 6441fc09e0c540260cfad3f3a271811fe8423fc4 Mon Sep 17 00:00:00 2001 From: Sylphrena Date: Mon, 29 Dec 2025 15:27:58 +0100 Subject: [PATCH 030/212] Fix standard json parsing / unmarshalling issue for pure arrays --- core/encoding/json/parser.odin | 14 +++++++------- core/encoding/json/validator.odin | 8 ++++---- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/encoding/json/parser.odin b/core/encoding/json/parser.odin index d6c3df7c6..cd6518955 100644 --- a/core/encoding/json/parser.odin +++ b/core/encoding/json/parser.odin @@ -38,7 +38,7 @@ parse_string :: proc(data: string, spec := DEFAULT_SPECIFICATION, parse_integers switch p.spec { case .JSON: - return parse_object(&p, loc) + return parse_value(&p, loc) case .JSON5: return parse_value(&p, loc) case .SJSON: @@ -84,7 +84,7 @@ expect_token :: proc(p: ^Parser, kind: Token_Kind) -> Error { parse_colon :: proc(p: ^Parser) -> (err: Error) { - colon_err := expect_token(p, .Colon) + colon_err := expect_token(p, .Colon) if colon_err == nil { return nil } @@ -133,13 +133,13 @@ parse_value :: proc(p: ^Parser, loc := #caller_location) -> (value: Value, err: f, _ := strconv.parse_f64(token.text) value = Float(f) return - + case .Ident: if p.spec == .MJSON { advance_token(p) return clone_string(token.text, p.allocator, loc) } - + case .String: advance_token(p) return unquote_string(token, p.spec, p.allocator, loc) @@ -192,7 +192,7 @@ parse_array :: proc(p: ^Parser, loc := #caller_location) -> (value: Value, err: for p.curr_token.kind != .Close_Bracket { elem := parse_value(p, loc) or_return append(&array, elem, loc) - + if parse_comma(p) { break } @@ -278,7 +278,7 @@ parse_object_body :: proc(p: ^Parser, end_token: Token_Kind, loc := #caller_loca if parse_comma(p) { break } - } + } return obj, .None } @@ -481,4 +481,4 @@ unquote_string :: proc(token: Token, spec: Specification, allocator := context.a } return string(b[:w]), nil -} \ No newline at end of file +} diff --git a/core/encoding/json/validator.odin b/core/encoding/json/validator.odin index a6873319d..e90270335 100644 --- a/core/encoding/json/validator.odin +++ b/core/encoding/json/validator.odin @@ -5,10 +5,10 @@ import "core:mem" // NOTE(bill): is_valid will not check for duplicate keys is_valid :: proc(data: []byte, spec := DEFAULT_SPECIFICATION, parse_integers := false) -> bool { p := make_parser(data, spec, parse_integers, mem.nil_allocator()) - + switch p.spec { case .JSON: - return validate_object(&p) + return validate_value(&p) case .JSON5: return validate_value(&p) case .MJSON: @@ -52,7 +52,7 @@ validate_object :: proc(p: ^Parser) -> bool { if err := expect_token(p, .Open_Brace); err != .None { return false } - + validate_object_body(p, .Close_Brace) or_return if err := expect_token(p, .Close_Brace); err != .None { @@ -102,7 +102,7 @@ validate_value :: proc(p: ^Parser) -> bool { case .Open_Bracket: return validate_array(p) - + case .Ident: if p.spec == .MJSON { advance_token(p) From 3f9aefda202f9677987d72c0be52417772315edc Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Mon, 29 Dec 2025 17:34:01 +0100 Subject: [PATCH 031/212] Added CheckFramebufferStatus to WebGL bindings --- core/sys/wasm/js/odin.js | 3 +++ vendor/wasm/WebGL/webgl.odin | 1 + 2 files changed, 4 insertions(+) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index 0c617dd8e..e90ccc124 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -616,6 +616,9 @@ class WebGLInterface { FramebufferTexture2D: (target, attachment, textarget, texture, level) => { this.ctx.framebufferTexture2D(target, attachment, textarget, this.textures[texture], level); }, + CheckFramebufferStatus: (target) => { + return this.ctx.checkFramebufferStatus(target) + }, FrontFace: (mode) => { this.ctx.frontFace(mode); }, diff --git a/vendor/wasm/WebGL/webgl.odin b/vendor/wasm/WebGL/webgl.odin index 601071c3a..d607ec743 100644 --- a/vendor/wasm/WebGL/webgl.odin +++ b/vendor/wasm/WebGL/webgl.odin @@ -113,6 +113,7 @@ foreign webgl { Flush :: proc() --- FramebufferRenderbuffer :: proc(target, attachment, renderbufertarget: Enum, renderbuffer: Renderbuffer) --- FramebufferTexture2D :: proc(target, attachment, textarget: Enum, texture: Texture, level: i32) --- + CheckFramebufferStatus :: proc(target: Enum) -> Enum --- FrontFace :: proc(mode: Enum) --- GenerateMipmap :: proc(target: Enum) --- From fb52238e369dc5c1712d2eca2c787473af59bca3 Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Mon, 29 Dec 2025 17:42:19 +0100 Subject: [PATCH 032/212] Fix bugs in odin.js:GetActiveUniformBlockName --- core/sys/wasm/js/odin.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index e90ccc124..063fd990c 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -1304,17 +1304,21 @@ class WebGLInterface { this.assertWebGL2(); return this.ctx.getUniformBlockIndex(this.programs[program], this.mem.loadString(uniformBlockName_ptr, uniformBlockName_len)); }, - GetActiveUniformBlockName: (program, uniformBlockIndex, buf_ptr, buf_len, length_ptr) => { + GetActiveUniformBlockName: (program, uniformBlockIndex, name_buf_ptr, name_buf_len, name_length_ptr) => { this.assertWebGL2(); let name = this.ctx.getActiveUniformBlockName(this.programs[program], uniformBlockIndex); - let n = Math.min(buf_len, name.length); - name = name.substring(0, n); - this.mem.loadBytes(buf_ptr, buf_len).set(new TextEncoder().encode(name)) - this.mem.storeInt(length_ptr, n); + if (name_buf_ptr && name_buf_len > 0) { + let n = Math.min(name_buf_len, name.length); + name = name.substring(0, n); + this.mem.loadBytes(name_buf_ptr, name_buf_len).set(new TextEncoder().encode(name)); + this.mem.storeInt(name_length_ptr, n); + } else if (name_length_ptr) { + this.mem.storeInt(name_length_ptr, name.length); + } }, GetActiveUniforms: (program, uniformIndices_ptr, uniformIndices_len, pname, res_ptr) => { - thid.assertWebGL2(); + this.assertWebGL2(); let indices = this.mem.loadU32Array(uniformIndices_ptr, uniformIndices_len); this.ctx.getActiveUniforms(this.programs[program], indices, pname) this.mem.loadI32Array(res_ptr, indices.length).set(indices) @@ -1323,7 +1327,7 @@ class WebGLInterface { this.assertWebGL2(); let res = this.ctx.getActiveUniformBlockParameter(this.programs[program], uniformBlockIndex, pname); - if (e instanceof Uint32Array) { // for pname GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES + if (res instanceof Uint32Array) { // for pname GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES this.mem.loadU32Array(params_ptr, res.length).set(res) } else { this.mem.storeI32(params_ptr, res) From 23984dc11019674aa00f08c533547d3c690425ac Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Mon, 29 Dec 2025 18:57:42 +0100 Subject: [PATCH 033/212] Fix NetBSD CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dc5e4f592..e6219f370 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,7 @@ jobs: name: NetBSD Build, Check, and Test runs-on: ubuntu-latest env: - PKGSRC_BRANCH: 2025Q2 + PKGSRC_BRANCH: 2025Q4 steps: - uses: actions/checkout@v4 - name: Build, Check, and Test From 47f20c0ffb1d9e48e437c92e3312b4a14d3b8443 Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Mon, 29 Dec 2025 20:57:25 +0100 Subject: [PATCH 034/212] Added 'set_document_title' to be able to rename the tab --- core/sys/wasm/js/dom.odin | 2 ++ core/sys/wasm/js/odin.js | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/core/sys/wasm/js/dom.odin b/core/sys/wasm/js/dom.odin index a4f8d7687..6dd9dbf45 100644 --- a/core/sys/wasm/js/dom.odin +++ b/core/sys/wasm/js/dom.odin @@ -22,6 +22,8 @@ foreign dom_lib { window_set_scroll :: proc(x, y: f64) --- set_element_style :: proc(id: string, key: string, value: string) --- + + set_document_title :: proc(title: string) --- } get_element_value_string :: proc "contextless" (id: string, buf: []byte) -> string { diff --git a/core/sys/wasm/js/odin.js b/core/sys/wasm/js/odin.js index 063fd990c..19ac3093e 100644 --- a/core/sys/wasm/js/odin.js +++ b/core/sys/wasm/js/odin.js @@ -2050,6 +2050,11 @@ function odinSetupDefaultImports(wasmMemoryInterface, consoleElement, memory) { } }, + set_document_title: (title_ptr, title_len) => { + let title = wasmMemoryInterface.loadString(title_ptr, title_len); + document.title = title; + }, + get_element_key_f64: (id_ptr, id_len, key_ptr, key_len) => { let id = wasmMemoryInterface.loadString(id_ptr, id_len); let key = wasmMemoryInterface.loadString(key_ptr, key_len); From ba68d75c6ff163c8c09793c9f42bab8229b6f490 Mon Sep 17 00:00:00 2001 From: dozn Date: Mon, 29 Dec 2025 12:23:54 -0800 Subject: [PATCH 035/212] Add JSON5/SJSON Comments When Marshalling Allows user-facing JSON5/SJSON to have comments explaining field usage. `json.Marshal_Options.pretty` must be enabled since we only use single-line comments (not to mention it wouldn't be terribly useful without `pretty` set anyways). We don't escape anything, so `\n` will display as "\n", but you're still able to enter in a proper newline character and it'll be displayed on multiple lines. --- core/encoding/json/marshal.odin | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index e563c326a..bed2018e3 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -413,6 +413,12 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: } opt_write_iteration(w, opt, first_iteration) or_return + + if opt.pretty { + comment := reflect.struct_tag_get(reflect.Struct_Tag(info.tags[i]), "jsoncomment") + opt_write_comment(w, opt, &comment) or_return + } + first_iteration = false if json_name != "" { opt_write_key(w, opt, json_name) or_return @@ -533,6 +539,26 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: return } +// Newlines are split into multiple comment lines +opt_write_comment :: proc(w: io.Writer, opt: ^Marshal_Options, comment: ^string) -> (err: io.Error) { + if comment^ == "" { + return nil + } + + switch opt.spec { + case .JSON5, .MJSON: + for line in strings.split_iterator(comment, "\n") { + io.write_string(w, "// ") or_return + io.write_string(w, line) or_return + io.write_rune(w, '\n') or_return + opt_write_indentation(w, opt) or_return + } + case .JSON: return nil + } + + return nil +} + // write key as quoted string or with optional quotes in mjson opt_write_key :: proc(w: io.Writer, opt: ^Marshal_Options, name: string) -> (err: io.Error) { switch opt.spec { From ef33e551825258b51f095d3e52945b57fc795c4e Mon Sep 17 00:00:00 2001 From: Harold Brenes Date: Mon, 29 Dec 2025 15:31:12 -0500 Subject: [PATCH 036/212] Fix auto objc_msgSend incorrectly treating certain class methods as instance methods. --- src/check_expr.cpp | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 2fe6c0251..3b32d734a 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8172,13 +8172,7 @@ gb_internal void check_objc_call_expr(CheckerContext *c, Operand *operand, Ast * Type *return_type = proc.result_count == 0 ? nullptr : proc.results->Tuple.variables[0]->type; bool is_return_instancetype = return_type != nullptr && return_type == t_objc_instancetype; - if (params.count == 0 || !is_type_objc_ptr_to_object(params[0]->type)) { - if (!proc_entity->Procedure.is_objc_class_method) { - // Not a class method, invalid call - error(call, "Invalid Objective-C call: The Objective-C method is not a class method but this first parameter is not an Objective-C object pointer."); - return; - } - + if (proc_entity->Procedure.is_objc_class_method) { if (is_return_instancetype) { if (ce->proc->kind == Ast_SelectorExpr) { ast_node(se, SelectorExpr, ce->proc); @@ -8194,7 +8188,8 @@ gb_internal void check_objc_call_expr(CheckerContext *c, Operand *operand, Ast * self_type = t_objc_Class; params_start = 0; - } else if (ce->args.count > 0) { + } else { + GB_ASSERT(ce->args.count > 0); GB_ASSERT(is_type_objc_ptr_to_object(params[0]->type)); if (ce->args[0]->tav.objc_super_target) { From 0bf4ffe46943f8f8bfe2f4f077c92be1512d117a Mon Sep 17 00:00:00 2001 From: Krzesimir Nowak Date: Mon, 29 Dec 2025 18:39:31 +0100 Subject: [PATCH 037/212] Fix handling of #force_inline --- src/parser.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index b2ff55396..823021e04 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2183,7 +2183,7 @@ gb_internal Ast *parse_force_inlining_operand(AstFile *f, Token token) { return expr; } if (e->kind != Ast_ProcLit && e->kind != Ast_CallExpr) { - syntax_error(expr, "%.*s must be followed by a procedure literal or call, got %.*s", LIT(token.string), LIT(ast_strings[expr->kind])); + syntax_error(expr, "%.*s must be followed by a procedure literal or call, got %.*s", LIT(token.string), LIT(ast_strings[e->kind])); return ast_bad_expr(f, token, f->curr_token); } ProcInlining pi = ProcInlining_none; @@ -2197,17 +2197,17 @@ gb_internal Ast *parse_force_inlining_operand(AstFile *f, Token token) { if (pi != ProcInlining_none) { if (e->kind == Ast_ProcLit) { - if (expr->ProcLit.inlining != ProcInlining_none && - expr->ProcLit.inlining != pi) { + if (e->ProcLit.inlining != ProcInlining_none && + e->ProcLit.inlining != pi) { syntax_error(expr, "Cannot apply both '#force_inline' and '#force_no_inline' to a procedure literal"); } - expr->ProcLit.inlining = pi; + e->ProcLit.inlining = pi; } else if (e->kind == Ast_CallExpr) { - if (expr->CallExpr.inlining != ProcInlining_none && - expr->CallExpr.inlining != pi) { + if (e->CallExpr.inlining != ProcInlining_none && + e->CallExpr.inlining != pi) { syntax_error(expr, "Cannot apply both '#force_inline' and '#force_no_inline' to a procedure call"); } - expr->CallExpr.inlining = pi; + e->CallExpr.inlining = pi; } } From affaefc13ace1ac95b97c043314da13d4587eb44 Mon Sep 17 00:00:00 2001 From: dozn Date: Tue, 30 Dec 2025 04:42:06 -0800 Subject: [PATCH 038/212] Moved `first_iteration` up a couple lines so it makes sense readability-wise. --- core/encoding/json/marshal.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index bed2018e3..acf12331a 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -413,13 +413,13 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: } opt_write_iteration(w, opt, first_iteration) or_return + first_iteration = false if opt.pretty { comment := reflect.struct_tag_get(reflect.Struct_Tag(info.tags[i]), "jsoncomment") opt_write_comment(w, opt, &comment) or_return } - first_iteration = false if json_name != "" { opt_write_key(w, opt, json_name) or_return } else { From f1c6c52c215c8087a4fb82b68dcf03741cb8821b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 30 Dec 2025 12:58:37 +0000 Subject: [PATCH 039/212] Fix `@(static, rodata)` for slices --- src/llvm_backend_stmt.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index 90b9c0204..b3b5f4251 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -1745,7 +1745,6 @@ gb_internal void lb_build_switch_stmt(lbProcedure *p, AstSwitchStmt *ss, Scope * } else { ExactValue value = expr->tav.value; if (is_type_rune(expr->tav.type) && value.kind == ExactValue_Integer) { - Rune r = cast(Rune)exact_value_to_i64(value); u8 rune_temp[6] = {}; isize size = gb_utf8_encode_rune(rune_temp, r); @@ -2170,14 +2169,7 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) { for_array(i, vd->names) { lbValue value = {}; - if (vd->values.count > 0) { - GB_ASSERT(vd->names.count == vd->values.count); - Ast *ast_value = vd->values[i]; - GB_ASSERT(ast_value->tav.mode == Addressing_Constant || - ast_value->tav.mode == Addressing_Invalid); - value = lb_const_value(p->module, ast_value->tav.type, ast_value->tav.value, LB_CONST_CONTEXT_DEFAULT_NO_LOCAL); - } Ast *ident = vd->names[i]; GB_ASSERT(!is_blank_ident(ident)); @@ -2185,6 +2177,19 @@ gb_internal void lb_build_static_variables(lbProcedure *p, AstValueDecl *vd) { GB_ASSERT(e->flags & EntityFlag_Static); String name = e->token.string; + if (vd->values.count > 0) { + GB_ASSERT(vd->names.count == vd->values.count); + Ast *ast_value = vd->values[i]; + GB_ASSERT(ast_value->tav.mode == Addressing_Constant || + ast_value->tav.mode == Addressing_Invalid); + + auto cc = LB_CONST_CONTEXT_DEFAULT_NO_LOCAL; + if (e->Variable.is_rodata) { + cc.is_rodata = true; + } + value = lb_const_value(p->module, ast_value->tav.type, ast_value->tav.value, cc); + } + String mangled_name = {}; { gbString str = gb_string_make_length(permanent_allocator(), p->name.text, p->name.len); From 93d7e2a4526bc1075f6eef26b3e1ba6345450f05 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 30 Dec 2025 13:08:30 +0000 Subject: [PATCH 040/212] Add `globaldynamic` `thread_local` model (same as the current `default`) --- src/checker.cpp | 2 ++ src/llvm_backend_general.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/checker.cpp b/src/checker.cpp index 33121b453..13d02c512 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -4027,6 +4027,7 @@ gb_internal DECL_ATTRIBUTE_PROC(var_decl_attribute) { } else if (ev.kind == ExactValue_String) { String model = ev.value_string; if (model == "default" || + model == "globaldynamic" || model == "localdynamic" || model == "initialexec" || model == "localexec") { @@ -4035,6 +4036,7 @@ gb_internal DECL_ATTRIBUTE_PROC(var_decl_attribute) { ERROR_BLOCK(); error(elem, "Invalid thread local model '%.*s'. Valid models:", LIT(model)); error_line("\tdefault\n"); + error_line("\tglobaldynamic\n"); error_line("\tlocaldynamic\n"); error_line("\tinitialexec\n"); error_line("\tlocalexec\n"); diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp index 4ebb40d96..c0e57143d 100644 --- a/src/llvm_backend_general.cpp +++ b/src/llvm_backend_general.cpp @@ -2628,6 +2628,8 @@ gb_internal bool lb_apply_thread_local_model(LLVMValueRef value, String model) { LLVMThreadLocalMode mode = LLVMGeneralDynamicTLSModel; if (model == "default") { mode = LLVMGeneralDynamicTLSModel; + } else if (model == "globaldynamic") { + mode = LLVMGeneralDynamicTLSModel; } else if (model == "localdynamic") { mode = LLVMLocalDynamicTLSModel; } else if (model == "initialexec") { From 589dbbddd20f444786e1d71258faf2f692450c49 Mon Sep 17 00:00:00 2001 From: dozn Date: Tue, 30 Dec 2025 17:02:06 -0800 Subject: [PATCH 041/212] [encoding/json] Fix Escapes When Marshalling Fixes https://github.com/odin-lang/Odin/issues/6060 and https://github.com/odin-lang/Odin/issues/6075 The boolean "true" was setting `html_safe` instead of `for_json`. Chalk one up for the "use enums instead of booleans" crowd. --- core/encoding/json/marshal.odin | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/encoding/json/marshal.odin b/core/encoding/json/marshal.odin index acf12331a..c4e348aa8 100644 --- a/core/encoding/json/marshal.odin +++ b/core/encoding/json/marshal.odin @@ -122,9 +122,9 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err: case runtime.Type_Info_Rune: r := a.(rune) - io.write_byte(w, '"') or_return - io.write_escaped_rune(w, r, '"', true) or_return - io.write_byte(w, '"') or_return + io.write_byte(w, '"') or_return + io.write_escaped_rune(w, r, '"', for_json = true) or_return + io.write_byte(w, '"') or_return case runtime.Type_Info_Float: switch f in a { From e4bf5476c3cc218b1265b2cb90c3b4fe3c9d3df8 Mon Sep 17 00:00:00 2001 From: ske Date: Tue, 30 Dec 2025 22:08:40 -0300 Subject: [PATCH 042/212] Fix literal endianness (fix #6068) --- src/llvm_backend_const.cpp | 23 ++++++-- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + tests/issues/test_issue_6068.odin | 92 +++++++++++++++++++++++++++++++ 4 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 tests/issues/test_issue_6068.odin diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 22e124792..9c407be00 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -498,6 +498,13 @@ gb_internal LLVMValueRef lb_big_int_to_llvm(lbModule *m, Type *original_type, Bi if (big_int_is_zero(a)) { return LLVMConstNull(lb_type(m, original_type)); } + + BigInt val = {}; + big_int_init(&val, a); + + if (big_int_is_neg(&val)) { + mp_incr(&val); + } size_t sz = cast(size_t)type_size_of(original_type); u64 rop64[4] = {}; // 2 u64 is the maximum we will ever need, so doubling it will be fine :P @@ -509,7 +516,7 @@ gb_internal LLVMValueRef lb_big_int_to_llvm(lbModule *m, Type *original_type, Bi size_t nails = 0; mp_endian endian = MP_LITTLE_ENDIAN; - max_count = mp_pack_count(a, nails, size); + max_count = mp_pack_count(&val, nails, size); if (sz < max_count) { debug_print_big_int(a); gb_printf_err("%s -> %tu\n", type_to_string(original_type), sz); @@ -520,7 +527,7 @@ gb_internal LLVMValueRef lb_big_int_to_llvm(lbModule *m, Type *original_type, Bi mp_err err = mp_pack(rop, sz, &written, MP_LSB_FIRST, size, endian, nails, - a); + &val); GB_ASSERT(err == MP_OKAY); if (!is_type_endian_little(original_type)) { @@ -531,12 +538,18 @@ gb_internal LLVMValueRef lb_big_int_to_llvm(lbModule *m, Type *original_type, Bi } } + if (big_int_is_neg(a)) { + // sizeof intead of sz for sign extend to work properly + for (size_t i = 0; i < sizeof rop64; i++) { + rop[i] = ~rop[i]; + } + } + + big_int_dealloc(&val); + GB_ASSERT(!is_type_array(original_type)); LLVMValueRef value = LLVMConstIntOfArbitraryPrecision(lb_type(m, original_type), cast(unsigned)((sz+7)/8), cast(u64 *)rop); - if (big_int_is_neg(a)) { - value = LLVMConstNeg(value); - } return value; } diff --git a/tests/issues/run.bat b/tests/issues/run.bat index bbd7cbc90..0ceaf554c 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -26,6 +26,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin build ..\test_issue_5097-2.odin %COMMON% || exit /b ..\..\..\odin build ..\test_issue_5265.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_5699.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_6068.odin %COMMON% || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index a9a4bb88d..ce02ba20a 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -33,6 +33,7 @@ $ODIN build ../test_issue_5097.odin $COMMON $ODIN build ../test_issue_5097-2.odin $COMMON $ODIN build ../test_issue_5265.odin $COMMON $ODIN test ../test_issue_5699.odin $COMMON +$ODIN test ../test_issue_6068.odin $COMMON set +x diff --git a/tests/issues/test_issue_6068.odin b/tests/issues/test_issue_6068.odin new file mode 100644 index 000000000..011c95442 --- /dev/null +++ b/tests/issues/test_issue_6068.odin @@ -0,0 +1,92 @@ +// Tests issue #6068 https://github.com/odin-lang/Odin/issues/6068 +package test_issues + +import "core:testing" + +@test +test_issue_6068 :: proc(t: ^testing.T) { + { + check_be : i128be = -1 + check_le : i128le = -1 + value := -1 + reverse := i128be(value) + + // test variable + testing.expect(t, i128be(value) == check_be) + testing.expect(t, i128be(-1) == check_be) + testing.expect(t, cast(i128be)value == check_be) + testing.expect(t, cast(i128be)-1 == check_be) + testing.expect(t, i128be(int(-1)) == check_be) + testing.expect(t, cast(i128be)int(-1) == check_be) + testing.expect(t, i128le(value) == check_le) + testing.expect(t, i128le(-1) == check_le) + testing.expect(t, cast(i128le)value == check_le) + testing.expect(t, cast(i128le)-1 == check_le) + testing.expect(t, i128le(int(-1)) == check_le) + testing.expect(t, cast(i128le)int(-1) == check_le) + testing.expect(t, i128le(reverse) == check_le) + testing.expect(t, cast(i128le)reverse == check_le) + + // test literal + testing.expect(t, i128be(value) == -1) + testing.expect(t, i128be(-1) == -1) + testing.expect(t, cast(i128be)value == -1) + testing.expect(t, cast(i128be)-1 == -1) + testing.expect(t, i128be(int(-1)) == -1) + testing.expect(t, cast(i128be)int(-1) == -1) + testing.expect(t, i128le(value) == -1) + testing.expect(t, i128le(-1) == -1) + testing.expect(t, cast(i128le)value == -1) + testing.expect(t, cast(i128le)-1 == -1) + testing.expect(t, i128le(int(-1)) == -1) + testing.expect(t, cast(i128le)int(-1) == -1) + testing.expect(t, i128le(reverse) == -1) + testing.expect(t, cast(i128le)reverse == -1) + } + + // NOTE(ske): [llvm_backend_const.cpp:lb_big_int_to_llvm] + // floats behaved wonky when I tested because I forgot to sign extend whole + // rop so I added more tests here to be safe + { + check_be : f64be = -1.234 + check_le : f64le = -1.234 + value : f64 = -1.234 + reverse := f64be(value) + + // test variable + testing.expect(t, f64be(value) == check_be) + testing.expect(t, f64be(-1.234) == check_be) + testing.expect(t, cast(f64be)value == check_be) + testing.expect(t, cast(f64be)-1.234 == check_be) + testing.expect(t, f64be(int(-1.234)) == check_be) + testing.expect(t, cast(f64be)int(-1.234) == check_be) + testing.expect(t, f64le(value) == check_le) + testing.expect(t, f64le(-1.234) == check_le) + testing.expect(t, cast(f64le)value == check_le) + testing.expect(t, cast(f64le)-1.234 == check_le) + testing.expect(t, f64le(int(-1.234)) == check_le) + testing.expect(t, cast(f64le)int(-1.234) == check_le) + testing.expect(t, f64le(reverse) == check_le) + testing.expect(t, cast(f64le)reverse == check_le) + + // test literal + testing.expect(t, f64be(value) == -1.234) + testing.expect(t, f64be(-1.234) == -1.234) + testing.expect(t, cast(f64be)value == -1.234) + testing.expect(t, cast(f64be)-1.234 == -1.234) + testing.expect(t, f64be(int(-1.234)) == -1.234) + testing.expect(t, cast(f64be)int(-1.234) == -1.234) + testing.expect(t, f64le(value) == -1.234) + testing.expect(t, f64le(-1.234) == -1.234) + testing.expect(t, cast(f64le)value == -1.234) + testing.expect(t, cast(f64le)-1.234 == -1.234) + testing.expect(t, f64le(int(-1.234)) == -1.234) + testing.expect(t, cast(f64le)int(-1.234) == -1.234) + testing.expect(t, f64le(reverse) == -1.234) + testing.expect(t, cast(f64le)reverse == -1.234) + } + + testing.expect(t, i64be(-1) + i64be(1) == 0) + testing.expect(t, i64le(-1) + i64le(i64be(1)) == 0) + testing.expect(t, i64be(-7) * i64be(7) == -49) +} From 2700fa86d647ed27f4f7f008ef7d15299bfd6671 Mon Sep 17 00:00:00 2001 From: ske Date: Tue, 30 Dec 2025 22:24:10 -0300 Subject: [PATCH 043/212] fix typo --- src/llvm_backend_const.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 9c407be00..8ce2137ab 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -539,7 +539,7 @@ gb_internal LLVMValueRef lb_big_int_to_llvm(lbModule *m, Type *original_type, Bi } if (big_int_is_neg(a)) { - // sizeof intead of sz for sign extend to work properly + // sizeof instead of sz for sign extend to work properly for (size_t i = 0; i < sizeof rop64; i++) { rop[i] = ~rop[i]; } From 8fea2b783c8f35dc6cd5963a2ed30cb176cc9889 Mon Sep 17 00:00:00 2001 From: dozn Date: Tue, 30 Dec 2025 18:10:07 -0800 Subject: [PATCH 044/212] [encoding/json] Allow Unmarshalling to `rune` Fixes https://github.com/odin-lang/Odin/issues/6061 --- core/encoding/json/types.odin | 1 + core/encoding/json/unmarshal.odin | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/core/encoding/json/types.odin b/core/encoding/json/types.odin index 1da17a0db..77cc7db85 100644 --- a/core/encoding/json/types.odin +++ b/core/encoding/json/types.odin @@ -76,6 +76,7 @@ Error :: enum { Invalid_Number, String_Not_Terminated, Invalid_String, + Invalid_Rune, // Parsing Errors diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin index 3cdc6429d..58365b684 100644 --- a/core/encoding/json/unmarshal.odin +++ b/core/encoding/json/unmarshal.odin @@ -225,6 +225,15 @@ unmarshal_string_token :: proc(p: ^Parser, val: any, token: Token, ti: ^reflect. } ok = true return + case rune: + for rne, i in str { + if i > 0 { + dst = {} + return false, .Invalid_Rune + } + dst = rne + } + return true, nil } #partial switch variant in ti.variant { From 6f396ac49b159e5741579d3b5bb50318e8e75851 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 31 Dec 2025 15:01:03 +0000 Subject: [PATCH 045/212] Rename `xar.Xar` to `xar.Array` --- core/container/xar/xar.odin | 50 ++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/core/container/xar/xar.odin b/core/container/xar/xar.odin index 71fc13a27..8ed5bc3e4 100644 --- a/core/container/xar/xar.odin +++ b/core/container/xar/xar.odin @@ -12,7 +12,7 @@ import "core:container/xar" example :: proc() { - x: xar.Xar(int, 4) + x: xar.Array(int, 4) defer xar.destroy(&x) xar.push_back(&x, 10) @@ -38,7 +38,7 @@ MAX_SHIFT :: PLATFORM_BITS>>1 /* An Exponential Array with stable element addresses. - Unlike `[dynamic]T` which reallocates and moves elements when growing, `Xar` + Unlike `[dynamic]T` which reallocates and moves elements when growing, `Array` allocates separate chunks of exponentially increasing size. This guarantees that pointers to elements remain valid for the lifetime of the container. @@ -66,11 +66,11 @@ MAX_SHIFT :: PLATFORM_BITS>>1 example :: proc() { // Xar with initial chunk size of 16 (1 << 4) - x: xar.Xar(My_Struct, 4) + x: xar.Array(My_Struct, 4) defer xar.destroy(&x) } */ -Xar :: struct($T: typeid, $SHIFT: uint) where 0 < SHIFT, SHIFT <= MAX_SHIFT { +Array :: struct($T: typeid, $SHIFT: uint) where 0 < SHIFT, SHIFT <= MAX_SHIFT { chunks: [(1 << (_LOG2_PLATFORM_BITS - intrinsics.constant_log2(SHIFT))) + 1][^]T, len: int, allocator: mem.Allocator, @@ -84,7 +84,7 @@ Initializes an exponential array with the given allocator. - `x`: Pointer to the exponential array to initialize - `allocator`: Allocator to use for chunk allocations (defaults to context.allocator) */ -init :: proc(x: ^$X/Xar($T, $SHIFT), allocator := context.allocator) { +init :: proc(x: ^$X/Array($T, $SHIFT), allocator := context.allocator) { x^ = {allocator = allocator} } @@ -94,7 +94,7 @@ Frees all allocated chunks and resets the exponential array. **Inputs** - `x`: Pointer to the exponential array to destroy */ -destroy :: proc(x: ^$X/Xar($T, $SHIFT)) { +destroy :: proc(x: ^$X/Array($T, $SHIFT)) { #reverse for c, i in x.chunks { if c != nil { n := 1 << (SHIFT + uint(i if i > 0 else 1) - 1) @@ -109,19 +109,19 @@ destroy :: proc(x: ^$X/Xar($T, $SHIFT)) { Resets the array's length to zero without freeing memory. Allocated chunks are retained for reuse. */ -clear :: proc(x: ^$X/Xar($T, $SHIFT)) { +clear :: proc(x: ^$X/Array($T, $SHIFT)) { x.len = 0 } // Returns the length of the exponential-array @(require_results) -len :: proc(x: $X/Xar($T, $SHIFT)) -> int { +len :: proc(x: $X/Array($T, $SHIFT)) -> int { return x.len } // Returns the number of allocated elements @(require_results) -cap :: proc(x: $X/Xar($T, $SHIFT)) -> int { +cap :: proc(x: $X/Array($T, $SHIFT)) -> int { #reverse for c, i in x.chunks { if c != nil { return 1 << (SHIFT + uint(i if i > 0 else 1)) @@ -161,7 +161,7 @@ Get a copy of the element at the specified index. - a copy of the element */ @(require_results) -get :: proc(x: ^$X/Xar($T, $SHIFT), #any_int index: int, loc := #caller_location) -> (val: T) #no_bounds_check { +get :: proc(x: ^$X/Array($T, $SHIFT), #any_int index: int, loc := #caller_location) -> (val: T) #no_bounds_check { runtime.bounds_check_error_loc(loc, index, x.len) chunk_idx, elem_idx, _ := _meta_get(SHIFT, uint(index)) return x.chunks[chunk_idx][elem_idx] @@ -185,7 +185,7 @@ Example: import "core:container/xar" get_ptr_example :: proc() { - x: xar.Xar(int, 4) + x: xar.Array(int, 4) defer xar.destroy(&x) xar.push_back(&x, 100) @@ -200,7 +200,7 @@ Example: } */ @(require_results) -get_ptr :: proc(x: ^$X/Xar($T, $SHIFT), #any_int index: int, loc := #caller_location) -> (val: ^T) #no_bounds_check { +get_ptr :: proc(x: ^$X/Array($T, $SHIFT), #any_int index: int, loc := #caller_location) -> (val: ^T) #no_bounds_check { runtime.bounds_check_error_loc(loc, index, x.len) chunk_idx, elem_idx, _ := _meta_get(SHIFT, uint(index)) return &x.chunks[chunk_idx][elem_idx] @@ -214,7 +214,7 @@ Set the element at the specified index to the given value. - `index`: Position of the element (0-indexed) - `value`: The value to set */ -set :: proc(x: ^$X/Xar($T, $SHIFT), #any_int index: int, value: T, loc := #caller_location) #no_bounds_check { +set :: proc(x: ^$X/Array($T, $SHIFT), #any_int index: int, value: T, loc := #caller_location) #no_bounds_check { runtime.bounds_check_error_loc(loc, index, x.len) chunk_idx, elem_idx, _ := _meta_get(SHIFT, uint(index)) x.chunks[chunk_idx][elem_idx] = value @@ -240,7 +240,7 @@ Example: import "core:container/xar" push_back_example :: proc() { - x: xar.Xar(string, 4) + x: xar.Array(string, 4) defer xar.destroy(&x) xar.push_back(&x, "hello") @@ -250,7 +250,7 @@ Example: fmt.println(xar.get(&x, 1)) // world } */ -push_back_elem :: proc(x: ^$X/Xar($T, $SHIFT), value: T, loc := #caller_location) -> (n: int, err: mem.Allocator_Error) { +push_back_elem :: proc(x: ^$X/Array($T, $SHIFT), value: T, loc := #caller_location) -> (n: int, err: mem.Allocator_Error) { if x.allocator.procedure == nil { // to minic `[dynamic]T` behaviour x.allocator = context.allocator @@ -277,7 +277,7 @@ Append multiple elements to the end of the exponential array. - number of elements successfully added - allocation error if chunk allocation failed (partial append possible) */ -push_back_elems :: proc(x: ^$X/Xar($T, $SHIFT), values: ..T, loc := #caller_location) -> (n: int, err: mem.Allocator_Error) { +push_back_elems :: proc(x: ^$X/Array($T, $SHIFT), values: ..T, loc := #caller_location) -> (n: int, err: mem.Allocator_Error) { for value in values { n += push_back_elem(x, value, loc) or_return } @@ -303,7 +303,7 @@ Example: import "core:container/xar" push_back_and_get_ptr_example :: proc() { - x: xar.Xar(My_Struct, 4) + x: xar.Array(My_Struct, 4) defer xar.destroy(&x) ptr := xar.push_back_elem_and_get_ptr(&x, My_Struct{}) or_else panic("alloc failed") @@ -311,7 +311,7 @@ Example: } */ @(require_results) -push_back_elem_and_get_ptr :: proc(x: ^$X/Xar($T, $SHIFT), value: T, loc := #caller_location) -> (ptr: ^T, err: mem.Allocator_Error) { +push_back_elem_and_get_ptr :: proc(x: ^$X/Array($T, $SHIFT), value: T, loc := #caller_location) -> (ptr: ^T, err: mem.Allocator_Error) { if x.allocator.procedure == nil { // to minic `[dynamic]T` behaviour x.allocator = context.allocator @@ -330,7 +330,7 @@ push_back_elem_and_get_ptr :: proc(x: ^$X/Xar($T, $SHIFT), value: T, loc := #cal // `pop` will remove and return the end value of an exponential array `x` and reduces the length of the array by 1. // // Note: If the exponential array has no elements (`xar.len(x) == 0`), this procedure will panic. -pop :: proc(x: ^$X/Xar($T, $SHIFT), loc := #caller_location) -> (val: T) { +pop :: proc(x: ^$X/Array($T, $SHIFT), loc := #caller_location) -> (val: T) { assert(x.len > 0, loc=loc) index := uint(x.len-1) chunk_idx, elem_idx, _ := _meta_get(SHIFT, index) @@ -341,7 +341,7 @@ pop :: proc(x: ^$X/Xar($T, $SHIFT), loc := #caller_location) -> (val: T) { // `pop_safe` trys to remove and return the end value of dynamic array `x` and reduces the length of the array by 1. // If the operation is not possible, it will return false. @(require_results) -pop_safe :: proc(x: ^$X/Xar($T, $SHIFT)) -> (val: T, ok: bool) { +pop_safe :: proc(x: ^$X/Array($T, $SHIFT)) -> (val: T, ok: bool) { if x.len == 0 { return } @@ -369,7 +369,7 @@ pop_safe :: proc(x: ^$X/Xar($T, $SHIFT)) -> (val: T, ok: bool) { import "core:encoding/xar" unordered_remove_example :: proc() { - x: xar.Xar(int, 4) + x: xar.Array(int, 4) defer xar.destroy(&x) xar.push_back(&x, 10) @@ -383,7 +383,7 @@ pop_safe :: proc(x: ^$X/Xar($T, $SHIFT)) -> (val: T, ok: bool) { fmt.println(xar.get(&x, 1)) // 20 } */ -unordered_remove :: proc(x: ^$X/Xar($T, $SHIFT), #any_int index: int, loc := #caller_location) { +unordered_remove :: proc(x: ^$X/Array($T, $SHIFT), #any_int index: int, loc := #caller_location) { runtime.bounds_check_error_loc(loc, index, x.len) n := x.len-1 if index != n { @@ -402,7 +402,7 @@ Fields: - `idx`: Current iteration index */ Iterator :: struct($T: typeid, $SHIFT: uint) { - xar: ^Xar(T, SHIFT), + xar: ^Array(T, SHIFT), idx: int, } @@ -420,7 +420,7 @@ Example: import "lib:xar" iteration_example :: proc() { - x: xar.Xar(int, 4) + x: xar.Array(int, 4) defer xar.destroy(&x) xar.push_back(&x, 10) @@ -439,7 +439,7 @@ Output: 20 30 */ -iterator :: proc(xar: ^$X/Xar($T, $SHIFT)) -> Iterator(T, SHIFT) { +iterator :: proc(xar: ^$X/Array($T, $SHIFT)) -> Iterator(T, SHIFT) { return {xar = auto_cast xar, idx = 0} } From c6ca64cd4aa860e070130da661bb37b187ff5fa4 Mon Sep 17 00:00:00 2001 From: Neirokan Date: Thu, 1 Jan 2026 10:52:18 +0300 Subject: [PATCH 046/212] fix map_to_ip6 offset --- core/net/addr.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/net/addr.odin b/core/net/addr.odin index fad0eddc4..6e2881ac8 100644 --- a/core/net/addr.odin +++ b/core/net/addr.odin @@ -495,8 +495,8 @@ map_to_ip6 :: proc(addr: Address) -> Address { addr4 := addr.(IP4_Address) addr4_u16 := transmute([2]u16be) addr4 addr6: IP6_Address - addr6[4] = 0xffff - copy(addr6[5:], addr4_u16[:]) + addr6[5] = 0xffff + copy(addr6[6:], addr4_u16[:]) return addr6 } From 94146e4fe77c180bc74183cc7b29748698fc435e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Jan 2026 13:40:43 +0000 Subject: [PATCH 047/212] fix printing dozenal numbers `0z` from `0o` --- core/fmt/fmt.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 059413787..6a67843bb 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -1086,7 +1086,7 @@ _fmt_int :: proc(fi: ^Info, u: u64, base: int, is_signed: bool, bit_size: int, d case 12: io.write_byte(fi.writer, '0', &fi.n) - io.write_byte(fi.writer, 'o', &fi.n) + io.write_byte(fi.writer, 'z', &fi.n) start = 2 case 16: @@ -1171,7 +1171,7 @@ _fmt_int_128 :: proc(fi: ^Info, u: u128, base: int, is_signed: bool, bit_size: i case 12: io.write_byte(fi.writer, '0', &fi.n) - io.write_byte(fi.writer, 'o', &fi.n) + io.write_byte(fi.writer, 'z', &fi.n) start = 2 case 16: From 70697fa00fdda2dc651d41b60f5f6dbed46998a1 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Jan 2026 13:41:56 +0000 Subject: [PATCH 048/212] When using `fmt_write_padding`, remove the need to restore `fi.zero` since it is not used. --- core/fmt/fmt.odin | 6 ------ 1 file changed, 6 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 6a67843bb..0d20071e6 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -1100,10 +1100,7 @@ _fmt_int :: proc(fi: ^Info, u: u64, base: int, is_signed: bool, bit_size: int, d if fi.prec_set { prec = fi.prec if prec == 0 && u == 0 { - prev_zero := fi.zero - fi.zero = false fmt_write_padding(fi, fi.width) - fi.zero = prev_zero return } } else if fi.zero && fi.width_set { @@ -1185,10 +1182,7 @@ _fmt_int_128 :: proc(fi: ^Info, u: u128, base: int, is_signed: bool, bit_size: i if fi.prec_set { prec = fi.prec if prec == 0 && u == 0 { - prev_zero := fi.zero - fi.zero = false fmt_write_padding(fi, fi.width) - fi.zero = prev_zero return } } else if fi.zero && fi.width_set { From b446b91251af00d4d648b5e178bc4f4e7a735bb9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 1 Jan 2026 13:42:40 +0000 Subject: [PATCH 049/212] Add `@(rodata)` to global constants --- core/fmt/fmt.odin | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 0d20071e6..a87529174 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -1225,8 +1225,8 @@ _fmt_int_128 :: proc(fi: ^Info, u: u128, base: int, is_signed: bool, bit_size: i _pad(fi, s) } // Units of measurements: -__MEMORY_LOWER := " b kib mib gib tib pib eib" -__MEMORY_UPPER := " B KiB MiB GiB TiB PiB EiB" +@(rodata) __MEMORY_LOWER := " b kib mib gib tib pib eib" +@(rodata) __MEMORY_UPPER := " B KiB MiB GiB TiB PiB EiB" // Formats an integer value as bytes with the best representation. // // Inputs: @@ -1284,8 +1284,8 @@ _fmt_memory :: proc(fi: ^Info, u: u64, is_signed: bool, bit_size: int, units: st _pad(fi, str) } // Hex Values: -__DIGITS_LOWER := "0123456789abcdefx" -__DIGITS_UPPER := "0123456789ABCDEFX" +@(rodata) __DIGITS_LOWER := "0123456789abcdefx" +@(rodata) __DIGITS_UPPER := "0123456789ABCDEFX" // Formats a rune value according to the specified formatting verb. // // Inputs: From b9a170b117d6db89eb824c3faf5edc874b3f7ec4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 09:46:50 +0000 Subject: [PATCH 050/212] Fix `GetSystemMetricsForDpi` signature --- core/sys/windows/user32.odin | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 11c01db25..94d03d6b4 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -2,7 +2,6 @@ package sys_windows import "base:intrinsics" -import "core:c" foreign import user32 "system:User32.lib" @(default_calling_convention="system") @@ -33,7 +32,7 @@ foreign user32 { RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM --- UnregisterClassW :: proc(lpClassName: LPCWSTR, hInstance: HINSTANCE) -> BOOL --- - RegisterHotKey :: proc(hnwd: HWND, id: c.int, fsModifiers: UINT, vk: UINT) -> BOOL --- + RegisterHotKey :: proc(hnwd: HWND, id: c_int, fsModifiers: UINT, vk: UINT) -> BOOL --- CreateWindowExW :: proc( dwExStyle: DWORD, @@ -295,7 +294,7 @@ foreign user32 { SetWindowPlacement :: proc(hwnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- SetWindowRgn :: proc(hWnd: HWND, hRgn: HRGN, bRedraw: BOOL) -> int --- CreateRectRgnIndirect :: proc(lprect: ^RECT) -> HRGN --- - GetSystemMetricsForDpi :: proc(nIndex: int, dpi: UINT) -> int --- + GetSystemMetricsForDpi :: proc(nIndex: c_int, dpi: UINT) -> int --- GetCursorInfo :: proc(pci: PCURSORINFO) -> BOOL --- From 45aa89cf0235a72412dece20b6e5b12556591d49 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 09:47:45 +0000 Subject: [PATCH 051/212] Replace uses of `c.int` with `c_int` for consistency --- core/sys/windows/hidpi.odin | 3 +-- core/sys/windows/types.odin | 2 +- core/sys/windows/wgl.odin | 20 +++++++++----------- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/core/sys/windows/hidpi.odin b/core/sys/windows/hidpi.odin index 5e9787527..6f1e888cc 100644 --- a/core/sys/windows/hidpi.odin +++ b/core/sys/windows/hidpi.odin @@ -1,6 +1,5 @@ #+build windows package sys_windows -import "core:c" HIDD_CONFIGURATION :: struct { cookie: PVOID, @@ -152,7 +151,7 @@ PHIDP_LINK_COLLECTION_NODE :: ^HIDP_LINK_COLLECTION_NODE HIDP_PREPARSED_DATA :: rawptr PHIDP_PREPARSED_DATA :: ^HIDP_PREPARSED_DATA -HIDP_REPORT_TYPE :: enum c.int { +HIDP_REPORT_TYPE :: enum c_int { Input, Output, Feature, diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 904970589..d4afe971e 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -2234,7 +2234,7 @@ SHELLEXECUTEINFOW :: struct { lpFile: LPCWSTR, // in, either this value or lpIDList must be specified lpParameters: LPCWSTR, // in, optional lpDirectory: LPCWSTR, // in, optional - nShow: c.int, // in, required + nShow: c_int, // in, required hInstApp: HINSTANCE, // out when SEE_MASK_NOCLOSEPROCESS is specified lpIDList: rawptr, // in, valid when SEE_MASK_IDLIST is specified, PCIDLIST_ABSOLUTE, for use with SEE_MASK_IDLIST & SEE_MASK_INVOKEIDLIST lpClass: LPCWSTR, // in, valid when SEE_MASK_CLASSNAME is specified diff --git a/core/sys/windows/wgl.odin b/core/sys/windows/wgl.odin index f50f06939..436a96329 100644 --- a/core/sys/windows/wgl.odin +++ b/core/sys/windows/wgl.odin @@ -1,8 +1,6 @@ #+build windows package sys_windows -import "core:c" - foreign import "system:Opengl32.lib" CONTEXT_MAJOR_VERSION_ARB :: 0x2091 @@ -54,9 +52,9 @@ GLYPHMETRICSFLOAT :: struct { gmfCellIncY: f32, } -CreateContextAttribsARBType :: #type proc "c" (hdc: HDC, hShareContext: rawptr, attribList: [^]c.int) -> HGLRC -ChoosePixelFormatARBType :: #type proc "c" (hdc: HDC, attribIList: [^]c.int, attribFList: [^]f32, maxFormats: DWORD, formats: [^]c.int, numFormats: [^]DWORD) -> BOOL -SwapIntervalEXTType :: #type proc "c" (interval: c.int) -> bool +CreateContextAttribsARBType :: #type proc "c" (hdc: HDC, hShareContext: rawptr, attribList: [^]c_int) -> HGLRC +ChoosePixelFormatARBType :: #type proc "c" (hdc: HDC, attribIList: [^]c_int, attribFList: [^]f32, maxFormats: DWORD, formats: [^]c_int, numFormats: [^]DWORD) -> BOOL +SwapIntervalEXTType :: #type proc "c" (interval: c_int) -> bool GetExtensionsStringARBType :: #type proc "c" (HDC) -> cstring // Procedures @@ -73,18 +71,18 @@ foreign Opengl32 { wglGetProcAddress :: proc(c_str: cstring) -> rawptr --- wglDeleteContext :: proc(HGLRC: HGLRC) -> BOOL --- wglCopyContext :: proc(src, dst: HGLRC, mask: UINT) -> BOOL --- - wglCreateLayerContext :: proc(hdc: HDC, layer_plane: c.int) -> HGLRC --- - wglDescribeLayerPlane :: proc(hdc: HDC, pixel_format, layer_plane: c.int, bytes: UINT, pd: LPLAYERPLANEDESCRIPTOR) -> BOOL --- + wglCreateLayerContext :: proc(hdc: HDC, layer_plane: c_int) -> HGLRC --- + wglDescribeLayerPlane :: proc(hdc: HDC, pixel_format, layer_plane: c_int, bytes: UINT, pd: LPLAYERPLANEDESCRIPTOR) -> BOOL --- wglGetCurrentContext :: proc() -> HGLRC --- wglGetCurrentDC :: proc() -> HDC --- - wglGetLayerPaletteEntries :: proc(hdc: HDC, layer_plane, start, entries: c.int, cr: ^COLORREF) -> c.int --- - wglRealizeLayerPalette :: proc(hdc: HDC, layer_plane: c.int, realize: BOOL) -> BOOL --- - wglSetLayerPaletteEntries :: proc(hdc: HDC, layer_plane, start, entries: c.int, cr: ^COLORREF) -> c.int --- + wglGetLayerPaletteEntries :: proc(hdc: HDC, layer_plane, start, entries: c_int, cr: ^COLORREF) -> c_int --- + wglRealizeLayerPalette :: proc(hdc: HDC, layer_plane: c_int, realize: BOOL) -> BOOL --- + wglSetLayerPaletteEntries :: proc(hdc: HDC, layer_plane, start, entries: c_int, cr: ^COLORREF) -> c_int --- wglShareLists :: proc(HGLRC1, HGLRC2: HGLRC) -> BOOL --- wglSwapLayerBuffers :: proc(hdc: HDC, planes: DWORD) -> BOOL --- wglUseFontBitmapsA :: proc(hdc: HDC, first, count, list_base: DWORD) -> BOOL --- wglUseFontBitmapsW :: proc(hdc: HDC, first, count, list_base: DWORD) -> BOOL --- - wglUseFontOutlines :: proc(hdc: HDC, first, count, list_base: DWORD, deviation, extrusion: f32, format: c.int, gmf: LPGLYPHMETRICSFLOAT) -> BOOL --- + wglUseFontOutlines :: proc(hdc: HDC, first, count, list_base: DWORD, deviation, extrusion: f32, format: c_int, gmf: LPGLYPHMETRICSFLOAT) -> BOOL --- } // Used by vendor:OpenGL From 37458a4bebed996b1fca222ac348eeffdcad7d41 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 09:53:50 +0000 Subject: [PATCH 052/212] Fix some return types in core:sys/windows --- core/sys/windows/gdi32.odin | 2 +- core/sys/windows/user32.odin | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/sys/windows/gdi32.odin b/core/sys/windows/gdi32.odin index 141429483..1a23b4c8f 100644 --- a/core/sys/windows/gdi32.odin +++ b/core/sys/windows/gdi32.odin @@ -52,7 +52,7 @@ foreign gdi32 { CreateSolidBrush :: proc(color: COLORREF) -> HBRUSH --- - GetObjectW :: proc(h: HANDLE, c: INT, pv: LPVOID) -> int --- + GetObjectW :: proc(h: HANDLE, c: INT, pv: LPVOID) -> c_int --- CreateCompatibleBitmap :: proc(hdc: HDC, cx, cy: INT) -> HBITMAP --- BitBlt :: proc(hdc: HDC, x, y, cx, cy: INT, hdcSrc: HDC, x1, y1: INT, rop: DWORD) -> BOOL --- GetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start, cLines: UINT, lpvBits: LPVOID, lpbmi: ^BITMAPINFO, usage: UINT) -> INT --- diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 94d03d6b4..e42f1adce 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -277,8 +277,8 @@ foreign user32 { SetLayeredWindowAttributes :: proc(hWnd: HWND, crKey: COLORREF, bAlpha: BYTE, dwFlags: DWORD) -> BOOL --- - FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> int --- - FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> int --- + FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- + FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_inct --- EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL --- OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- @@ -292,9 +292,9 @@ foreign user32 { GetWindowInfo :: proc(hwnd: HWND, pwi: PWINDOWINFO) -> BOOL --- GetWindowPlacement :: proc(hWnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- SetWindowPlacement :: proc(hwnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- - SetWindowRgn :: proc(hWnd: HWND, hRgn: HRGN, bRedraw: BOOL) -> int --- + SetWindowRgn :: proc(hWnd: HWND, hRgn: HRGN, bRedraw: BOOL) -> c_int --- CreateRectRgnIndirect :: proc(lprect: ^RECT) -> HRGN --- - GetSystemMetricsForDpi :: proc(nIndex: c_int, dpi: UINT) -> int --- + GetSystemMetricsForDpi :: proc(nIndex: c_int, dpi: UINT) -> c_int --- GetCursorInfo :: proc(pci: PCURSORINFO) -> BOOL --- From 747ecc69115d35ab99be3b27e27f751288f12a77 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 09:55:56 +0000 Subject: [PATCH 053/212] Fix typo --- core/sys/windows/user32.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index e42f1adce..cd73f80e6 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -278,7 +278,7 @@ foreign user32 { SetLayeredWindowAttributes :: proc(hWnd: HWND, crKey: COLORREF, bAlpha: BYTE, dwFlags: DWORD) -> BOOL --- FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- - FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_inct --- + FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL --- OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- From 111ed21e7e5f7ca4cb4358073ab060d138fc782f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 10:02:23 +0000 Subject: [PATCH 054/212] Change usage of `i32` to `c_int` where appropriate --- core/sys/windows/advapi32.odin | 4 +- core/sys/windows/comctl32.odin | 66 ++++++++++++++++----------------- core/sys/windows/icu.odin | 3 ++ core/sys/windows/ip_helper.odin | 14 +++---- core/sys/windows/types.odin | 2 +- core/sys/windows/user32.odin | 20 +++++----- core/sys/windows/util.odin | 16 ++++---- core/sys/windows/ux_theme.odin | 11 ++++-- 8 files changed, 72 insertions(+), 64 deletions(-) diff --git a/core/sys/windows/advapi32.odin b/core/sys/windows/advapi32.odin index 22cb27863..cf12a078f 100644 --- a/core/sys/windows/advapi32.odin +++ b/core/sys/windows/advapi32.odin @@ -228,7 +228,7 @@ foreign advapi32 { } PTOKEN_INFORMATION_CLASS :: ^TOKEN_INFORMATION_CLASS -TOKEN_INFORMATION_CLASS :: enum i32 { +TOKEN_INFORMATION_CLASS :: enum c_int { TokenUser = 1, TokenGroups, TokenPrivileges, @@ -282,7 +282,7 @@ TOKEN_INFORMATION_CLASS :: enum i32 { } PSID_NAME_USE :: ^SID_NAME_USE -SID_NAME_USE :: enum i32 { +SID_NAME_USE :: enum c_int { SidTypeUser = 1, SidTypeGroup, SidTypeDomain, diff --git a/core/sys/windows/comctl32.odin b/core/sys/windows/comctl32.odin index c7a166634..c2b4362d9 100644 --- a/core/sys/windows/comctl32.odin +++ b/core/sys/windows/comctl32.odin @@ -157,14 +157,14 @@ ILP_DOWNLEVEL :: 1 IMAGELISTDRAWPARAMS :: struct { cbSize: DWORD, himl: HIMAGELIST, - i: i32, + i: c_int, hdcDst: HDC, - x: i32, - y: i32, - cx: i32, - cy: i32, - xBitmap: i32, - yBitmap: i32, + x: c_int, + y: c_int, + cx: c_int, + cy: c_int, + xBitmap: c_int, + yBitmap: c_int, rgbBk: COLORREF, rgbFg: COLORREF, fStyle: UINT, @@ -178,62 +178,62 @@ LPIMAGELISTDRAWPARAMS :: ^IMAGELISTDRAWPARAMS IMAGEINFO :: struct { hbmImage: HBITMAP, hbmMask: HBITMAP, - Unused1: i32, - Unused2: i32, + Unused1: c_int, + Unused2: c_int, rcImage: RECT, } LPIMAGEINFO :: ^IMAGEINFO @(default_calling_convention="system") foreign Comctl32 { - ImageList_Create :: proc(cx, cy: i32, flags: UINT, cInitial, cGrow: i32) -> HIMAGELIST --- + ImageList_Create :: proc(cx, cy: c_int, flags: UINT, cInitial, cGrow: c_int) -> HIMAGELIST --- ImageList_Destroy :: proc(himl: HIMAGELIST) -> BOOL --- - ImageList_GetImageCount :: proc(himl: HIMAGELIST) -> i32 --- + ImageList_GetImageCount :: proc(himl: HIMAGELIST) -> c_int --- ImageList_SetImageCount :: proc(himl: HIMAGELIST, uNewCount: UINT) -> BOOL --- - ImageList_Add :: proc(himl: HIMAGELIST, hbmImage, hbmMask: HBITMAP) -> i32 --- - ImageList_ReplaceIcon :: proc(himl: HIMAGELIST, i: i32, hicon: HICON) -> i32 --- + ImageList_Add :: proc(himl: HIMAGELIST, hbmImage, hbmMask: HBITMAP) -> c_int --- + ImageList_ReplaceIcon :: proc(himl: HIMAGELIST, i: c_int, hicon: HICON) -> c_int --- ImageList_SetBkColor :: proc(himl: HIMAGELIST, clrBk: COLORREF) -> COLORREF --- ImageList_GetBkColor :: proc(himl: HIMAGELIST) -> COLORREF --- - ImageList_SetOverlayImage :: proc(himl: HIMAGELIST, iImage: i32, iOverlay: i32) -> BOOL --- - ImageList_Draw :: proc(himl: HIMAGELIST, i: i32, hdcDst: HDC, x, y: i32, fStyle: UINT) -> BOOL --- - ImageList_Replace :: proc(himl: HIMAGELIST, i: i32, hbmImage, hbmMask: HBITMAP) -> BOOL --- - ImageList_AddMasked :: proc(himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF) -> i32 --- - ImageList_DrawEx :: proc(himl: HIMAGELIST, i: i32, hdcDst: HDC, x, y, dx, dy: i32, rgbBk, rgbFg: COLORREF, fStyle: UINT) -> BOOL --- + ImageList_SetOverlayImage :: proc(himl: HIMAGELIST, iImage: c_int, iOverlay: c_int) -> BOOL --- + ImageList_Draw :: proc(himl: HIMAGELIST, i: c_int, hdcDst: HDC, x, y: c_int, fStyle: UINT) -> BOOL --- + ImageList_Replace :: proc(himl: HIMAGELIST, i: c_int, hbmImage, hbmMask: HBITMAP) -> BOOL --- + ImageList_AddMasked :: proc(himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF) -> c_int --- + ImageList_DrawEx :: proc(himl: HIMAGELIST, i: c_int, hdcDst: HDC, x, y, dx, dy: c_int, rgbBk, rgbFg: COLORREF, fStyle: UINT) -> BOOL --- ImageList_DrawIndirect :: proc(pimldp: ^IMAGELISTDRAWPARAMS) -> BOOL --- - ImageList_Remove :: proc(himl: HIMAGELIST, i: i32) -> BOOL --- - ImageList_GetIcon :: proc(himl: HIMAGELIST, i: i32, flags: UINT) -> HICON --- - ImageList_LoadImageW :: proc(hi: HINSTANCE, lpbmp: LPCWSTR, cx, cgrow: i32, crMask: COLORREF, uType, uFlags: UINT) -> HIMAGELIST --- - ImageList_Copy :: proc(himlDst: HIMAGELIST, iDst: i32, himlSrc: HIMAGELIST, iSrc: i32, uFlags: UINT) -> BOOL --- - ImageList_BeginDrag :: proc(himlTrack: HIMAGELIST, iTrack, dxHotspot, dyHotspot: i32) -> BOOL --- + ImageList_Remove :: proc(himl: HIMAGELIST, i: c_int) -> BOOL --- + ImageList_GetIcon :: proc(himl: HIMAGELIST, i: c_int, flags: UINT) -> HICON --- + ImageList_LoadImageW :: proc(hi: HINSTANCE, lpbmp: LPCWSTR, cx, cgrow: c_int, crMask: COLORREF, uType, uFlags: UINT) -> HIMAGELIST --- + ImageList_Copy :: proc(himlDst: HIMAGELIST, iDst: c_int, himlSrc: HIMAGELIST, iSrc: c_int, uFlags: UINT) -> BOOL --- + ImageList_BeginDrag :: proc(himlTrack: HIMAGELIST, iTrack, dxHotspot, dyHotspot: c_int) -> BOOL --- ImageList_EndDrag :: proc() --- - ImageList_DragEnter :: proc(hwndLock: HWND, x, y: i32) -> BOOL --- + ImageList_DragEnter :: proc(hwndLock: HWND, x, y: c_int) -> BOOL --- ImageList_DragLeave :: proc(hwndLock: HWND) -> BOOL --- - ImageList_DragMove :: proc(x, y: i32) -> BOOL --- - ImageList_SetDragCursorImage :: proc(himlDrag: HIMAGELIST, iDrag, dxHotspot, dyHotspot: i32) -> BOOL --- + ImageList_DragMove :: proc(x, y: c_int) -> BOOL --- + ImageList_SetDragCursorImage :: proc(himlDrag: HIMAGELIST, iDrag, dxHotspot, dyHotspot: c_int) -> BOOL --- ImageList_DragShowNolock :: proc(fShow: BOOL) -> BOOL --- ImageList_GetDragImage :: proc(ppt, pptHotspot: ^POINT) -> HIMAGELIST --- ImageList_Read :: proc(pstm: ^IStream) -> HIMAGELIST --- ImageList_Write :: proc(himl: HIMAGELIST, pstm: ^IStream) -> BOOL --- ImageList_ReadEx :: proc(dwFlags: DWORD, pstm: ^IStream, riid: REFIID, ppv: PVOID) -> HRESULT --- ImageList_WriteEx :: proc(himl: HIMAGELIST, dwFlags: DWORD, pstm: ^IStream) -> HRESULT --- - ImageList_GetIconSize :: proc(himl: HIMAGELIST, cx, cy: ^i32) -> BOOL --- - ImageList_SetIconSize :: proc(himl: HIMAGELIST, cx, cy: i32) -> BOOL --- - ImageList_GetImageInfo :: proc(himl: HIMAGELIST, i: i32, pImageInfo: ^IMAGEINFO) -> BOOL --- - ImageList_Merge :: proc(himl1: HIMAGELIST, i1: i32, himl2: HIMAGELIST, i2: i32, dx, dy: i32) -> HIMAGELIST --- + ImageList_GetIconSize :: proc(himl: HIMAGELIST, cx, cy: ^c_int) -> BOOL --- + ImageList_SetIconSize :: proc(himl: HIMAGELIST, cx, cy: c_int) -> BOOL --- + ImageList_GetImageInfo :: proc(himl: HIMAGELIST, i: c_int, pImageInfo: ^IMAGEINFO) -> BOOL --- + ImageList_Merge :: proc(himl1: HIMAGELIST, i1: c_int, himl2: HIMAGELIST, i2: c_int, dx, dy: c_int) -> HIMAGELIST --- ImageList_Duplicate :: proc(himl: HIMAGELIST) -> HIMAGELIST --- HIMAGELIST_QueryInterface :: proc(himl: HIMAGELIST, riid: REFIID, ppv: rawptr) -> HRESULT --- } -ImageList_AddIcon :: #force_inline proc "system" (himl: HIMAGELIST, hicon: HICON) -> i32 { +ImageList_AddIcon :: #force_inline proc "system" (himl: HIMAGELIST, hicon: HICON) -> c_int { return ImageList_ReplaceIcon(himl, -1, hicon) } ImageList_RemoveAll :: #force_inline proc "system" (himl: HIMAGELIST) -> BOOL { return ImageList_Remove(himl, -1) } -ImageList_ExtractIcon :: #force_inline proc "system" (hi: HINSTANCE, himl: HIMAGELIST, i: i32) -> HICON { +ImageList_ExtractIcon :: #force_inline proc "system" (hi: HINSTANCE, himl: HIMAGELIST, i: c_int) -> HICON { return ImageList_GetIcon(himl, i, 0) } -ImageList_LoadBitmap :: #force_inline proc "system" (hi: HINSTANCE, lpbmp: LPCWSTR, cx, cGrow: i32, crMask: COLORREF) -> HIMAGELIST { +ImageList_LoadBitmap :: #force_inline proc "system" (hi: HINSTANCE, lpbmp: LPCWSTR, cx, cGrow: c_int, crMask: COLORREF) -> HIMAGELIST { return ImageList_LoadImageW(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0) } diff --git a/core/sys/windows/icu.odin b/core/sys/windows/icu.odin index 6ed8c9b40..b481a05a9 100644 --- a/core/sys/windows/icu.odin +++ b/core/sys/windows/icu.odin @@ -12,3 +12,6 @@ foreign icu { ucal_getWindowsTimeZoneID :: proc(id: wstring, len: i32, winid: wstring, winidCapacity: i32, status: ^UError) -> i32 --- ucal_getDefaultTimeZone :: proc(result: wstring, cap: i32, status: ^UError) -> i32 --- } + + +// NOTE(bill): all of these types actually do use `i32` and not `c_int` diff --git a/core/sys/windows/ip_helper.odin b/core/sys/windows/ip_helper.odin index d2e75d531..da23a064f 100644 --- a/core/sys/windows/ip_helper.odin +++ b/core/sys/windows/ip_helper.odin @@ -141,7 +141,7 @@ IP_ADAPTER_DNS_SERVER_ADDRESS_XP :: struct { Address: SOCKET_ADDRESS, } -IF_OPER_STATUS :: enum i32 { +IF_OPER_STATUS :: enum c_int { Up = 1, Down = 2, Testing = 3, @@ -160,17 +160,17 @@ NET_LUID_LH :: struct #raw_union { SOCKET_ADDRESS :: struct { lpSockaddr: ^SOCKADDR, - iSockaddrLength: i32, + iSockaddrLength: INT, } -NET_IF_CONNECTION_TYPE :: enum i32 { +NET_IF_CONNECTION_TYPE :: enum c_int { NET_IF_CONNECTION_DEDICATED = 1, NET_IF_CONNECTION_PASSIVE = 2, NET_IF_CONNECTION_DEMAND = 3, NET_IF_CONNECTION_MAXIMUM = 4, } -TUNNEL_TYPE :: enum i32 { +TUNNEL_TYPE :: enum c_int { TUNNEL_TYPE_NONE = 0, TUNNEL_TYPE_OTHER = 1, TUNNEL_TYPE_DIRECT = 2, @@ -179,7 +179,7 @@ TUNNEL_TYPE :: enum i32 { TUNNEL_TYPE_TEREDO = 14, TUNNEL_TYPE_IPHTTPS = 15, } -NL_PREFIX_ORIGIN :: enum i32 { +NL_PREFIX_ORIGIN :: enum c_int { IpPrefixOriginOther = 0, IpPrefixOriginManual = 1, IpPrefixOriginWellKnown = 2, @@ -188,7 +188,7 @@ NL_PREFIX_ORIGIN :: enum i32 { IpPrefixOriginUnchanged = 16, } -NL_SUFFIX_ORIGIN :: enum i32 { +NL_SUFFIX_ORIGIN :: enum c_int { NlsoOther = 0, NlsoManual = 1, NlsoWellKnown = 2, @@ -204,7 +204,7 @@ NL_SUFFIX_ORIGIN :: enum i32 { IpSuffixOriginUnchanged = 16, } -NL_DAD_STATE :: enum i32 { +NL_DAD_STATE :: enum c_int { NldsInvalid = 0, NldsTentative = 1, NldsDuplicate = 2, diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index d4afe971e..75e9fc695 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -274,7 +274,7 @@ PROTECTED_SACL_SECURITY_INFORMATION :: 0x40000000 UNPROTECTED_DACL_SECURITY_INFORMATION :: 0x20000000 UNPROTECTED_SACL_SECURITY_INFORMATION :: 0x10000000 -GET_FILEEX_INFO_LEVELS :: distinct i32 +GET_FILEEX_INFO_LEVELS :: distinct c_int GetFileExInfoStandard: GET_FILEEX_INFO_LEVELS : 0 GetFileExMaxInfoLevel: GET_FILEEX_INFO_LEVELS : 1 diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index cd73f80e6..287ed59e7 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -859,21 +859,21 @@ FKF_CLICKON :: 0x40 NONCLIENTMETRICSW :: struct { cbSize: UINT, - iBorderWidth: i32, - iScrollWidth: i32, - iScrollHeight: i32, - iCaptionWidth: i32, - iCaptionHeight: i32, + iBorderWidth: c_int, + iScrollWidth: c_int, + iScrollHeight: c_int, + iCaptionWidth: c_int, + iCaptionHeight: c_int, lfCaptionFont: LOGFONTW, - iSmCaptionWidth: i32, - iSmCaptionHeight: i32, + iSmCaptionWidth: c_int, + iSmCaptionHeight: c_int, lfSmCaptionFont: LOGFONTW, - iMenuWidth: i32, - iMenuHeight: i32, + iMenuWidth: c_int, + iMenuHeight: c_int, lfMenuFont: LOGFONTW, lfStatusFont: LOGFONTW, lfMessageFont: LOGFONTW, - iPaddedBorderWidth: i32, + iPaddedBorderWidth: c_int, } LPNONCLIENTMETRICSW :: ^NONCLIENTMETRICSW diff --git a/core/sys/windows/util.odin b/core/sys/windows/util.odin index 125038ac4..4729d5c72 100644 --- a/core/sys/windows/util.odin +++ b/core/sys/windows/util.odin @@ -82,14 +82,14 @@ utf8_to_utf16_alloc :: proc(s: string, allocator := context.temp_allocator) -> [ b := transmute([]byte)s cstr := raw_data(b) - n := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, cstr, i32(len(s)), nil, 0) + n := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, cstr, c_int(len(s)), nil, 0) if n == 0 { return nil } text := make([]u16, n+1, allocator) - n1 := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, cstr, i32(len(s)), raw_data(text), n) + n1 := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, cstr, c_int(len(s)), raw_data(text), n) if n1 == 0 { delete(text, allocator) return nil @@ -103,14 +103,14 @@ utf8_to_utf16_alloc :: proc(s: string, allocator := context.temp_allocator) -> [ } utf8_to_utf16_buf :: proc(buf: []u16, s: string) -> []u16 { - n1 := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, raw_data(s), i32(len(s)), nil, 0) + n1 := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, raw_data(s), c_int(len(s)), nil, 0) if n1 == 0 { return nil } else if int(n1) > len(buf) { return nil } - n1 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, raw_data(s), i32(len(s)), raw_data(buf[:]), n1) + n1 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, raw_data(s), c_int(len(s)), raw_data(buf[:]), n1) if n1 == 0 { return nil } else if int(n1) > len(buf) { @@ -143,7 +143,7 @@ wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allo return } - n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, i32(N) if N > 0 else -1, nil, 0, nil, nil) + n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, c_int(N) if N > 0 else -1, nil, 0, nil, nil) if n == 0 { return } @@ -155,7 +155,7 @@ wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allo // will not be null terminated. text := make([]byte, n) or_return - n1 := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, i32(N), raw_data(text), n, nil, nil) + n1 := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, c_int(N), raw_data(text), n, nil, nil) if n1 == 0 { delete(text, allocator) return @@ -171,14 +171,14 @@ wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allo } wstring_to_utf8_buf :: proc(buf: []u8, s: wstring, N := -1) -> (res: string) { - n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, i32(N), nil, 0, nil, nil) + n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, c_int(N), nil, 0, nil, nil) if n == 0 { return } else if int(n) > len(buf) { return } - n2 := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, i32(N), raw_data(buf), n, nil, nil) + n2 := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, c_int(N), raw_data(buf), n, nil, nil) if n2 == 0 { return } else if int(n2) > len(buf) { diff --git a/core/sys/windows/ux_theme.odin b/core/sys/windows/ux_theme.odin index 679d9998f..47a0049b2 100644 --- a/core/sys/windows/ux_theme.odin +++ b/core/sys/windows/ux_theme.odin @@ -3,11 +3,16 @@ package sys_windows foreign import uxtheme "system:UxTheme.lib" -MARGINS :: distinct [4]i32 +MARGINS :: struct { + cxLeftWidth: c_int, + cxRightWidth: c_int, + cyTopHeight: c_int, + cyBottomHeight: c_int, +} PMARGINS :: ^MARGINS @(default_calling_convention="system") foreign uxtheme { - IsThemeActive :: proc() -> BOOL --- - SetWindowTheme :: proc(hWnd: HWND, pszSubAppName, pszSubIdList: LPCWSTR) -> HRESULT --- + IsThemeActive :: proc() -> BOOL --- + SetWindowTheme :: proc(hWnd: HWND, pszSubAppName, pszSubIdList: LPCWSTR) -> HRESULT --- } From 25daf520001d4fbf14d610fa8e0bfb4fd8bdc3b6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 10:13:31 +0000 Subject: [PATCH 055/212] Add support to `raw_union_tag` for integers --- core/fmt/fmt.odin | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index a87529174..72fe6fdf0 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -2131,6 +2131,34 @@ __handle_raw_union_tag :: proc(fi: ^Info, v: any, the_verb: rune, info: runtime. } } } + case reflect.Type_Info_Integer: + tag_value := reflect.as_i64(tag) or_break + + for tag, index in info.tags[:info.field_count] { + rut_list := reflect.struct_tag_lookup(reflect.Struct_Tag(tag), "raw_union_tag") or_continue + + for rut in strings.split_iterator(&rut_list, ",") { + head_tag, match, tail_name := strings.partition(string(rut), "=") + if head_tag != tag_name || match != "=" { + continue + } + + // just ignore the `A.` prefix for `A.B` stuff entirely + if _, _, try_tail_name := strings.partition(string(rut), "."); try_tail_name != "" { + tail_name = try_tail_name + } + + tail_value := strconv.parse_i64(tail_name) or_continue + + if tail_value == tag_value { + io.write_string(fi.writer, "#raw_union(.", &fi.n) + io.write_i64(fi.writer, tag_value, 10, &fi.n) + io.write_string(fi.writer, ") ", &fi.n) + fmt_arg(fi, any{v.data, info.types[index].id}, the_verb) + return true + } + } + } } return false From 49687069ef79aa297ad9bd575241aafe2bf1dea0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 10:14:24 +0000 Subject: [PATCH 056/212] Minor formatting improvements --- core/sys/windows/advapi32.odin | 52 +++++++-------- core/sys/windows/comctl32.odin | 114 ++++++++++++++++----------------- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/core/sys/windows/advapi32.odin b/core/sys/windows/advapi32.odin index cf12a078f..d4b86b875 100644 --- a/core/sys/windows/advapi32.odin +++ b/core/sys/windows/advapi32.odin @@ -303,35 +303,35 @@ TOKEN_USER :: struct { PSID_AND_ATTRIBUTES :: ^SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES :: struct { - Sid: rawptr, + Sid: rawptr, Attributes: ULONG, } PTOKEN_TYPE :: ^TOKEN_TYPE TOKEN_TYPE :: enum { - TokenPrimary = 1, + TokenPrimary = 1, TokenImpersonation = 2, } PTOKEN_STATISTICS :: ^TOKEN_STATISTICS TOKEN_STATISTICS :: struct { - TokenId: LUID, - AuthenticationId: LUID, - ExpirationTime: LARGE_INTEGER, - TokenType: TOKEN_TYPE, + TokenId: LUID, + AuthenticationId: LUID, + ExpirationTime: LARGE_INTEGER, + TokenType: TOKEN_TYPE, ImpersonationLevel: SECURITY_IMPERSONATION_LEVEL, - DynamicCharged: DWORD, - DynamicAvailable: DWORD, - GroupCount: DWORD, - PrivilegeCount: DWORD, - ModifiedId: LUID, + DynamicCharged: DWORD, + DynamicAvailable: DWORD, + GroupCount: DWORD, + PrivilegeCount: DWORD, + ModifiedId: LUID, } TOKEN_SOURCE_LENGTH :: 8 PTOKEN_SOURCE :: ^TOKEN_SOURCE TOKEN_SOURCE :: struct { - SourceName: [TOKEN_SOURCE_LENGTH]CHAR, + SourceName: [TOKEN_SOURCE_LENGTH]CHAR, SourceIdentifier: LUID, } @@ -339,7 +339,7 @@ TOKEN_SOURCE :: struct { PTOKEN_PRIVILEGES :: ^TOKEN_PRIVILEGES TOKEN_PRIVILEGES :: struct { PrivilegeCount: DWORD, - Privileges: [0]LUID_AND_ATTRIBUTES, + Privileges: [0]LUID_AND_ATTRIBUTES, } PTOKEN_PRIMARY_GROUP :: ^TOKEN_PRIMARY_GROUP @@ -354,16 +354,16 @@ TOKEN_OWNER :: struct { PTOKEN_GROUPS_AND_PRIVILEGES :: ^TOKEN_GROUPS_AND_PRIVILEGES TOKEN_GROUPS_AND_PRIVILEGES :: struct { - SidCount: DWORD, - SidLength: DWORD, - Sids: PSID_AND_ATTRIBUTES, - RestrictedSidCount: DWORD, + SidCount: DWORD, + SidLength: DWORD, + Sids: PSID_AND_ATTRIBUTES, + RestrictedSidCount: DWORD, RestrictedSidLength: DWORD, - RestrictedSids: PSID_AND_ATTRIBUTES, - PrivilegeCount: DWORD, - PrivilegeLength: DWORD, - Privileges: PLUID_AND_ATTRIBUTES, - AuthenticationId: LUID, + RestrictedSids: PSID_AND_ATTRIBUTES, + PrivilegeCount: DWORD, + PrivilegeLength: DWORD, + Privileges: PLUID_AND_ATTRIBUTES, + AuthenticationId: LUID, } PTOKEN_DEFAULT_DACL :: ^TOKEN_DEFAULT_DACL @@ -374,8 +374,8 @@ TOKEN_DEFAULT_DACL :: struct { PACL :: ^ACL ACL :: struct { AclRevision: BYTE, - Sbz1: BYTE, - AclSize: WORD, - AceCount: WORD, - Sbz2: WORD, + Sbz1: BYTE, + AclSize: WORD, + AceCount: WORD, + Sbz2: WORD, } diff --git a/core/sys/windows/comctl32.odin b/core/sys/windows/comctl32.odin index c2b4362d9..3418c7649 100644 --- a/core/sys/windows/comctl32.odin +++ b/core/sys/windows/comctl32.odin @@ -5,9 +5,9 @@ foreign import "system:Comctl32.lib" @(default_calling_convention="system") foreign Comctl32 { - InitCommonControlsEx :: proc(picce: ^INITCOMMONCONTROLSEX) -> BOOL --- + InitCommonControlsEx :: proc(picce: ^INITCOMMONCONTROLSEX) -> BOOL --- LoadIconWithScaleDown :: proc(hinst: HINSTANCE, pszName: PCWSTR, cx: c_int, cy: c_int, phico: ^HICON) -> HRESULT --- - SetWindowSubclass :: proc(hwnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, dwRefData: DWORD_PTR) --- + SetWindowSubclass :: proc(hwnd: HWND, pfnSubclass: SUBCLASSPROC, uIdSubclass: UINT_PTR, dwRefData: DWORD_PTR) --- } ICC_LISTVIEW_CLASSES :: 0x00000001 @@ -155,73 +155,73 @@ ILP_NORMAL :: 0 ILP_DOWNLEVEL :: 1 IMAGELISTDRAWPARAMS :: struct { - cbSize: DWORD, - himl: HIMAGELIST, - i: c_int, - hdcDst: HDC, - x: c_int, - y: c_int, - cx: c_int, - cy: c_int, - xBitmap: c_int, - yBitmap: c_int, - rgbBk: COLORREF, - rgbFg: COLORREF, - fStyle: UINT, - dwRop: DWORD, - fState: DWORD, - Frame: DWORD, + cbSize: DWORD, + himl: HIMAGELIST, + i: c_int, + hdcDst: HDC, + x: c_int, + y: c_int, + cx: c_int, + cy: c_int, + xBitmap: c_int, + yBitmap: c_int, + rgbBk: COLORREF, + rgbFg: COLORREF, + fStyle: UINT, + dwRop: DWORD, + fState: DWORD, + Frame: DWORD, crEffect: COLORREF, } LPIMAGELISTDRAWPARAMS :: ^IMAGELISTDRAWPARAMS IMAGEINFO :: struct { hbmImage: HBITMAP, - hbmMask: HBITMAP, - Unused1: c_int, - Unused2: c_int, - rcImage: RECT, + hbmMask: HBITMAP, + Unused1: c_int, + Unused2: c_int, + rcImage: RECT, } LPIMAGEINFO :: ^IMAGEINFO @(default_calling_convention="system") foreign Comctl32 { - ImageList_Create :: proc(cx, cy: c_int, flags: UINT, cInitial, cGrow: c_int) -> HIMAGELIST --- - ImageList_Destroy :: proc(himl: HIMAGELIST) -> BOOL --- - ImageList_GetImageCount :: proc(himl: HIMAGELIST) -> c_int --- - ImageList_SetImageCount :: proc(himl: HIMAGELIST, uNewCount: UINT) -> BOOL --- - ImageList_Add :: proc(himl: HIMAGELIST, hbmImage, hbmMask: HBITMAP) -> c_int --- - ImageList_ReplaceIcon :: proc(himl: HIMAGELIST, i: c_int, hicon: HICON) -> c_int --- - ImageList_SetBkColor :: proc(himl: HIMAGELIST, clrBk: COLORREF) -> COLORREF --- - ImageList_GetBkColor :: proc(himl: HIMAGELIST) -> COLORREF --- - ImageList_SetOverlayImage :: proc(himl: HIMAGELIST, iImage: c_int, iOverlay: c_int) -> BOOL --- - ImageList_Draw :: proc(himl: HIMAGELIST, i: c_int, hdcDst: HDC, x, y: c_int, fStyle: UINT) -> BOOL --- - ImageList_Replace :: proc(himl: HIMAGELIST, i: c_int, hbmImage, hbmMask: HBITMAP) -> BOOL --- - ImageList_AddMasked :: proc(himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF) -> c_int --- - ImageList_DrawEx :: proc(himl: HIMAGELIST, i: c_int, hdcDst: HDC, x, y, dx, dy: c_int, rgbBk, rgbFg: COLORREF, fStyle: UINT) -> BOOL --- - ImageList_DrawIndirect :: proc(pimldp: ^IMAGELISTDRAWPARAMS) -> BOOL --- - ImageList_Remove :: proc(himl: HIMAGELIST, i: c_int) -> BOOL --- - ImageList_GetIcon :: proc(himl: HIMAGELIST, i: c_int, flags: UINT) -> HICON --- - ImageList_LoadImageW :: proc(hi: HINSTANCE, lpbmp: LPCWSTR, cx, cgrow: c_int, crMask: COLORREF, uType, uFlags: UINT) -> HIMAGELIST --- - ImageList_Copy :: proc(himlDst: HIMAGELIST, iDst: c_int, himlSrc: HIMAGELIST, iSrc: c_int, uFlags: UINT) -> BOOL --- - ImageList_BeginDrag :: proc(himlTrack: HIMAGELIST, iTrack, dxHotspot, dyHotspot: c_int) -> BOOL --- - ImageList_EndDrag :: proc() --- - ImageList_DragEnter :: proc(hwndLock: HWND, x, y: c_int) -> BOOL --- - ImageList_DragLeave :: proc(hwndLock: HWND) -> BOOL --- - ImageList_DragMove :: proc(x, y: c_int) -> BOOL --- + ImageList_Create :: proc(cx, cy: c_int, flags: UINT, cInitial, cGrow: c_int) -> HIMAGELIST --- + ImageList_Destroy :: proc(himl: HIMAGELIST) -> BOOL --- + ImageList_GetImageCount :: proc(himl: HIMAGELIST) -> c_int --- + ImageList_SetImageCount :: proc(himl: HIMAGELIST, uNewCount: UINT) -> BOOL --- + ImageList_Add :: proc(himl: HIMAGELIST, hbmImage, hbmMask: HBITMAP) -> c_int --- + ImageList_ReplaceIcon :: proc(himl: HIMAGELIST, i: c_int, hicon: HICON) -> c_int --- + ImageList_SetBkColor :: proc(himl: HIMAGELIST, clrBk: COLORREF) -> COLORREF --- + ImageList_GetBkColor :: proc(himl: HIMAGELIST) -> COLORREF --- + ImageList_SetOverlayImage :: proc(himl: HIMAGELIST, iImage: c_int, iOverlay: c_int) -> BOOL --- + ImageList_Draw :: proc(himl: HIMAGELIST, i: c_int, hdcDst: HDC, x, y: c_int, fStyle: UINT) -> BOOL --- + ImageList_Replace :: proc(himl: HIMAGELIST, i: c_int, hbmImage, hbmMask: HBITMAP) -> BOOL --- + ImageList_AddMasked :: proc(himl: HIMAGELIST, hbmImage: HBITMAP, crMask: COLORREF) -> c_int --- + ImageList_DrawEx :: proc(himl: HIMAGELIST, i: c_int, hdcDst: HDC, x, y, dx, dy: c_int, rgbBk, rgbFg: COLORREF, fStyle: UINT) -> BOOL --- + ImageList_DrawIndirect :: proc(pimldp: ^IMAGELISTDRAWPARAMS) -> BOOL --- + ImageList_Remove :: proc(himl: HIMAGELIST, i: c_int) -> BOOL --- + ImageList_GetIcon :: proc(himl: HIMAGELIST, i: c_int, flags: UINT) -> HICON --- + ImageList_LoadImageW :: proc(hi: HINSTANCE, lpbmp: LPCWSTR, cx, cgrow: c_int, crMask: COLORREF, uType, uFlags: UINT) -> HIMAGELIST --- + ImageList_Copy :: proc(himlDst: HIMAGELIST, iDst: c_int, himlSrc: HIMAGELIST, iSrc: c_int, uFlags: UINT) -> BOOL --- + ImageList_BeginDrag :: proc(himlTrack: HIMAGELIST, iTrack, dxHotspot, dyHotspot: c_int) -> BOOL --- + ImageList_EndDrag :: proc() --- + ImageList_DragEnter :: proc(hwndLock: HWND, x, y: c_int) -> BOOL --- + ImageList_DragLeave :: proc(hwndLock: HWND) -> BOOL --- + ImageList_DragMove :: proc(x, y: c_int) -> BOOL --- ImageList_SetDragCursorImage :: proc(himlDrag: HIMAGELIST, iDrag, dxHotspot, dyHotspot: c_int) -> BOOL --- - ImageList_DragShowNolock :: proc(fShow: BOOL) -> BOOL --- - ImageList_GetDragImage :: proc(ppt, pptHotspot: ^POINT) -> HIMAGELIST --- - ImageList_Read :: proc(pstm: ^IStream) -> HIMAGELIST --- - ImageList_Write :: proc(himl: HIMAGELIST, pstm: ^IStream) -> BOOL --- - ImageList_ReadEx :: proc(dwFlags: DWORD, pstm: ^IStream, riid: REFIID, ppv: PVOID) -> HRESULT --- - ImageList_WriteEx :: proc(himl: HIMAGELIST, dwFlags: DWORD, pstm: ^IStream) -> HRESULT --- - ImageList_GetIconSize :: proc(himl: HIMAGELIST, cx, cy: ^c_int) -> BOOL --- - ImageList_SetIconSize :: proc(himl: HIMAGELIST, cx, cy: c_int) -> BOOL --- - ImageList_GetImageInfo :: proc(himl: HIMAGELIST, i: c_int, pImageInfo: ^IMAGEINFO) -> BOOL --- - ImageList_Merge :: proc(himl1: HIMAGELIST, i1: c_int, himl2: HIMAGELIST, i2: c_int, dx, dy: c_int) -> HIMAGELIST --- - ImageList_Duplicate :: proc(himl: HIMAGELIST) -> HIMAGELIST --- - HIMAGELIST_QueryInterface :: proc(himl: HIMAGELIST, riid: REFIID, ppv: rawptr) -> HRESULT --- + ImageList_DragShowNolock :: proc(fShow: BOOL) -> BOOL --- + ImageList_GetDragImage :: proc(ppt, pptHotspot: ^POINT) -> HIMAGELIST --- + ImageList_Read :: proc(pstm: ^IStream) -> HIMAGELIST --- + ImageList_Write :: proc(himl: HIMAGELIST, pstm: ^IStream) -> BOOL --- + ImageList_ReadEx :: proc(dwFlags: DWORD, pstm: ^IStream, riid: REFIID, ppv: PVOID) -> HRESULT --- + ImageList_WriteEx :: proc(himl: HIMAGELIST, dwFlags: DWORD, pstm: ^IStream) -> HRESULT --- + ImageList_GetIconSize :: proc(himl: HIMAGELIST, cx, cy: ^c_int) -> BOOL --- + ImageList_SetIconSize :: proc(himl: HIMAGELIST, cx, cy: c_int) -> BOOL --- + ImageList_GetImageInfo :: proc(himl: HIMAGELIST, i: c_int, pImageInfo: ^IMAGEINFO) -> BOOL --- + ImageList_Merge :: proc(himl1: HIMAGELIST, i1: c_int, himl2: HIMAGELIST, i2: c_int, dx, dy: c_int) -> HIMAGELIST --- + ImageList_Duplicate :: proc(himl: HIMAGELIST) -> HIMAGELIST --- + HIMAGELIST_QueryInterface :: proc(himl: HIMAGELIST, riid: REFIID, ppv: rawptr) -> HRESULT --- } ImageList_AddIcon :: #force_inline proc "system" (himl: HIMAGELIST, hicon: HICON) -> c_int { From c49a645d34483ef29eb2f9d583154169146e7317 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 10:14:39 +0000 Subject: [PATCH 057/212] Add `raw_union_tag` support to `MINIDUMP_CALLBACK_INPUT` --- core/sys/windows/dbghelp.odin | 57 +++++++++++++++++++++++++++-------- 1 file changed, 44 insertions(+), 13 deletions(-) diff --git a/core/sys/windows/dbghelp.odin b/core/sys/windows/dbghelp.odin index e32b4c874..4904c5fb4 100644 --- a/core/sys/windows/dbghelp.odin +++ b/core/sys/windows/dbghelp.odin @@ -55,23 +55,54 @@ MINIDUMP_CALLBACK_INFORMATION :: struct { CallbackParam: PVOID, } +MINIDUMP_CALLBACK_TYPE :: enum ULONG { + ModuleCallback, + ThreadCallback, + ThreadExCallback, + IncludeThreadCallback, + IncludeModuleCallback, + MemoryCallback, + CancelCallback, + WriteKernelMinidumpCallback, + KernelMinidumpStatusCallback, + RemoveMemoryCallback, + IncludeVmRegionCallback, + IoStartCallback, + IoWriteAllCallback, + IoFinishCallback, + ReadMemoryFailureCallback, + SecondaryFlagsCallback, + IsProcessSnapshotCallback, + VmStartCallback, + VmQueryCallback, + VmPreReadCallback, + VmPostReadCallback, +} + +MINIDUMP_SECONDARY_FLAG :: enum ULONG { + WithoutPowerInfo = 0, +} +MINIDUMP_SECONDARY_FLAGS :: distinct bit_set[MINIDUMP_SECONDARY_FLAG; ULONG] +MiniSecondaryWithoutPowerInfo :: MINIDUMP_SECONDARY_FLAGS{.WithoutPowerInfo} +MiniSecondaryValidFlags :: MINIDUMP_SECONDARY_FLAGS{.WithoutPowerInfo} + MINIDUMP_CALLBACK_INPUT :: struct { ProcessId: ULONG, ProcessHandle: HANDLE, - CallbackType: ULONG, + CallbackType: MINIDUMP_CALLBACK_TYPE, using _: struct #raw_union { - Status: HRESULT, - Thread: MINIDUMP_THREAD_CALLBACK, - ThreadEx: MINIDUMP_THREAD_EX_CALLBACK, - Module: MINIDUMP_MODULE_CALLBACK, - IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK, - IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK, - Io: MINIDUMP_IO_CALLBACK, - ReadMemoryFailure: MINIDUMP_READ_MEMORY_FAILURE_CALLBACK, - SecondaryFlags: ULONG, - VmQuery: MINIDUMP_VM_QUERY_CALLBACK, - VmPreRead: MINIDUMP_VM_PRE_READ_CALLBACK, - VmPostRead: MINIDUMP_VM_POST_READ_CALLBACK, + Status: HRESULT `raw_union_tag:"KernelMinidumpStatusCallback"`, + Thread: MINIDUMP_THREAD_CALLBACK `raw_union_tag:"ThreadCallback"`, + ThreadEx: MINIDUMP_THREAD_EX_CALLBACK `raw_union_tag:"ThreadExCallback"`, + Module: MINIDUMP_MODULE_CALLBACK `raw_union_tag:"ModuleCallback"`, + IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK `raw_union_tag:"IncludeThreadCallback"`, + IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK `raw_union_tag:"IncludeModuleCallback"`, + Io: MINIDUMP_IO_CALLBACK `raw_union_tag:"IoStartCallback,IoWriteAllCallback,IoFinishCallback"`, + ReadMemoryFailure: MINIDUMP_READ_MEMORY_FAILURE_CALLBACK `raw_union_tag:"ReadMemoryFailureCallback"`, + SecondaryFlags: MINIDUMP_SECONDARY_FLAGS `raw_union_tag:"SecondaryFlagsCallback"`, + VmQuery: MINIDUMP_VM_QUERY_CALLBACK `raw_union_tag:"VmQueryCallback"`, + VmPreRead: MINIDUMP_VM_PRE_READ_CALLBACK `raw_union_tag:"VmPreReadCallback"`, + VmPostRead: MINIDUMP_VM_POST_READ_CALLBACK `raw_union_tag:"VmPostReadCallback"`, }, } From bfe75d5c2cfce94b989431ddb2b186a0d877ffe9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 10:19:23 +0000 Subject: [PATCH 058/212] Add boolean support for `raw_union_tag` --- core/fmt/fmt.odin | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 72fe6fdf0..04211b8a9 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -2159,6 +2159,35 @@ __handle_raw_union_tag :: proc(fi: ^Info, v: any, the_verb: rune, info: runtime. } } } + + case reflect.Type_Info_Boolean: + tag_value := reflect.as_bool(tag) or_break + + for tag, index in info.tags[:info.field_count] { + rut_list := reflect.struct_tag_lookup(reflect.Struct_Tag(tag), "raw_union_tag") or_continue + + for rut in strings.split_iterator(&rut_list, ",") { + head_tag, match, tail_name := strings.partition(string(rut), "=") + if head_tag != tag_name || match != "=" { + continue + } + + // just ignore the `A.` prefix for `A.B` stuff entirely + if _, _, try_tail_name := strings.partition(string(rut), "."); try_tail_name != "" { + tail_name = try_tail_name + } + + tail_value := strconv.parse_bool(tail_name) or_continue + + if tail_value == tag_value { + io.write_string(fi.writer, "#raw_union(.", &fi.n) + io.write_string(fi.writer, "true" if tag_value else "false", &fi.n) + io.write_string(fi.writer, ") ", &fi.n) + fmt_arg(fi, any{v.data, info.types[index].id}, the_verb) + return true + } + } + } } return false From b86627ba3725b5cdf4b7ac0a4cb7f17f2eab08fb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 10:39:46 +0000 Subject: [PATCH 059/212] Improve formatting and `#raw_union` logic in `core:sys/windows` --- core/sys/windows/dnsapi.odin | 4 +- core/sys/windows/dwmapi.odin | 8 +- core/sys/windows/gdi32.odin | 106 +-- core/sys/windows/hidpi.odin | 272 ++++---- core/sys/windows/hidusage.odin | 1076 +++++++++++++++---------------- core/sys/windows/icu.odin | 2 +- core/sys/windows/ip_helper.odin | 4 +- core/sys/windows/kernel32.odin | 661 ++++++++++--------- 8 files changed, 1065 insertions(+), 1068 deletions(-) diff --git a/core/sys/windows/dnsapi.odin b/core/sys/windows/dnsapi.odin index 728813696..73e565118 100644 --- a/core/sys/windows/dnsapi.odin +++ b/core/sys/windows/dnsapi.odin @@ -5,6 +5,6 @@ foreign import "system:Dnsapi.lib" @(default_calling_convention="system") foreign Dnsapi { - DnsQuery_UTF8 :: proc(name: cstring, type: u16, options: DNS_QUERY_OPTIONS, extra: PVOID, results: ^^DNS_RECORD, reserved: PVOID) -> DNS_STATUS --- - DnsRecordListFree :: proc(list: ^DNS_RECORD, options: DWORD) --- + DnsQuery_UTF8 :: proc(name: cstring, type: u16, options: DNS_QUERY_OPTIONS, extra: PVOID, results: ^^DNS_RECORD, reserved: PVOID) -> DNS_STATUS --- + DnsRecordListFree :: proc(list: ^DNS_RECORD, options: DWORD) --- } diff --git a/core/sys/windows/dwmapi.odin b/core/sys/windows/dwmapi.odin index e86730660..0980c2e94 100644 --- a/core/sys/windows/dwmapi.odin +++ b/core/sys/windows/dwmapi.odin @@ -47,9 +47,9 @@ DWM_WINDOW_CORNER_PREFERENCE :: enum c_int { @(default_calling_convention="system") foreign dwmapi { - DwmFlush :: proc() -> HRESULT --- - DwmIsCompositionEnabled :: proc(pfEnabled: ^BOOL) -> HRESULT --- + DwmFlush :: proc() -> HRESULT --- + DwmIsCompositionEnabled :: proc(pfEnabled: ^BOOL) -> HRESULT --- DwmExtendFrameIntoClientArea :: proc(hWnd: HWND, pMarInset: PMARGINS) -> HRESULT --- - DwmGetWindowAttribute :: proc(hWnd: HWND, dwAttribute: DWORD, pvAttribute: PVOID, cbAttribute: DWORD) -> HRESULT --- - DwmSetWindowAttribute :: proc(hWnd: HWND, dwAttribute: DWORD, pvAttribute: LPCVOID, cbAttribute: DWORD) -> HRESULT --- + DwmGetWindowAttribute :: proc(hWnd: HWND, dwAttribute: DWORD, pvAttribute: PVOID, cbAttribute: DWORD) -> HRESULT --- + DwmSetWindowAttribute :: proc(hWnd: HWND, dwAttribute: DWORD, pvAttribute: LPCVOID, cbAttribute: DWORD) -> HRESULT --- } diff --git a/core/sys/windows/gdi32.odin b/core/sys/windows/gdi32.odin index 1a23b4c8f..756ec5011 100644 --- a/core/sys/windows/gdi32.odin +++ b/core/sys/windows/gdi32.odin @@ -7,85 +7,88 @@ foreign import gdi32 "system:Gdi32.lib" @(default_calling_convention="system") foreign gdi32 { - GetDeviceCaps :: proc(hdc: HDC, index: INT) -> INT --- + GetDeviceCaps :: proc(hdc: HDC, index: INT) -> INT --- GetStockObject :: proc(i: INT) -> HGDIOBJ --- - SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ --- - DeleteObject :: proc(ho: HGDIOBJ) -> BOOL --- - SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- - SetBkMode :: proc(hdc: HDC, mode: BKMODE) -> INT --- + SelectObject :: proc(hdc: HDC, h: HGDIOBJ) -> HGDIOBJ --- + DeleteObject :: proc(ho: HGDIOBJ) -> BOOL --- + SetBkColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- + SetBkMode :: proc(hdc: HDC, mode: BKMODE) -> INT --- CreateCompatibleDC :: proc(hdc: HDC) -> HDC --- - DeleteDC :: proc(hdc: HDC) -> BOOL --- - CancelDC :: proc(hdc: HDC) -> BOOL --- - SaveDC :: proc(hdc: HDC) -> INT --- - RestoreDC :: proc(hdc: HDC, nSavedDC: INT) -> BOOL --- + DeleteDC :: proc(hdc: HDC) -> BOOL --- + CancelDC :: proc(hdc: HDC) -> BOOL --- + SaveDC :: proc(hdc: HDC) -> INT --- + RestoreDC :: proc(hdc: HDC, nSavedDC: INT) -> BOOL --- CreateDIBPatternBrush :: proc(h: HGLOBAL, iUsage: UINT) -> HBRUSH --- - CreateDIBitmap :: proc(hdc: HDC, pbmih: ^BITMAPINFOHEADER, flInit: DWORD, pjBits: VOID, pbmi: ^BITMAPINFO, iUsage: UINT) -> HBITMAP --- - CreateDIBSection :: proc(hdc: HDC, pbmi: ^BITMAPINFO, usage: UINT, ppvBits: ^^VOID, hSection: HANDLE, offset: DWORD) -> HBITMAP --- - StretchDIBits :: proc(hdc: HDC, xDest, yDest, DestWidth, DestHeight, xSrc, ySrc, SrcWidth, SrcHeight: INT, lpBits: VOID, lpbmi: ^BITMAPINFO, iUsage: UINT, rop: DWORD) -> INT --- - StretchBlt :: proc(hdcDest: HDC, xDest, yDest, wDest, hDest: INT, hdcSrc: HDC, xSrc, ySrc, wSrc, hSrc: INT, rop: DWORD) -> BOOL --- + CreateDIBitmap :: proc(hdc: HDC, pbmih: ^BITMAPINFOHEADER, flInit: DWORD, pjBits: VOID, pbmi: ^BITMAPINFO, iUsage: UINT) -> HBITMAP --- + CreateDIBSection :: proc(hdc: HDC, pbmi: ^BITMAPINFO, usage: UINT, ppvBits: ^^VOID, hSection: HANDLE, offset: DWORD) -> HBITMAP --- + StretchDIBits :: proc(hdc: HDC, xDest, yDest, DestWidth, DestHeight, xSrc, ySrc, SrcWidth, SrcHeight: INT, lpBits: VOID, lpbmi: ^BITMAPINFO, iUsage: UINT, rop: DWORD) -> INT --- + StretchBlt :: proc(hdcDest: HDC, xDest, yDest, wDest, hDest: INT, hdcSrc: HDC, xSrc, ySrc, wSrc, hSrc: INT, rop: DWORD) -> BOOL --- - SetPixelFormat :: proc(hdc: HDC, format: INT, ppfd: ^PIXELFORMATDESCRIPTOR) -> BOOL --- - ChoosePixelFormat :: proc(hdc: HDC, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT --- + SetPixelFormat :: proc(hdc: HDC, format: INT, ppfd: ^PIXELFORMATDESCRIPTOR) -> BOOL --- + ChoosePixelFormat :: proc(hdc: HDC, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT --- DescribePixelFormat :: proc(hdc: HDC, iPixelFormat: INT, nBytes: UINT, ppfd: ^PIXELFORMATDESCRIPTOR) -> INT --- - SwapBuffers :: proc(hdc: HDC) -> BOOL --- + SwapBuffers :: proc(hdc: HDC) -> BOOL --- SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- GetDCBrushColor :: proc(hdc: HDC) -> COLORREF --- - PatBlt :: proc(hdc: HDC, x, y, w, h: INT, rop: DWORD) -> BOOL --- - Rectangle :: proc(hdc: HDC, left, top, right, bottom: INT) -> BOOL --- + PatBlt :: proc(hdc: HDC, x, y, w, h: INT, rop: DWORD) -> BOOL --- + Rectangle :: proc(hdc: HDC, left, top, right, bottom: INT) -> BOOL --- - CreateFontW :: proc(cHeight, cWidth, cEscapement, cOrientation, cWeight: INT, bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD, iClipPrecision, iQuality, iPitchAndFamily: DWORD, pszFaceName: LPCWSTR) -> HFONT --- - CreateFontIndirectW :: proc(lplf: ^LOGFONTW) -> HFONT --- + CreateFontW :: proc(cHeight, cWidth, cEscapement, cOrientation, cWeight: INT, bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD, iClipPrecision, iQuality, iPitchAndFamily: DWORD, pszFaceName: LPCWSTR) -> HFONT --- + CreateFontIndirectW :: proc(lplf: ^LOGFONTW) -> HFONT --- CreateFontIndirectExW :: proc(unnamedParam1: ^ENUMLOGFONTEXDVW) -> HFONT --- - AddFontResourceW :: proc(unnamedParam1: LPCWSTR) -> INT --- - AddFontResourceExW :: proc(name: LPCWSTR, fl: DWORD, res: PVOID) -> INT --- - AddFontMemResourceEx :: proc(pFileView: PVOID, cjSize: DWORD, pvResrved: PVOID, pNumFonts: ^DWORD) -> HANDLE --- - EnumFontsW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT --- - EnumFontFamiliesW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT --- - EnumFontFamiliesExW :: proc(hdc: HDC, lpLogfont: LPLOGFONTW, lpProc: FONTENUMPROCW, lParam: LPARAM, dwFlags: DWORD) -> INT --- + AddFontResourceW :: proc(unnamedParam1: LPCWSTR) -> INT --- + AddFontResourceExW :: proc(name: LPCWSTR, fl: DWORD, res: PVOID) -> INT --- + AddFontMemResourceEx :: proc(pFileView: PVOID, cjSize: DWORD, pvResrved: PVOID, pNumFonts: ^DWORD) -> HANDLE --- + EnumFontsW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT --- + EnumFontFamiliesW :: proc(hdc: HDC, lpLogfont: LPCWSTR, lpProc: FONTENUMPROCW, lParam: LPARAM) -> INT --- + EnumFontFamiliesExW :: proc(hdc: HDC, lpLogfont: LPLOGFONTW, lpProc: FONTENUMPROCW, lParam: LPARAM, dwFlags: DWORD) -> INT --- - TextOutW :: proc(hdc: HDC, x, y: INT, lpString: LPCWSTR, c: INT) -> BOOL --- + TextOutW :: proc(hdc: HDC, x, y: INT, lpString: LPCWSTR, c: INT) -> BOOL --- GetTextExtentPoint32W :: proc(hdc: HDC, lpString: LPCWSTR, c: INT, psizl: LPSIZE) -> BOOL --- - GetTextMetricsW :: proc(hdc: HDC, lptm: LPTEXTMETRICW) -> BOOL --- + GetTextMetricsW :: proc(hdc: HDC, lptm: LPTEXTMETRICW) -> BOOL --- CreateSolidBrush :: proc(color: COLORREF) -> HBRUSH --- - GetObjectW :: proc(h: HANDLE, c: INT, pv: LPVOID) -> c_int --- + GetObjectW :: proc(h: HANDLE, c: INT, pv: LPVOID) -> c_int --- CreateCompatibleBitmap :: proc(hdc: HDC, cx, cy: INT) -> HBITMAP --- - BitBlt :: proc(hdc: HDC, x, y, cx, cy: INT, hdcSrc: HDC, x1, y1: INT, rop: DWORD) -> BOOL --- - GetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start, cLines: UINT, lpvBits: LPVOID, lpbmi: ^BITMAPINFO, usage: UINT) -> INT --- - SetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpBits: VOID, lpbmi: ^BITMAPINFO, ColorUse: UINT) -> INT --- - SetDIBColorTable :: proc(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: ^RGBQUAD) -> UINT --- - GetDIBColorTable :: proc(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: ^RGBQUAD) -> UINT --- + BitBlt :: proc(hdc: HDC, x, y, cx, cy: INT, hdcSrc: HDC, x1, y1: INT, rop: DWORD) -> BOOL --- + GetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start, cLines: UINT, lpvBits: LPVOID, lpbmi: ^BITMAPINFO, usage: UINT) -> INT --- + SetDIBits :: proc(hdc: HDC, hbm: HBITMAP, start: UINT, cLines: UINT, lpBits: VOID, lpbmi: ^BITMAPINFO, ColorUse: UINT) -> INT --- + SetDIBColorTable :: proc(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: ^RGBQUAD) -> UINT --- + GetDIBColorTable :: proc(hdc: HDC, iStart: UINT, cEntries: UINT, prgbq: ^RGBQUAD) -> UINT --- - CreatePen :: proc(iStyle, cWidth: INT, color: COLORREF) -> HPEN --- - ExtCreatePen :: proc(iPenStyle, cWidth: DWORD, plbrush: ^LOGBRUSH, cStyle: DWORD, pstyle: ^DWORD) -> HPEN --- + CreatePen :: proc(iStyle, cWidth: INT, color: COLORREF) -> HPEN --- + ExtCreatePen :: proc(iPenStyle, cWidth: DWORD, plbrush: ^LOGBRUSH, cStyle: DWORD, pstyle: ^DWORD) -> HPEN --- SetDCPenColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- GetDCPenColor :: proc(hdc: HDC) -> COLORREF --- - CreatePalette :: proc(plpal: ^LOGPALETTE) -> HPALETTE --- - SelectPalette :: proc(hdc: HDC, hPal: HPALETTE, bForceBkgd: BOOL) -> HPALETTE --- + CreatePalette :: proc(plpal: ^LOGPALETTE) -> HPALETTE --- + SelectPalette :: proc(hdc: HDC, hPal: HPALETTE, bForceBkgd: BOOL) -> HPALETTE --- RealizePalette :: proc(hdc: HDC) -> UINT --- SetTextColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- - RoundRect :: proc(hdc: HDC, left: INT, top: INT, right: INT, bottom: INT, width: INT, height: INT) -> BOOL --- - SetPixel :: proc(hdc: HDC, x: INT, y: INT, color: COLORREF) -> COLORREF --- + RoundRect :: proc(hdc: HDC, left: INT, top: INT, right: INT, bottom: INT, width: INT, height: INT) -> BOOL --- + SetPixel :: proc(hdc: HDC, x: INT, y: INT, color: COLORREF) -> COLORREF --- GdiTransparentBlt :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, crTransparent: UINT) -> BOOL --- - GdiGradientFill :: proc(hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nCount: ULONG, ulMode: ULONG) -> BOOL --- - GdiAlphaBlend :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, ftn: BLENDFUNCTION) -> BOOL --- + GdiGradientFill :: proc(hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nCount: ULONG, ulMode: ULONG) -> BOOL --- + GdiAlphaBlend :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, ftn: BLENDFUNCTION) -> BOOL --- } +@(require_results) RGB :: #force_inline proc "contextless" (#any_int r, g, b: int) -> COLORREF { return COLORREF(DWORD(BYTE(r)) | (DWORD(BYTE(g)) << 8) | (DWORD(BYTE(b)) << 16)) } +@(require_results) PALETTERGB :: #force_inline proc "contextless" (#any_int r, g, b: int) -> COLORREF { return 0x02000000 | RGB(r, g, b) } +@(require_results) PALETTEINDEX :: #force_inline proc "contextless" (#any_int i: int) -> COLORREF { return COLORREF(DWORD(0x01000000) | DWORD(WORD(i))) } @@ -154,17 +157,21 @@ ICONINFOEXW :: struct { } PICONINFOEXW :: ^ICONINFOEXW -AC_SRC_OVER :: 0x00 +AC_SRC_OVER :: 0x00 AC_SRC_ALPHA :: 0x01 TransparentBlt :: GdiTransparentBlt -GradientFill :: GdiGradientFill -AlphaBlend :: GdiAlphaBlend +GradientFill :: GdiGradientFill +AlphaBlend :: GdiAlphaBlend COLOR16 :: USHORT TRIVERTEX :: struct { - x, y: LONG, - Red, Green, Blue, Alpha: COLOR16, + x: LONG, + y: LONG, + Red: COLOR16, + Green: COLOR16, + Blue: COLOR16, + Alpha: COLOR16, } PTRIVERTEX :: ^TRIVERTEX @@ -179,7 +186,10 @@ GRADIENT_RECT :: struct { PGRADIENT_RECT :: ^GRADIENT_RECT BLENDFUNCTION :: struct { - BlendOp, BlendFlags, SourceConstantAlpha, AlphaFormat: BYTE, + BlendOp: BYTE, + BlendFlags: BYTE, + SourceConstantAlpha: BYTE, + AlphaFormat: BYTE, } GRADIENT_FILL_RECT_H : ULONG : 0x00000000 diff --git a/core/sys/windows/hidpi.odin b/core/sys/windows/hidpi.odin index 6f1e888cc..2cf2b2f34 100644 --- a/core/sys/windows/hidpi.odin +++ b/core/sys/windows/hidpi.odin @@ -2,149 +2,149 @@ package sys_windows HIDD_CONFIGURATION :: struct { - cookie: PVOID, - size: ULONG, + cookie: PVOID, + size: ULONG, RingBufferSize: ULONG, } PHIDD_CONFIGURATION :: ^HIDD_CONFIGURATION HIDD_ATTRIBUTES :: struct { - Size: ULONG, - VendorID: USHORT, - ProductID: USHORT, + Size: ULONG, + VendorID: USHORT, + ProductID: USHORT, VersionNumber: USHORT, } PHIDD_ATTRIBUTES :: ^HIDD_ATTRIBUTES HIDP_CAPS :: struct { - Usage: USAGE, - UsagePage: USAGE, - InputReportByteLength: USHORT, - OutputReportByteLength: USHORT, - FeatureReportByteLength: USHORT, - Reserved: [17]USHORT, + Usage: USAGE, + UsagePage: USAGE, + InputReportByteLength: USHORT, + OutputReportByteLength: USHORT, + FeatureReportByteLength: USHORT, + Reserved: [17]USHORT, NumberLinkCollectionNodes: USHORT, - NumberInputButtonCaps: USHORT, - NumberInputValueCaps: USHORT, - NumberInputDataIndices: USHORT, - NumberOutputButtonCaps: USHORT, - NumberOutputValueCaps: USHORT, - NumberOutputDataIndices: USHORT, - NumberFeatureButtonCaps: USHORT, - NumberFeatureValueCaps: USHORT, - NumberFeatureDataIndices: USHORT, + NumberInputButtonCaps: USHORT, + NumberInputValueCaps: USHORT, + NumberInputDataIndices: USHORT, + NumberOutputButtonCaps: USHORT, + NumberOutputValueCaps: USHORT, + NumberOutputDataIndices: USHORT, + NumberFeatureButtonCaps: USHORT, + NumberFeatureValueCaps: USHORT, + NumberFeatureDataIndices: USHORT, } PHIDP_CAPS :: ^HIDP_CAPS HIDP_BUTTON_CAPS :: struct { - UsagePage: USAGE, - ReportID: UCHAR, - IsAlias: BOOLEAN, - BitField: USHORT, - LinkCollection: USHORT, - LinkUsage: USAGE, - LinkUsagePage: USAGE, - IsRange: BOOLEAN, - IsStringRange: BOOLEAN, + UsagePage: USAGE, + ReportID: UCHAR, + IsAlias: BOOLEAN, + BitField: USHORT, + LinkCollection: USHORT, + LinkUsage: USAGE, + LinkUsagePage: USAGE, + IsRange: BOOLEAN, + IsStringRange: BOOLEAN, IsDesignatorRange: BOOLEAN, - IsAbsolute: BOOLEAN, - ReportCount: USHORT, - Reserved2: USHORT, - Reserved: [9]ULONG, + IsAbsolute: BOOLEAN, + ReportCount: USHORT, + Reserved2: USHORT, + Reserved: [9]ULONG, using _: struct #raw_union { Range: struct { - UsageMin: USAGE, - UsageMax: USAGE, - StringMin: USHORT, - StringMax: USHORT, + UsageMin: USAGE, + UsageMax: USAGE, + StringMin: USHORT, + StringMax: USHORT, DesignatorMin: USHORT, DesignatorMax: USHORT, - DataIndexMin: USHORT, - DataIndexMax: USHORT, - }, + DataIndexMin: USHORT, + DataIndexMax: USHORT, + } `raw_union_tag:"IsRange=true"`, NotRange: struct { - Usage: USAGE, - Reserved1: USAGE, - StringIndex: USHORT, - Reserved2: USHORT, + Usage: USAGE, + Reserved1: USAGE, + StringIndex: USHORT, + Reserved2: USHORT, DesignatorIndex: USHORT, - Reserved3: USHORT, - DataIndex: USHORT, - Reserved4: USHORT, - }, + Reserved3: USHORT, + DataIndex: USHORT, + Reserved4: USHORT, + } `raw_union_tag:"IsRange=false"`, }, } PHIDP_BUTTON_CAPS :: ^HIDP_BUTTON_CAPS HIDP_VALUE_CAPS :: struct { - UsagePage: USAGE, - ReportID: UCHAR, - IsAlias: BOOLEAN, - BitField: USHORT, - LinkCollection: USHORT, - LinkUsage: USAGE, - LinkUsagePage: USAGE, - IsRange: BOOLEAN, - IsStringRange: BOOLEAN, + UsagePage: USAGE, + ReportID: UCHAR, + IsAlias: BOOLEAN, + BitField: USHORT, + LinkCollection: USHORT, + LinkUsage: USAGE, + LinkUsagePage: USAGE, + IsRange: BOOLEAN, + IsStringRange: BOOLEAN, IsDesignatorRange: BOOLEAN, - IsAbsolute: BOOLEAN, - HasNull: BOOLEAN, - Reserved: UCHAR, - BitSize: USHORT, - ReportCount: USHORT, - Reserved2: [5]USHORT, - UnitsExp: ULONG, - Units: ULONG, - LogicalMin: LONG, - LogicalMax: LONG, - PhysicalMin: LONG, - PhysicalMax: LONG, + IsAbsolute: BOOLEAN, + HasNull: BOOLEAN, + Reserved: UCHAR, + BitSize: USHORT, + ReportCount: USHORT, + Reserved2: [5]USHORT, + UnitsExp: ULONG, + Units: ULONG, + LogicalMin: LONG, + LogicalMax: LONG, + PhysicalMin: LONG, + PhysicalMax: LONG, using _: struct #raw_union { Range: struct { - UsageMin: USAGE, - UsageMax: USAGE, - StringMin: USHORT, - StringMax: USHORT, + UsageMin: USAGE, + UsageMax: USAGE, + StringMin: USHORT, + StringMax: USHORT, DesignatorMin: USHORT, DesignatorMax: USHORT, - DataIndexMin: USHORT, - DataIndexMax: USHORT, - }, + DataIndexMin: USHORT, + DataIndexMax: USHORT, + } `raw_union_tag:"IsRange=true"`, NotRange: struct { - Usage: USAGE, - Reserved1: USAGE, - StringIndex: USHORT, - Reserved2: USHORT, + Usage: USAGE, + Reserved1: USAGE, + StringIndex: USHORT, + Reserved2: USHORT, DesignatorIndex: USHORT, - Reserved3: USHORT, - DataIndex: USHORT, - Reserved4: USHORT, - }, + Reserved3: USHORT, + DataIndex: USHORT, + Reserved4: USHORT, + } `raw_union_tag:"IsRange=false"`, }, } PHIDP_VALUE_CAPS :: ^HIDP_VALUE_CAPS HIDP_DATA :: struct { DataIndex: USHORT, - Reserved: USHORT, + Reserved: USHORT, using _ : struct #raw_union { RawValue: ULONG, - On: BOOLEAN, + On: BOOLEAN, }, } PHIDP_DATA :: ^HIDP_DATA HIDP_LINK_COLLECTION_NODE :: struct { - LinkUsage: USAGE, - LinkUsagePage: USAGE, - Parent: USHORT, + LinkUsage: USAGE, + LinkUsagePage: USAGE, + Parent: USHORT, NumberOfChildren: USHORT, - NextSibling: USHORT, - FirstChild: USHORT, - CollectionType: [8]ULONG, - IsAlias: [1]ULONG, - Reserved: [23]ULONG, - UserContext: PVOID, + NextSibling: USHORT, + FirstChild: USHORT, + CollectionType: [8]ULONG, + IsAlias: [1]ULONG, + Reserved: [23]ULONG, + UserContext: PVOID, } PHIDP_LINK_COLLECTION_NODE :: ^HIDP_LINK_COLLECTION_NODE @@ -157,56 +157,56 @@ HIDP_REPORT_TYPE :: enum c_int { Feature, } -HIDP_STATUS_SUCCESS : NTSTATUS : 0x110000 -HIDP_STATUS_NULL : NTSTATUS : -2146369535 //0x80110001 -HIDP_STATUS_INVALID_PREPARSED_DATA : NTSTATUS : -1072627711 //0xC0110001 -HIDP_STATUS_INVALID_REPORT_TYPE : NTSTATUS : -1072627710 //0xC0110002 -HIDP_STATUS_INVALID_REPORT_LENGTH : NTSTATUS : -1072627709 //0xC0110003 -HIDP_STATUS_USAGE_NOT_FOUND : NTSTATUS : -1072627708 //0xC0110004 -HIDP_STATUS_VALUE_OUT_OF_RANGE : NTSTATUS : -1072627707 //0xC0110005 -HIDP_STATUS_BAD_LOG_PHY_VALUES : NTSTATUS : -1072627706 //0xC0100006 -HIDP_STATUS_BUFFER_TOO_SMALL : NTSTATUS : -1072627705 //0xC0110007 -HIDP_STATUS_INTERNAL_ERROR : NTSTATUS : -1072627704 //0xC0110008 -HIDP_STATUS_I8042_TRANS_UNKNOWN : NTSTATUS : -1072627703 //0xC0110009 -HIDP_STATUS_INCOMPATIBLE_REPORT_ID : NTSTATUS : -1072627702 //0xC011000A -HIDP_STATUS_NOT_VALUE_ARRAY : NTSTATUS : -1072627701 //0xC011000B -HIDP_STATUS_IS_VALUE_ARRAY : NTSTATUS : -1072627700 //0xC011000C -HIDP_STATUS_DATA_INDEX_NOT_FOUND : NTSTATUS : -1072627699 //0xC011000D +HIDP_STATUS_SUCCESS : NTSTATUS : 0x110000 +HIDP_STATUS_NULL : NTSTATUS : -2146369535 //0x80110001 +HIDP_STATUS_INVALID_PREPARSED_DATA : NTSTATUS : -1072627711 //0xC0110001 +HIDP_STATUS_INVALID_REPORT_TYPE : NTSTATUS : -1072627710 //0xC0110002 +HIDP_STATUS_INVALID_REPORT_LENGTH : NTSTATUS : -1072627709 //0xC0110003 +HIDP_STATUS_USAGE_NOT_FOUND : NTSTATUS : -1072627708 //0xC0110004 +HIDP_STATUS_VALUE_OUT_OF_RANGE : NTSTATUS : -1072627707 //0xC0110005 +HIDP_STATUS_BAD_LOG_PHY_VALUES : NTSTATUS : -1072627706 //0xC0100006 +HIDP_STATUS_BUFFER_TOO_SMALL : NTSTATUS : -1072627705 //0xC0110007 +HIDP_STATUS_INTERNAL_ERROR : NTSTATUS : -1072627704 //0xC0110008 +HIDP_STATUS_I8042_TRANS_UNKNOWN : NTSTATUS : -1072627703 //0xC0110009 +HIDP_STATUS_INCOMPATIBLE_REPORT_ID : NTSTATUS : -1072627702 //0xC011000A +HIDP_STATUS_NOT_VALUE_ARRAY : NTSTATUS : -1072627701 //0xC011000B +HIDP_STATUS_IS_VALUE_ARRAY : NTSTATUS : -1072627700 //0xC011000C +HIDP_STATUS_DATA_INDEX_NOT_FOUND : NTSTATUS : -1072627699 //0xC011000D HIDP_STATUS_DATA_INDEX_OUT_OF_RANGE : NTSTATUS : -1072627698 //0xC011000E -HIDP_STATUS_BUTTON_NOT_PRESSED : NTSTATUS : -1072627697 //0xC011000F -HIDP_STATUS_REPORT_DOES_NOT_EXIST : NTSTATUS : -1072627696 //0xC0110010 -HIDP_STATUS_NOT_IMPLEMENTED : NTSTATUS : -1072627680 //0xC0110020 -HIDP_STATUS_NOT_BUTTON_ARRAY : NTSTATUS : -1072627679 //0xC0110021 +HIDP_STATUS_BUTTON_NOT_PRESSED : NTSTATUS : -1072627697 //0xC011000F +HIDP_STATUS_REPORT_DOES_NOT_EXIST : NTSTATUS : -1072627696 //0xC0110010 +HIDP_STATUS_NOT_IMPLEMENTED : NTSTATUS : -1072627680 //0xC0110020 +HIDP_STATUS_NOT_BUTTON_ARRAY : NTSTATUS : -1072627679 //0xC0110021 HIDP_STATUS_I8242_TRANS_UNKNOWN :: HIDP_STATUS_I8042_TRANS_UNKNOWN foreign import hid "system:hid.lib" @(default_calling_convention="system") foreign hid { - HidP_GetCaps :: proc(PreparsedData: PHIDP_PREPARSED_DATA, Capabilities: PHIDP_CAPS) -> NTSTATUS --- - HidP_GetButtonCaps :: proc(ReportType: HIDP_REPORT_TYPE, ButtonCaps: PHIDP_BUTTON_CAPS, ButtonCapsLength: PUSHORT, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS --- - HidP_GetValueCaps :: proc(ReportType: HIDP_REPORT_TYPE, ValueCaps: PHIDP_VALUE_CAPS, ValueCapsLength: PUSHORT, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS --- - HidP_GetUsages :: proc(ReportType: HIDP_REPORT_TYPE, UsagePage: USAGE, LinkCollection: USHORT, UsageList: PUSAGE, UsageLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS --- - HidP_GetUsageValue :: proc(ReportType: HIDP_REPORT_TYPE, UsagePage: USAGE, LinkCollection: USHORT, Usage: USAGE, UsageValue: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS --- - HidP_GetData :: proc(ReportType: HIDP_REPORT_TYPE, DataList: PHIDP_DATA, DataLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS --- + HidP_GetCaps :: proc(PreparsedData: PHIDP_PREPARSED_DATA, Capabilities: PHIDP_CAPS) -> NTSTATUS --- + HidP_GetButtonCaps :: proc(ReportType: HIDP_REPORT_TYPE, ButtonCaps: PHIDP_BUTTON_CAPS, ButtonCapsLength: PUSHORT, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS --- + HidP_GetValueCaps :: proc(ReportType: HIDP_REPORT_TYPE, ValueCaps: PHIDP_VALUE_CAPS, ValueCapsLength: PUSHORT, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS --- + HidP_GetUsages :: proc(ReportType: HIDP_REPORT_TYPE, UsagePage: USAGE, LinkCollection: USHORT, UsageList: PUSAGE, UsageLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS --- + HidP_GetUsageValue :: proc(ReportType: HIDP_REPORT_TYPE, UsagePage: USAGE, LinkCollection: USHORT, Usage: USAGE, UsageValue: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS --- + HidP_GetData :: proc(ReportType: HIDP_REPORT_TYPE, DataList: PHIDP_DATA, DataLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA, Report: PCHAR, ReportLength: ULONG) -> NTSTATUS --- HidP_GetLinkCollectionNodes :: proc(LinkCollectionNodes: PHIDP_LINK_COLLECTION_NODE, LinkCollectionNodesLength: PULONG, PreparsedData: PHIDP_PREPARSED_DATA) -> NTSTATUS --- - HidD_GetAttributes :: proc(HidDeviceObject: HANDLE, Attributes: PHIDD_ATTRIBUTES) -> BOOLEAN --- - HidD_GetHidGuid :: proc(HidGuid: LPGUID) --- - HidD_GetPreparsedData :: proc(HidDeviceObject: HANDLE, PreparsedData: ^PHIDP_PREPARSED_DATA) -> BOOLEAN --- - HidD_FreePreparsedData :: proc(PreparsedData: PHIDP_PREPARSED_DATA) -> BOOLEAN --- - HidD_FlushQueue :: proc(HidDeviceObject: HANDLE) -> BOOLEAN --- - HidD_GetConfiguration :: proc(HidDeviceObject: HANDLE, Configuration: PHIDD_CONFIGURATION, ConfigurationLength: ULONG) -> BOOLEAN --- - HidD_SetConfiguration :: proc(HidDeviceObject: HANDLE, Configuration: PHIDD_CONFIGURATION, ConfigurationLength: ULONG) -> BOOLEAN --- - HidD_GetFeature :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- - HidD_SetFeature :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- - HidD_GetInputReport :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- - HidD_SetOutputReport :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- - HidD_GetNumInputBuffers :: proc(HidDeviceObject: HANDLE, NumberBuffers: PULONG) -> BOOLEAN --- - HidD_SetNumInputBuffers :: proc(HidDeviceObject: HANDLE, NumberBuffers: ULONG) -> BOOLEAN --- + HidD_GetAttributes :: proc(HidDeviceObject: HANDLE, Attributes: PHIDD_ATTRIBUTES) -> BOOLEAN --- + HidD_GetHidGuid :: proc(HidGuid: LPGUID) --- + HidD_GetPreparsedData :: proc(HidDeviceObject: HANDLE, PreparsedData: ^PHIDP_PREPARSED_DATA) -> BOOLEAN --- + HidD_FreePreparsedData :: proc(PreparsedData: PHIDP_PREPARSED_DATA) -> BOOLEAN --- + HidD_FlushQueue :: proc(HidDeviceObject: HANDLE) -> BOOLEAN --- + HidD_GetConfiguration :: proc(HidDeviceObject: HANDLE, Configuration: PHIDD_CONFIGURATION, ConfigurationLength: ULONG) -> BOOLEAN --- + HidD_SetConfiguration :: proc(HidDeviceObject: HANDLE, Configuration: PHIDD_CONFIGURATION, ConfigurationLength: ULONG) -> BOOLEAN --- + HidD_GetFeature :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- + HidD_SetFeature :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- + HidD_GetInputReport :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- + HidD_SetOutputReport :: proc(HidDeviceObject: HANDLE, ReportBuffer: PVOID, ReportBufferLength: ULONG) -> BOOLEAN --- + HidD_GetNumInputBuffers :: proc(HidDeviceObject: HANDLE, NumberBuffers: PULONG) -> BOOLEAN --- + HidD_SetNumInputBuffers :: proc(HidDeviceObject: HANDLE, NumberBuffers: ULONG) -> BOOLEAN --- HidD_GetPhysicalDescriptor :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- HidD_GetManufacturerString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- - HidD_GetProductString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- - HidD_GetIndexedString :: proc(HidDeviceObject: HANDLE, StringIndex: ULONG, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- + HidD_GetProductString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- + HidD_GetIndexedString :: proc(HidDeviceObject: HANDLE, StringIndex: ULONG, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- HidD_GetSerialNumberString :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- - HidD_GetMsGenreDescriptor :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- + HidD_GetMsGenreDescriptor :: proc(HidDeviceObject: HANDLE, Buffer: PVOID, BufferLength: ULONG) -> BOOLEAN --- } diff --git a/core/sys/windows/hidusage.odin b/core/sys/windows/hidusage.odin index eb2a85f2e..5f87bea2d 100644 --- a/core/sys/windows/hidusage.odin +++ b/core/sys/windows/hidusage.odin @@ -4,260 +4,260 @@ package sys_windows USAGE :: distinct USHORT PUSAGE :: ^USAGE -HID_USAGE_PAGE_UNDEFINED :: 0x00 -HID_USAGE_PAGE_GENERIC :: 0x01 -HID_USAGE_PAGE_SIMULATION :: 0x02 -HID_USAGE_PAGE_VR :: 0x03 -HID_USAGE_PAGE_SPORT :: 0x04 -HID_USAGE_PAGE_GAME :: 0x05 -HID_USAGE_PAGE_GENERIC_DEVICE :: 0x06 -HID_USAGE_PAGE_KEYBOARD :: 0x07 -HID_USAGE_PAGE_LED :: 0x08 -HID_USAGE_PAGE_BUTTON :: 0x09 -HID_USAGE_PAGE_ORDINAL :: 0x0A -HID_USAGE_PAGE_TELEPHONY :: 0x0B -HID_USAGE_PAGE_CONSUMER :: 0x0C -HID_USAGE_PAGE_DIGITIZER :: 0x0D -HID_USAGE_PAGE_HAPTICS :: 0x0E -HID_USAGE_PAGE_PID :: 0x0F -HID_USAGE_PAGE_UNICODE :: 0x10 -HID_USAGE_PAGE_ALPHANUMERIC :: 0x14 -HID_USAGE_PAGE_SENSOR :: 0x20 -HID_USAGE_PAGE_LIGHTING_ILLUMINATION :: 0x59 -HID_USAGE_PAGE_BARCODE_SCANNER :: 0x8C -HID_USAGE_PAGE_WEIGHING_DEVICE :: 0x8D -HID_USAGE_PAGE_MAGNETIC_STRIPE_READER :: 0x8E -HID_USAGE_PAGE_CAMERA_CONTROL :: 0x90 -HID_USAGE_PAGE_ARCADE :: 0x91 +HID_USAGE_PAGE_UNDEFINED :: 0x00 +HID_USAGE_PAGE_GENERIC :: 0x01 +HID_USAGE_PAGE_SIMULATION :: 0x02 +HID_USAGE_PAGE_VR :: 0x03 +HID_USAGE_PAGE_SPORT :: 0x04 +HID_USAGE_PAGE_GAME :: 0x05 +HID_USAGE_PAGE_GENERIC_DEVICE :: 0x06 +HID_USAGE_PAGE_KEYBOARD :: 0x07 +HID_USAGE_PAGE_LED :: 0x08 +HID_USAGE_PAGE_BUTTON :: 0x09 +HID_USAGE_PAGE_ORDINAL :: 0x0A +HID_USAGE_PAGE_TELEPHONY :: 0x0B +HID_USAGE_PAGE_CONSUMER :: 0x0C +HID_USAGE_PAGE_DIGITIZER :: 0x0D +HID_USAGE_PAGE_HAPTICS :: 0x0E +HID_USAGE_PAGE_PID :: 0x0F +HID_USAGE_PAGE_UNICODE :: 0x10 +HID_USAGE_PAGE_ALPHANUMERIC :: 0x14 +HID_USAGE_PAGE_SENSOR :: 0x20 +HID_USAGE_PAGE_LIGHTING_ILLUMINATION :: 0x59 +HID_USAGE_PAGE_BARCODE_SCANNER :: 0x8C +HID_USAGE_PAGE_WEIGHING_DEVICE :: 0x8D +HID_USAGE_PAGE_MAGNETIC_STRIPE_READER :: 0x8E +HID_USAGE_PAGE_CAMERA_CONTROL :: 0x90 +HID_USAGE_PAGE_ARCADE :: 0x91 HID_USAGE_PAGE_MICROSOFT_BLUETOOTH_HANDSFREE :: 0xFFF3 -HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN :: 0xFF00 -HID_USAGE_PAGE_VENDOR_DEFINED_END :: 0xFFFF +HID_USAGE_PAGE_VENDOR_DEFINED_BEGIN :: 0xFF00 +HID_USAGE_PAGE_VENDOR_DEFINED_END :: 0xFFFF -HID_USAGE_GENERIC_POINTER :: 0x01 -HID_USAGE_GENERIC_MOUSE :: 0x02 -HID_USAGE_GENERIC_JOYSTICK :: 0x04 -HID_USAGE_GENERIC_GAMEPAD :: 0x05 -HID_USAGE_GENERIC_KEYBOARD :: 0x06 -HID_USAGE_GENERIC_KEYPAD :: 0x07 -HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER :: 0x08 -HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL :: 0x09 +HID_USAGE_GENERIC_POINTER :: 0x01 +HID_USAGE_GENERIC_MOUSE :: 0x02 +HID_USAGE_GENERIC_JOYSTICK :: 0x04 +HID_USAGE_GENERIC_GAMEPAD :: 0x05 +HID_USAGE_GENERIC_KEYBOARD :: 0x06 +HID_USAGE_GENERIC_KEYPAD :: 0x07 +HID_USAGE_GENERIC_MULTI_AXIS_CONTROLLER :: 0x08 +HID_USAGE_GENERIC_TABLET_PC_SYSTEM_CTL :: 0x09 HID_USAGE_GENERIC_PORTABLE_DEVICE_CONTROL :: 0x0D -HID_USAGE_GENERIC_INTERACTIVE_CONTROL :: 0x0E -HID_USAGE_GENERIC_SYSTEM_CTL :: 0x80 +HID_USAGE_GENERIC_INTERACTIVE_CONTROL :: 0x0E +HID_USAGE_GENERIC_SYSTEM_CTL :: 0x80 -HID_USAGE_GENERIC_X :: 0x30 -HID_USAGE_GENERIC_Y :: 0x31 -HID_USAGE_GENERIC_Z :: 0x32 -HID_USAGE_GENERIC_RX :: 0x33 -HID_USAGE_GENERIC_RY :: 0x34 -HID_USAGE_GENERIC_RZ :: 0x35 -HID_USAGE_GENERIC_SLIDER :: 0x36 -HID_USAGE_GENERIC_DIAL :: 0x37 -HID_USAGE_GENERIC_WHEEL :: 0x38 -HID_USAGE_GENERIC_HATSWITCH :: 0x39 -HID_USAGE_GENERIC_COUNTED_BUFFER :: 0x3A -HID_USAGE_GENERIC_BYTE_COUNT :: 0x3B -HID_USAGE_GENERIC_MOTION_WAKEUP :: 0x3C -HID_USAGE_GENERIC_START :: 0x3D -HID_USAGE_GENERIC_SELECT :: 0x3E -HID_USAGE_GENERIC_VX :: 0x40 -HID_USAGE_GENERIC_VY :: 0x41 -HID_USAGE_GENERIC_VZ :: 0x42 -HID_USAGE_GENERIC_VBRX :: 0x43 -HID_USAGE_GENERIC_VBRY :: 0x44 -HID_USAGE_GENERIC_VBRZ :: 0x45 -HID_USAGE_GENERIC_VNO :: 0x46 -HID_USAGE_GENERIC_FEATURE_NOTIFICATION :: 0x47 -HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER :: 0x48 -HID_USAGE_GENERIC_SYSCTL_POWER :: 0x81 -HID_USAGE_GENERIC_SYSCTL_SLEEP :: 0x82 -HID_USAGE_GENERIC_SYSCTL_WAKE :: 0x83 -HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU :: 0x84 -HID_USAGE_GENERIC_SYSCTL_MAIN_MENU :: 0x85 -HID_USAGE_GENERIC_SYSCTL_APP_MENU :: 0x86 -HID_USAGE_GENERIC_SYSCTL_HELP_MENU :: 0x87 -HID_USAGE_GENERIC_SYSCTL_MENU_EXIT :: 0x88 -HID_USAGE_GENERIC_SYSCTL_MENU_SELECT :: 0x89 -HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT :: 0x8A -HID_USAGE_GENERIC_SYSCTL_MENU_LEFT :: 0x8B -HID_USAGE_GENERIC_SYSCTL_MENU_UP :: 0x8C -HID_USAGE_GENERIC_SYSCTL_MENU_DOWN :: 0x8D -HID_USAGE_GENERIC_SYSCTL_COLD_RESTART :: 0x8E -HID_USAGE_GENERIC_SYSCTL_WARM_RESTART :: 0x8F -HID_USAGE_GENERIC_DPAD_UP :: 0x90 -HID_USAGE_GENERIC_DPAD_DOWN :: 0x91 -HID_USAGE_GENERIC_DPAD_RIGHT :: 0x92 -HID_USAGE_GENERIC_DPAD_LEFT :: 0x93 -HID_USAGE_GENERIC_SYSCTL_FN :: 0x97 -HID_USAGE_GENERIC_SYSCTL_FN_LOCK :: 0x98 -HID_USAGE_GENERIC_SYSCTL_FN_LOCK_INDICATOR :: 0x99 -HID_USAGE_GENERIC_SYSCTL_DISMISS_NOTIFICATION :: 0x9A -HID_USAGE_GENERIC_SYSCTL_DOCK :: 0xA0 -HID_USAGE_GENERIC_SYSCTL_UNDOCK :: 0xA1 -HID_USAGE_GENERIC_SYSCTL_SETUP :: 0xA2 -HID_USAGE_GENERIC_SYSCTL_SYS_BREAK :: 0xA3 -HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK :: 0xA4 -HID_USAGE_GENERIC_SYSCTL_APP_BREAK :: 0xA5 -HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK :: 0xA6 -HID_USAGE_GENERIC_SYSCTL_MUTE :: 0xA7 -HID_USAGE_GENERIC_SYSCTL_HIBERNATE :: 0xA8 -HID_USAGE_GENERIC_SYSCTL_DISP_INVERT :: 0xB0 -HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL :: 0xB1 -HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL :: 0xB2 -HID_USAGE_GENERIC_SYSCTL_DISP_BOTH :: 0xB3 -HID_USAGE_GENERIC_SYSCTL_DISP_DUAL :: 0xB4 -HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE :: 0xB5 -HID_USAGE_GENERIC_SYSCTL_DISP_SWAP :: 0xB6 -HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE :: 0xB7 -HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON :: 0xC9 +HID_USAGE_GENERIC_X :: 0x30 +HID_USAGE_GENERIC_Y :: 0x31 +HID_USAGE_GENERIC_Z :: 0x32 +HID_USAGE_GENERIC_RX :: 0x33 +HID_USAGE_GENERIC_RY :: 0x34 +HID_USAGE_GENERIC_RZ :: 0x35 +HID_USAGE_GENERIC_SLIDER :: 0x36 +HID_USAGE_GENERIC_DIAL :: 0x37 +HID_USAGE_GENERIC_WHEEL :: 0x38 +HID_USAGE_GENERIC_HATSWITCH :: 0x39 +HID_USAGE_GENERIC_COUNTED_BUFFER :: 0x3A +HID_USAGE_GENERIC_BYTE_COUNT :: 0x3B +HID_USAGE_GENERIC_MOTION_WAKEUP :: 0x3C +HID_USAGE_GENERIC_START :: 0x3D +HID_USAGE_GENERIC_SELECT :: 0x3E +HID_USAGE_GENERIC_VX :: 0x40 +HID_USAGE_GENERIC_VY :: 0x41 +HID_USAGE_GENERIC_VZ :: 0x42 +HID_USAGE_GENERIC_VBRX :: 0x43 +HID_USAGE_GENERIC_VBRY :: 0x44 +HID_USAGE_GENERIC_VBRZ :: 0x45 +HID_USAGE_GENERIC_VNO :: 0x46 +HID_USAGE_GENERIC_FEATURE_NOTIFICATION :: 0x47 +HID_USAGE_GENERIC_RESOLUTION_MULTIPLIER :: 0x48 +HID_USAGE_GENERIC_SYSCTL_POWER :: 0x81 +HID_USAGE_GENERIC_SYSCTL_SLEEP :: 0x82 +HID_USAGE_GENERIC_SYSCTL_WAKE :: 0x83 +HID_USAGE_GENERIC_SYSCTL_CONTEXT_MENU :: 0x84 +HID_USAGE_GENERIC_SYSCTL_MAIN_MENU :: 0x85 +HID_USAGE_GENERIC_SYSCTL_APP_MENU :: 0x86 +HID_USAGE_GENERIC_SYSCTL_HELP_MENU :: 0x87 +HID_USAGE_GENERIC_SYSCTL_MENU_EXIT :: 0x88 +HID_USAGE_GENERIC_SYSCTL_MENU_SELECT :: 0x89 +HID_USAGE_GENERIC_SYSCTL_MENU_RIGHT :: 0x8A +HID_USAGE_GENERIC_SYSCTL_MENU_LEFT :: 0x8B +HID_USAGE_GENERIC_SYSCTL_MENU_UP :: 0x8C +HID_USAGE_GENERIC_SYSCTL_MENU_DOWN :: 0x8D +HID_USAGE_GENERIC_SYSCTL_COLD_RESTART :: 0x8E +HID_USAGE_GENERIC_SYSCTL_WARM_RESTART :: 0x8F +HID_USAGE_GENERIC_DPAD_UP :: 0x90 +HID_USAGE_GENERIC_DPAD_DOWN :: 0x91 +HID_USAGE_GENERIC_DPAD_RIGHT :: 0x92 +HID_USAGE_GENERIC_DPAD_LEFT :: 0x93 +HID_USAGE_GENERIC_SYSCTL_FN :: 0x97 +HID_USAGE_GENERIC_SYSCTL_FN_LOCK :: 0x98 +HID_USAGE_GENERIC_SYSCTL_FN_LOCK_INDICATOR :: 0x99 +HID_USAGE_GENERIC_SYSCTL_DISMISS_NOTIFICATION :: 0x9A +HID_USAGE_GENERIC_SYSCTL_DOCK :: 0xA0 +HID_USAGE_GENERIC_SYSCTL_UNDOCK :: 0xA1 +HID_USAGE_GENERIC_SYSCTL_SETUP :: 0xA2 +HID_USAGE_GENERIC_SYSCTL_SYS_BREAK :: 0xA3 +HID_USAGE_GENERIC_SYSCTL_SYS_DBG_BREAK :: 0xA4 +HID_USAGE_GENERIC_SYSCTL_APP_BREAK :: 0xA5 +HID_USAGE_GENERIC_SYSCTL_APP_DBG_BREAK :: 0xA6 +HID_USAGE_GENERIC_SYSCTL_MUTE :: 0xA7 +HID_USAGE_GENERIC_SYSCTL_HIBERNATE :: 0xA8 +HID_USAGE_GENERIC_SYSCTL_DISP_INVERT :: 0xB0 +HID_USAGE_GENERIC_SYSCTL_DISP_INTERNAL :: 0xB1 +HID_USAGE_GENERIC_SYSCTL_DISP_EXTERNAL :: 0xB2 +HID_USAGE_GENERIC_SYSCTL_DISP_BOTH :: 0xB3 +HID_USAGE_GENERIC_SYSCTL_DISP_DUAL :: 0xB4 +HID_USAGE_GENERIC_SYSCTL_DISP_TOGGLE :: 0xB5 +HID_USAGE_GENERIC_SYSCTL_DISP_SWAP :: 0xB6 +HID_USAGE_GENERIC_SYSCTL_DISP_AUTOSCALE :: 0xB7 +HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON :: 0xC9 HID_USAGE_GENERIC_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH :: 0xCA -HID_USAGE_GENERIC_CONTROL_ENABLE :: 0xCB +HID_USAGE_GENERIC_CONTROL_ENABLE :: 0xCB -HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE :: 0x01 -HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE :: 0x02 -HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE :: 0x03 -HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE :: 0x04 -HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE :: 0x05 -HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE :: 0x06 -HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE :: 0x07 -HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE :: 0x08 -HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE :: 0x09 -HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE :: 0x0A +HID_USAGE_SIMULATION_FLIGHT_SIMULATION_DEVICE :: 0x01 +HID_USAGE_SIMULATION_AUTOMOBILE_SIMULATION_DEVICE :: 0x02 +HID_USAGE_SIMULATION_TANK_SIMULATION_DEVICE :: 0x03 +HID_USAGE_SIMULATION_SPACESHIP_SIMULATION_DEVICE :: 0x04 +HID_USAGE_SIMULATION_SUBMARINE_SIMULATION_DEVICE :: 0x05 +HID_USAGE_SIMULATION_SAILING_SIMULATION_DEVICE :: 0x06 +HID_USAGE_SIMULATION_MOTORCYCLE_SIMULATION_DEVICE :: 0x07 +HID_USAGE_SIMULATION_SPORTS_SIMULATION_DEVICE :: 0x08 +HID_USAGE_SIMULATION_AIRPLANE_SIMULATION_DEVICE :: 0x09 +HID_USAGE_SIMULATION_HELICOPTER_SIMULATION_DEVICE :: 0x0A HID_USAGE_SIMULATION_MAGIC_CARPET_SIMULATION_DEVICE :: 0x0B -HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE :: 0x0C -HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK :: 0x20 -HID_USAGE_SIMULATION_FLIGHT_STICK :: 0x21 -HID_USAGE_SIMULATION_CYCLIC_CONTROL :: 0x22 -HID_USAGE_SIMULATION_CYCLIC_TRIM :: 0x23 -HID_USAGE_SIMULATION_FLIGHT_YOKE :: 0x24 -HID_USAGE_SIMULATION_TRACK_CONTROL :: 0x25 +HID_USAGE_SIMULATION_BICYCLE_SIMULATION_DEVICE :: 0x0C +HID_USAGE_SIMULATION_FLIGHT_CONTROL_STICK :: 0x20 +HID_USAGE_SIMULATION_FLIGHT_STICK :: 0x21 +HID_USAGE_SIMULATION_CYCLIC_CONTROL :: 0x22 +HID_USAGE_SIMULATION_CYCLIC_TRIM :: 0x23 +HID_USAGE_SIMULATION_FLIGHT_YOKE :: 0x24 +HID_USAGE_SIMULATION_TRACK_CONTROL :: 0x25 -HID_USAGE_SIMULATION_AILERON :: 0xB0 -HID_USAGE_SIMULATION_AILERON_TRIM :: 0xB1 -HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL :: 0xB2 -HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE :: 0xB3 -HID_USAGE_SIMULATION_CHAFF_RELEASE :: 0xB4 -HID_USAGE_SIMULATION_COLLECTIVE_CONTROL :: 0xB5 -HID_USAGE_SIMULATION_DIVE_BRAKE :: 0xB6 +HID_USAGE_SIMULATION_AILERON :: 0xB0 +HID_USAGE_SIMULATION_AILERON_TRIM :: 0xB1 +HID_USAGE_SIMULATION_ANTI_TORQUE_CONTROL :: 0xB2 +HID_USAGE_SIMULATION_AUTOPIOLOT_ENABLE :: 0xB3 +HID_USAGE_SIMULATION_CHAFF_RELEASE :: 0xB4 +HID_USAGE_SIMULATION_COLLECTIVE_CONTROL :: 0xB5 +HID_USAGE_SIMULATION_DIVE_BRAKE :: 0xB6 HID_USAGE_SIMULATION_ELECTRONIC_COUNTERMEASURES :: 0xB7 -HID_USAGE_SIMULATION_ELEVATOR :: 0xB8 -HID_USAGE_SIMULATION_ELEVATOR_TRIM :: 0xB9 -HID_USAGE_SIMULATION_RUDDER :: 0xBA -HID_USAGE_SIMULATION_THROTTLE :: 0xBB -HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS :: 0xBC -HID_USAGE_SIMULATION_FLARE_RELEASE :: 0xBD -HID_USAGE_SIMULATION_LANDING_GEAR :: 0xBE -HID_USAGE_SIMULATION_TOE_BRAKE :: 0xBF -HID_USAGE_SIMULATION_TRIGGER :: 0xC0 -HID_USAGE_SIMULATION_WEAPONS_ARM :: 0xC1 -HID_USAGE_SIMULATION_WEAPONS_SELECT :: 0xC2 -HID_USAGE_SIMULATION_WING_FLAPS :: 0xC3 -HID_USAGE_SIMULATION_ACCELLERATOR :: 0xC4 -HID_USAGE_SIMULATION_BRAKE :: 0xC5 -HID_USAGE_SIMULATION_CLUTCH :: 0xC6 -HID_USAGE_SIMULATION_SHIFTER :: 0xC7 -HID_USAGE_SIMULATION_STEERING :: 0xC8 -HID_USAGE_SIMULATION_TURRET_DIRECTION :: 0xC9 -HID_USAGE_SIMULATION_BARREL_ELEVATION :: 0xCA -HID_USAGE_SIMULATION_DIVE_PLANE :: 0xCB -HID_USAGE_SIMULATION_BALLAST :: 0xCC -HID_USAGE_SIMULATION_BICYCLE_CRANK :: 0xCD -HID_USAGE_SIMULATION_HANDLE_BARS :: 0xCE -HID_USAGE_SIMULATION_FRONT_BRAKE :: 0xCF -HID_USAGE_SIMULATION_REAR_BRAKE :: 0xD0 +HID_USAGE_SIMULATION_ELEVATOR :: 0xB8 +HID_USAGE_SIMULATION_ELEVATOR_TRIM :: 0xB9 +HID_USAGE_SIMULATION_RUDDER :: 0xBA +HID_USAGE_SIMULATION_THROTTLE :: 0xBB +HID_USAGE_SIMULATION_FLIGHT_COMMUNICATIONS :: 0xBC +HID_USAGE_SIMULATION_FLARE_RELEASE :: 0xBD +HID_USAGE_SIMULATION_LANDING_GEAR :: 0xBE +HID_USAGE_SIMULATION_TOE_BRAKE :: 0xBF +HID_USAGE_SIMULATION_TRIGGER :: 0xC0 +HID_USAGE_SIMULATION_WEAPONS_ARM :: 0xC1 +HID_USAGE_SIMULATION_WEAPONS_SELECT :: 0xC2 +HID_USAGE_SIMULATION_WING_FLAPS :: 0xC3 +HID_USAGE_SIMULATION_ACCELLERATOR :: 0xC4 +HID_USAGE_SIMULATION_BRAKE :: 0xC5 +HID_USAGE_SIMULATION_CLUTCH :: 0xC6 +HID_USAGE_SIMULATION_SHIFTER :: 0xC7 +HID_USAGE_SIMULATION_STEERING :: 0xC8 +HID_USAGE_SIMULATION_TURRET_DIRECTION :: 0xC9 +HID_USAGE_SIMULATION_BARREL_ELEVATION :: 0xCA +HID_USAGE_SIMULATION_DIVE_PLANE :: 0xCB +HID_USAGE_SIMULATION_BALLAST :: 0xCC +HID_USAGE_SIMULATION_BICYCLE_CRANK :: 0xCD +HID_USAGE_SIMULATION_HANDLE_BARS :: 0xCE +HID_USAGE_SIMULATION_FRONT_BRAKE :: 0xCF +HID_USAGE_SIMULATION_REAR_BRAKE :: 0xD0 -HID_USAGE_VR_BELT :: 0x01 -HID_USAGE_VR_BODY_SUIT :: 0x02 -HID_USAGE_VR_FLEXOR :: 0x03 -HID_USAGE_VR_GLOVE :: 0x04 -HID_USAGE_VR_HEAD_TRACKER :: 0x05 +HID_USAGE_VR_BELT :: 0x01 +HID_USAGE_VR_BODY_SUIT :: 0x02 +HID_USAGE_VR_FLEXOR :: 0x03 +HID_USAGE_VR_GLOVE :: 0x04 +HID_USAGE_VR_HEAD_TRACKER :: 0x05 HID_USAGE_VR_HEAD_MOUNTED_DISPLAY :: 0x06 -HID_USAGE_VR_HAND_TRACKER :: 0x07 -HID_USAGE_VR_OCULOMETER :: 0x08 -HID_USAGE_VR_VEST :: 0x09 -HID_USAGE_VR_ANIMATRONIC_DEVICE :: 0x0A +HID_USAGE_VR_HAND_TRACKER :: 0x07 +HID_USAGE_VR_OCULOMETER :: 0x08 +HID_USAGE_VR_VEST :: 0x09 +HID_USAGE_VR_ANIMATRONIC_DEVICE :: 0x0A -HID_USAGE_VR_STEREO_ENABLE :: 0x20 +HID_USAGE_VR_STEREO_ENABLE :: 0x20 HID_USAGE_VR_DISPLAY_ENABLE :: 0x21 -HID_USAGE_SPORT_BASEBALL_BAT :: 0x01 -HID_USAGE_SPORT_GOLF_CLUB :: 0x02 +HID_USAGE_SPORT_BASEBALL_BAT :: 0x01 +HID_USAGE_SPORT_GOLF_CLUB :: 0x02 HID_USAGE_SPORT_ROWING_MACHINE :: 0x03 -HID_USAGE_SPORT_TREADMILL :: 0x04 -HID_USAGE_SPORT_STICK_TYPE :: 0x38 +HID_USAGE_SPORT_TREADMILL :: 0x04 +HID_USAGE_SPORT_STICK_TYPE :: 0x38 -HID_USAGE_SPORT_OAR :: 0x30 -HID_USAGE_SPORT_SLOPE :: 0x31 -HID_USAGE_SPORT_RATE :: 0x32 -HID_USAGE_SPORT_STICK_SPEED :: 0x33 +HID_USAGE_SPORT_OAR :: 0x30 +HID_USAGE_SPORT_SLOPE :: 0x31 +HID_USAGE_SPORT_RATE :: 0x32 +HID_USAGE_SPORT_STICK_SPEED :: 0x33 HID_USAGE_SPORT_STICK_FACE_ANGLE :: 0x34 -HID_USAGE_SPORT_HEEL_TOE :: 0x35 -HID_USAGE_SPORT_FOLLOW_THROUGH :: 0x36 -HID_USAGE_SPORT_TEMPO :: 0x37 -HID_USAGE_SPORT_HEIGHT :: 0x39 -HID_USAGE_SPORT_PUTTER :: 0x50 -HID_USAGE_SPORT_1_IRON :: 0x51 -HID_USAGE_SPORT_2_IRON :: 0x52 -HID_USAGE_SPORT_3_IRON :: 0x53 -HID_USAGE_SPORT_4_IRON :: 0x54 -HID_USAGE_SPORT_5_IRON :: 0x55 -HID_USAGE_SPORT_6_IRON :: 0x56 -HID_USAGE_SPORT_7_IRON :: 0x57 -HID_USAGE_SPORT_8_IRON :: 0x58 -HID_USAGE_SPORT_9_IRON :: 0x59 -HID_USAGE_SPORT_10_IRON :: 0x5A -HID_USAGE_SPORT_11_IRON :: 0x5B -HID_USAGE_SPORT_SAND_WEDGE :: 0x5C -HID_USAGE_SPORT_LOFT_WEDGE :: 0x5D -HID_USAGE_SPORT_POWER_WEDGE :: 0x5E -HID_USAGE_SPORT_1_WOOD :: 0x5F -HID_USAGE_SPORT_3_WOOD :: 0x60 -HID_USAGE_SPORT_5_WOOD :: 0x61 -HID_USAGE_SPORT_7_WOOD :: 0x62 -HID_USAGE_SPORT_9_WOOD :: 0x63 +HID_USAGE_SPORT_HEEL_TOE :: 0x35 +HID_USAGE_SPORT_FOLLOW_THROUGH :: 0x36 +HID_USAGE_SPORT_TEMPO :: 0x37 +HID_USAGE_SPORT_HEIGHT :: 0x39 +HID_USAGE_SPORT_PUTTER :: 0x50 +HID_USAGE_SPORT_1_IRON :: 0x51 +HID_USAGE_SPORT_2_IRON :: 0x52 +HID_USAGE_SPORT_3_IRON :: 0x53 +HID_USAGE_SPORT_4_IRON :: 0x54 +HID_USAGE_SPORT_5_IRON :: 0x55 +HID_USAGE_SPORT_6_IRON :: 0x56 +HID_USAGE_SPORT_7_IRON :: 0x57 +HID_USAGE_SPORT_8_IRON :: 0x58 +HID_USAGE_SPORT_9_IRON :: 0x59 +HID_USAGE_SPORT_10_IRON :: 0x5A +HID_USAGE_SPORT_11_IRON :: 0x5B +HID_USAGE_SPORT_SAND_WEDGE :: 0x5C +HID_USAGE_SPORT_LOFT_WEDGE :: 0x5D +HID_USAGE_SPORT_POWER_WEDGE :: 0x5E +HID_USAGE_SPORT_1_WOOD :: 0x5F +HID_USAGE_SPORT_3_WOOD :: 0x60 +HID_USAGE_SPORT_5_WOOD :: 0x61 +HID_USAGE_SPORT_7_WOOD :: 0x62 +HID_USAGE_SPORT_9_WOOD :: 0x63 HID_USAGE_GAME_3D_GAME_CONTROLLER :: 0x01 -HID_USAGE_GAME_PINBALL_DEVICE :: 0x02 -HID_USAGE_GAME_GUN_DEVICE :: 0x03 -HID_USAGE_GAME_POINT_OF_VIEW :: 0x20 -HID_USAGE_GAME_GUN_SELECTOR :: 0x32 -HID_USAGE_GAME_GAMEPAD_FIRE_JUMP :: 0x37 -HID_USAGE_GAME_GAMEPAD_TRIGGER :: 0x39 +HID_USAGE_GAME_PINBALL_DEVICE :: 0x02 +HID_USAGE_GAME_GUN_DEVICE :: 0x03 +HID_USAGE_GAME_POINT_OF_VIEW :: 0x20 +HID_USAGE_GAME_GUN_SELECTOR :: 0x32 +HID_USAGE_GAME_GAMEPAD_FIRE_JUMP :: 0x37 +HID_USAGE_GAME_GAMEPAD_TRIGGER :: 0x39 -HID_USAGE_GAME_TURN_RIGHT_LEFT :: 0x21 +HID_USAGE_GAME_TURN_RIGHT_LEFT :: 0x21 HID_USAGE_GAME_PITCH_FORWARD_BACK :: 0x22 -HID_USAGE_GAME_ROLL_RIGHT_LEFT :: 0x23 -HID_USAGE_GAME_MOVE_RIGHT_LEFT :: 0x24 -HID_USAGE_GAME_MOVE_FORWARD_BACK :: 0x25 -HID_USAGE_GAME_MOVE_UP_DOWN :: 0x26 -HID_USAGE_GAME_LEAN_RIGHT_LEFT :: 0x27 -HID_USAGE_GAME_LEAN_FORWARD_BACK :: 0x28 -HID_USAGE_GAME_POV_HEIGHT :: 0x29 -HID_USAGE_GAME_FLIPPER :: 0x2A -HID_USAGE_GAME_SECONDARY_FLIPPER :: 0x2B -HID_USAGE_GAME_BUMP :: 0x2C -HID_USAGE_GAME_NEW_GAME :: 0x2D -HID_USAGE_GAME_SHOOT_BALL :: 0x2E -HID_USAGE_GAME_PLAYER :: 0x2F -HID_USAGE_GAME_GUN_BOLT :: 0x30 -HID_USAGE_GAME_GUN_CLIP :: 0x31 -HID_USAGE_GAME_GUN_SINGLE_SHOT :: 0x33 -HID_USAGE_GAME_GUN_BURST :: 0x34 -HID_USAGE_GAME_GUN_AUTOMATIC :: 0x35 -HID_USAGE_GAME_GUN_SAFETY :: 0x36 +HID_USAGE_GAME_ROLL_RIGHT_LEFT :: 0x23 +HID_USAGE_GAME_MOVE_RIGHT_LEFT :: 0x24 +HID_USAGE_GAME_MOVE_FORWARD_BACK :: 0x25 +HID_USAGE_GAME_MOVE_UP_DOWN :: 0x26 +HID_USAGE_GAME_LEAN_RIGHT_LEFT :: 0x27 +HID_USAGE_GAME_LEAN_FORWARD_BACK :: 0x28 +HID_USAGE_GAME_POV_HEIGHT :: 0x29 +HID_USAGE_GAME_FLIPPER :: 0x2A +HID_USAGE_GAME_SECONDARY_FLIPPER :: 0x2B +HID_USAGE_GAME_BUMP :: 0x2C +HID_USAGE_GAME_NEW_GAME :: 0x2D +HID_USAGE_GAME_SHOOT_BALL :: 0x2E +HID_USAGE_GAME_PLAYER :: 0x2F +HID_USAGE_GAME_GUN_BOLT :: 0x30 +HID_USAGE_GAME_GUN_CLIP :: 0x31 +HID_USAGE_GAME_GUN_SINGLE_SHOT :: 0x33 +HID_USAGE_GAME_GUN_BURST :: 0x34 +HID_USAGE_GAME_GUN_AUTOMATIC :: 0x35 +HID_USAGE_GAME_GUN_SAFETY :: 0x36 -HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH :: 0x20 -HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL :: 0x21 -HID_USAGE_GENERIC_DEVICE_WIRELESS_ID :: 0x22 -HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL :: 0x23 +HID_USAGE_GENERIC_DEVICE_BATTERY_STRENGTH :: 0x20 +HID_USAGE_GENERIC_DEVICE_WIRELESS_CHANNEL :: 0x21 +HID_USAGE_GENERIC_DEVICE_WIRELESS_ID :: 0x22 +HID_USAGE_GENERIC_DEVICE_DISCOVER_WIRELESS_CONTROL :: 0x23 HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ENTERED :: 0x24 -HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED :: 0x25 -HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED :: 0x26 +HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CHAR_ERASED :: 0x25 +HID_USAGE_GENERIC_DEVICE_SECURITY_CODE_CLEARED :: 0x26 // Error "keys" -HID_USAGE_KEYBOARD_NOEVENT :: 0x00 -HID_USAGE_KEYBOARD_ROLLOVER :: 0x01 -HID_USAGE_KEYBOARD_POSTFAIL :: 0x02 +HID_USAGE_KEYBOARD_NOEVENT :: 0x00 +HID_USAGE_KEYBOARD_ROLLOVER :: 0x01 +HID_USAGE_KEYBOARD_POSTFAIL :: 0x02 HID_USAGE_KEYBOARD_UNDEFINED :: 0x03 // Letters @@ -265,32 +265,32 @@ HID_USAGE_KEYBOARD_aA :: 0x04 HID_USAGE_KEYBOARD_zZ :: 0x1D // Numbers -HID_USAGE_KEYBOARD_ONE :: 0x1E +HID_USAGE_KEYBOARD_ONE :: 0x1E HID_USAGE_KEYBOARD_ZERO :: 0x27 // Modifier Keys -HID_USAGE_KEYBOARD_LCTRL :: 0xE0 -HID_USAGE_KEYBOARD_LSHFT :: 0xE1 -HID_USAGE_KEYBOARD_LALT :: 0xE2 -HID_USAGE_KEYBOARD_LGUI :: 0xE3 -HID_USAGE_KEYBOARD_RCTRL :: 0xE4 -HID_USAGE_KEYBOARD_RSHFT :: 0xE5 -HID_USAGE_KEYBOARD_RALT :: 0xE6 -HID_USAGE_KEYBOARD_RGUI :: 0xE7 +HID_USAGE_KEYBOARD_LCTRL :: 0xE0 +HID_USAGE_KEYBOARD_LSHFT :: 0xE1 +HID_USAGE_KEYBOARD_LALT :: 0xE2 +HID_USAGE_KEYBOARD_LGUI :: 0xE3 +HID_USAGE_KEYBOARD_RCTRL :: 0xE4 +HID_USAGE_KEYBOARD_RSHFT :: 0xE5 +HID_USAGE_KEYBOARD_RALT :: 0xE6 +HID_USAGE_KEYBOARD_RGUI :: 0xE7 HID_USAGE_KEYBOARD_SCROLL_LOCK :: 0x47 -HID_USAGE_KEYBOARD_NUM_LOCK :: 0x53 -HID_USAGE_KEYBOARD_CAPS_LOCK :: 0x39 +HID_USAGE_KEYBOARD_NUM_LOCK :: 0x53 +HID_USAGE_KEYBOARD_CAPS_LOCK :: 0x39 // Function keys -HID_USAGE_KEYBOARD_F1 :: 0x3A -HID_USAGE_KEYBOARD_F2 :: 0x3B -HID_USAGE_KEYBOARD_F3 :: 0x3C -HID_USAGE_KEYBOARD_F4 :: 0x3D -HID_USAGE_KEYBOARD_F5 :: 0x3E -HID_USAGE_KEYBOARD_F6 :: 0x3F -HID_USAGE_KEYBOARD_F7 :: 0x40 -HID_USAGE_KEYBOARD_F8 :: 0x41 -HID_USAGE_KEYBOARD_F9 :: 0x42 +HID_USAGE_KEYBOARD_F1 :: 0x3A +HID_USAGE_KEYBOARD_F2 :: 0x3B +HID_USAGE_KEYBOARD_F3 :: 0x3C +HID_USAGE_KEYBOARD_F4 :: 0x3D +HID_USAGE_KEYBOARD_F5 :: 0x3E +HID_USAGE_KEYBOARD_F6 :: 0x3F +HID_USAGE_KEYBOARD_F7 :: 0x40 +HID_USAGE_KEYBOARD_F8 :: 0x41 +HID_USAGE_KEYBOARD_F9 :: 0x42 HID_USAGE_KEYBOARD_F10 :: 0x43 HID_USAGE_KEYBOARD_F11 :: 0x44 HID_USAGE_KEYBOARD_F12 :: 0x45 @@ -315,103 +315,103 @@ HID_USAGE_KEYBOARD_PRINT_SCREEN :: 0x46 HID_USAGE_KEYBOARD_DELETE_FORWARD :: 0x4C // Numeric Keypad -HID_USAGE_KEYBOARD_KEYPAD_1_AND_END :: 0x59 +HID_USAGE_KEYBOARD_KEYPAD_1_AND_END :: 0x59 HID_USAGE_KEYBOARD_KEYPAD_0_AND_INSERT :: 0x62 -HID_USAGE_LED_NUM_LOCK :: 0x01 -HID_USAGE_LED_CAPS_LOCK :: 0x02 -HID_USAGE_LED_SCROLL_LOCK :: 0x03 -HID_USAGE_LED_COMPOSE :: 0x04 -HID_USAGE_LED_KANA :: 0x05 -HID_USAGE_LED_POWER :: 0x06 -HID_USAGE_LED_SHIFT :: 0x07 -HID_USAGE_LED_DO_NOT_DISTURB :: 0x08 -HID_USAGE_LED_MUTE :: 0x09 -HID_USAGE_LED_TONE_ENABLE :: 0x0A -HID_USAGE_LED_HIGH_CUT_FILTER :: 0x0B -HID_USAGE_LED_LOW_CUT_FILTER :: 0x0C -HID_USAGE_LED_EQUALIZER_ENABLE :: 0x0D -HID_USAGE_LED_SOUND_FIELD_ON :: 0x0E -HID_USAGE_LED_SURROUND_FIELD_ON :: 0x0F -HID_USAGE_LED_REPEAT :: 0x10 -HID_USAGE_LED_STEREO :: 0x11 +HID_USAGE_LED_NUM_LOCK :: 0x01 +HID_USAGE_LED_CAPS_LOCK :: 0x02 +HID_USAGE_LED_SCROLL_LOCK :: 0x03 +HID_USAGE_LED_COMPOSE :: 0x04 +HID_USAGE_LED_KANA :: 0x05 +HID_USAGE_LED_POWER :: 0x06 +HID_USAGE_LED_SHIFT :: 0x07 +HID_USAGE_LED_DO_NOT_DISTURB :: 0x08 +HID_USAGE_LED_MUTE :: 0x09 +HID_USAGE_LED_TONE_ENABLE :: 0x0A +HID_USAGE_LED_HIGH_CUT_FILTER :: 0x0B +HID_USAGE_LED_LOW_CUT_FILTER :: 0x0C +HID_USAGE_LED_EQUALIZER_ENABLE :: 0x0D +HID_USAGE_LED_SOUND_FIELD_ON :: 0x0E +HID_USAGE_LED_SURROUND_FIELD_ON :: 0x0F +HID_USAGE_LED_REPEAT :: 0x10 +HID_USAGE_LED_STEREO :: 0x11 HID_USAGE_LED_SAMPLING_RATE_DETECT :: 0x12 -HID_USAGE_LED_SPINNING :: 0x13 -HID_USAGE_LED_CAV :: 0x14 -HID_USAGE_LED_CLV :: 0x15 +HID_USAGE_LED_SPINNING :: 0x13 +HID_USAGE_LED_CAV :: 0x14 +HID_USAGE_LED_CLV :: 0x15 HID_USAGE_LED_RECORDING_FORMAT_DET :: 0x16 -HID_USAGE_LED_OFF_HOOK :: 0x17 -HID_USAGE_LED_RING :: 0x18 -HID_USAGE_LED_MESSAGE_WAITING :: 0x19 -HID_USAGE_LED_DATA_MODE :: 0x1A -HID_USAGE_LED_BATTERY_OPERATION :: 0x1B -HID_USAGE_LED_BATTERY_OK :: 0x1C -HID_USAGE_LED_BATTERY_LOW :: 0x1D -HID_USAGE_LED_SPEAKER :: 0x1E -HID_USAGE_LED_HEAD_SET :: 0x1F -HID_USAGE_LED_HOLD :: 0x20 -HID_USAGE_LED_MICROPHONE :: 0x21 -HID_USAGE_LED_COVERAGE :: 0x22 -HID_USAGE_LED_NIGHT_MODE :: 0x23 -HID_USAGE_LED_SEND_CALLS :: 0x24 -HID_USAGE_LED_CALL_PICKUP :: 0x25 -HID_USAGE_LED_CONFERENCE :: 0x26 -HID_USAGE_LED_STAND_BY :: 0x27 -HID_USAGE_LED_CAMERA_ON :: 0x28 -HID_USAGE_LED_CAMERA_OFF :: 0x29 -HID_USAGE_LED_ON_LINE :: 0x2A -HID_USAGE_LED_OFF_LINE :: 0x2B -HID_USAGE_LED_BUSY :: 0x2C -HID_USAGE_LED_READY :: 0x2D -HID_USAGE_LED_PAPER_OUT :: 0x2E -HID_USAGE_LED_PAPER_JAM :: 0x2F -HID_USAGE_LED_REMOTE :: 0x30 -HID_USAGE_LED_FORWARD :: 0x31 -HID_USAGE_LED_REVERSE :: 0x32 -HID_USAGE_LED_STOP :: 0x33 -HID_USAGE_LED_REWIND :: 0x34 -HID_USAGE_LED_FAST_FORWARD :: 0x35 -HID_USAGE_LED_PLAY :: 0x36 -HID_USAGE_LED_PAUSE :: 0x37 -HID_USAGE_LED_RECORD :: 0x38 -HID_USAGE_LED_ERROR :: 0x39 -HID_USAGE_LED_SELECTED_INDICATOR :: 0x3A -HID_USAGE_LED_IN_USE_INDICATOR :: 0x3B +HID_USAGE_LED_OFF_HOOK :: 0x17 +HID_USAGE_LED_RING :: 0x18 +HID_USAGE_LED_MESSAGE_WAITING :: 0x19 +HID_USAGE_LED_DATA_MODE :: 0x1A +HID_USAGE_LED_BATTERY_OPERATION :: 0x1B +HID_USAGE_LED_BATTERY_OK :: 0x1C +HID_USAGE_LED_BATTERY_LOW :: 0x1D +HID_USAGE_LED_SPEAKER :: 0x1E +HID_USAGE_LED_HEAD_SET :: 0x1F +HID_USAGE_LED_HOLD :: 0x20 +HID_USAGE_LED_MICROPHONE :: 0x21 +HID_USAGE_LED_COVERAGE :: 0x22 +HID_USAGE_LED_NIGHT_MODE :: 0x23 +HID_USAGE_LED_SEND_CALLS :: 0x24 +HID_USAGE_LED_CALL_PICKUP :: 0x25 +HID_USAGE_LED_CONFERENCE :: 0x26 +HID_USAGE_LED_STAND_BY :: 0x27 +HID_USAGE_LED_CAMERA_ON :: 0x28 +HID_USAGE_LED_CAMERA_OFF :: 0x29 +HID_USAGE_LED_ON_LINE :: 0x2A +HID_USAGE_LED_OFF_LINE :: 0x2B +HID_USAGE_LED_BUSY :: 0x2C +HID_USAGE_LED_READY :: 0x2D +HID_USAGE_LED_PAPER_OUT :: 0x2E +HID_USAGE_LED_PAPER_JAM :: 0x2F +HID_USAGE_LED_REMOTE :: 0x30 +HID_USAGE_LED_FORWARD :: 0x31 +HID_USAGE_LED_REVERSE :: 0x32 +HID_USAGE_LED_STOP :: 0x33 +HID_USAGE_LED_REWIND :: 0x34 +HID_USAGE_LED_FAST_FORWARD :: 0x35 +HID_USAGE_LED_PLAY :: 0x36 +HID_USAGE_LED_PAUSE :: 0x37 +HID_USAGE_LED_RECORD :: 0x38 +HID_USAGE_LED_ERROR :: 0x39 +HID_USAGE_LED_SELECTED_INDICATOR :: 0x3A +HID_USAGE_LED_IN_USE_INDICATOR :: 0x3B HID_USAGE_LED_MULTI_MODE_INDICATOR :: 0x3C -HID_USAGE_LED_INDICATOR_ON :: 0x3D -HID_USAGE_LED_INDICATOR_FLASH :: 0x3E +HID_USAGE_LED_INDICATOR_ON :: 0x3D +HID_USAGE_LED_INDICATOR_FLASH :: 0x3E HID_USAGE_LED_INDICATOR_SLOW_BLINK :: 0x3F HID_USAGE_LED_INDICATOR_FAST_BLINK :: 0x40 -HID_USAGE_LED_INDICATOR_OFF :: 0x41 -HID_USAGE_LED_FLASH_ON_TIME :: 0x42 -HID_USAGE_LED_SLOW_BLINK_ON_TIME :: 0x43 -HID_USAGE_LED_SLOW_BLINK_OFF_TIME :: 0x44 -HID_USAGE_LED_FAST_BLINK_ON_TIME :: 0x45 -HID_USAGE_LED_FAST_BLINK_OFF_TIME :: 0x46 -HID_USAGE_LED_INDICATOR_COLOR :: 0x47 -HID_USAGE_LED_RED :: 0x48 -HID_USAGE_LED_GREEN :: 0x49 -HID_USAGE_LED_AMBER :: 0x4A -HID_USAGE_LED_GENERIC_INDICATOR :: 0x4B -HID_USAGE_LED_SYSTEM_SUSPEND :: 0x4C -HID_USAGE_LED_EXTERNAL_POWER :: 0x4D +HID_USAGE_LED_INDICATOR_OFF :: 0x41 +HID_USAGE_LED_FLASH_ON_TIME :: 0x42 +HID_USAGE_LED_SLOW_BLINK_ON_TIME :: 0x43 +HID_USAGE_LED_SLOW_BLINK_OFF_TIME :: 0x44 +HID_USAGE_LED_FAST_BLINK_ON_TIME :: 0x45 +HID_USAGE_LED_FAST_BLINK_OFF_TIME :: 0x46 +HID_USAGE_LED_INDICATOR_COLOR :: 0x47 +HID_USAGE_LED_RED :: 0x48 +HID_USAGE_LED_GREEN :: 0x49 +HID_USAGE_LED_AMBER :: 0x4A +HID_USAGE_LED_GENERIC_INDICATOR :: 0x4B +HID_USAGE_LED_SYSTEM_SUSPEND :: 0x4C +HID_USAGE_LED_EXTERNAL_POWER :: 0x4D -HID_USAGE_TELEPHONY_PHONE :: 0x01 -HID_USAGE_TELEPHONY_ANSWERING_MACHINE :: 0x02 -HID_USAGE_TELEPHONY_MESSAGE_CONTROLS :: 0x03 -HID_USAGE_TELEPHONY_HANDSET :: 0x04 -HID_USAGE_TELEPHONY_HEADSET :: 0x05 -HID_USAGE_TELEPHONY_KEYPAD :: 0x06 +HID_USAGE_TELEPHONY_PHONE :: 0x01 +HID_USAGE_TELEPHONY_ANSWERING_MACHINE :: 0x02 +HID_USAGE_TELEPHONY_MESSAGE_CONTROLS :: 0x03 +HID_USAGE_TELEPHONY_HANDSET :: 0x04 +HID_USAGE_TELEPHONY_HEADSET :: 0x05 +HID_USAGE_TELEPHONY_KEYPAD :: 0x06 HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON :: 0x07 -HID_USAGE_TELEPHONY_REDIAL :: 0x24 -HID_USAGE_TELEPHONY_TRANSFER :: 0x25 -HID_USAGE_TELEPHONY_DROP :: 0x26 -HID_USAGE_TELEPHONY_LINE :: 0x2A -HID_USAGE_TELEPHONY_RING_ENABLE :: 0x2D -HID_USAGE_TELEPHONY_SEND :: 0x31 -HID_USAGE_TELEPHONY_KEYPAD_0 :: 0xB0 -HID_USAGE_TELEPHONY_KEYPAD_D :: 0xBF -HID_USAGE_TELEPHONY_HOST_AVAILABLE :: 0xF1 +HID_USAGE_TELEPHONY_REDIAL :: 0x24 +HID_USAGE_TELEPHONY_TRANSFER :: 0x25 +HID_USAGE_TELEPHONY_DROP :: 0x26 +HID_USAGE_TELEPHONY_LINE :: 0x2A +HID_USAGE_TELEPHONY_RING_ENABLE :: 0x2D +HID_USAGE_TELEPHONY_SEND :: 0x31 +HID_USAGE_TELEPHONY_KEYPAD_0 :: 0xB0 +HID_USAGE_TELEPHONY_KEYPAD_D :: 0xBF +HID_USAGE_TELEPHONY_HOST_AVAILABLE :: 0xF1 HID_USAGE_CONSUMERCTRL :: 0x01 @@ -420,271 +420,271 @@ HID_USAGE_CONSUMER_CHANNEL_INCREMENT :: 0x9C HID_USAGE_CONSUMER_CHANNEL_DECREMENT :: 0x9D // transport control -HID_USAGE_CONSUMER_PLAY :: 0xB0 -HID_USAGE_CONSUMER_PAUSE :: 0xB1 -HID_USAGE_CONSUMER_RECORD :: 0xB2 -HID_USAGE_CONSUMER_FAST_FORWARD :: 0xB3 -HID_USAGE_CONSUMER_REWIND :: 0xB4 +HID_USAGE_CONSUMER_PLAY :: 0xB0 +HID_USAGE_CONSUMER_PAUSE :: 0xB1 +HID_USAGE_CONSUMER_RECORD :: 0xB2 +HID_USAGE_CONSUMER_FAST_FORWARD :: 0xB3 +HID_USAGE_CONSUMER_REWIND :: 0xB4 HID_USAGE_CONSUMER_SCAN_NEXT_TRACK :: 0xB5 HID_USAGE_CONSUMER_SCAN_PREV_TRACK :: 0xB6 -HID_USAGE_CONSUMER_STOP :: 0xB7 -HID_USAGE_CONSUMER_PLAY_PAUSE :: 0xCD +HID_USAGE_CONSUMER_STOP :: 0xB7 +HID_USAGE_CONSUMER_PLAY_PAUSE :: 0xCD // GameDVR -HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR :: 0xD0 -HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD :: 0xD1 -HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP :: 0xD2 -HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT :: 0xD3 -HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR :: 0xD4 +HID_USAGE_CONSUMER_GAMEDVR_OPEN_GAMEBAR :: 0xD0 +HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_RECORD :: 0xD1 +HID_USAGE_CONSUMER_GAMEDVR_RECORD_CLIP :: 0xD2 +HID_USAGE_CONSUMER_GAMEDVR_SCREENSHOT :: 0xD3 +HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_INDICATOR :: 0xD4 HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_MICROPHONE :: 0xD5 -HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA :: 0xD6 -HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST :: 0xD7 +HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_CAMERA :: 0xD6 +HID_USAGE_CONSUMER_GAMEDVR_TOGGLE_BROADCAST :: 0xD7 // audio -HID_USAGE_CONSUMER_VOLUME :: 0xE0 -HID_USAGE_CONSUMER_BALANCE :: 0xE1 -HID_USAGE_CONSUMER_MUTE :: 0xE2 -HID_USAGE_CONSUMER_BASS :: 0xE3 -HID_USAGE_CONSUMER_TREBLE :: 0xE4 -HID_USAGE_CONSUMER_BASS_BOOST :: 0xE5 -HID_USAGE_CONSUMER_SURROUND_MODE :: 0xE6 -HID_USAGE_CONSUMER_LOUDNESS :: 0xE7 -HID_USAGE_CONSUMER_MPX :: 0xE8 +HID_USAGE_CONSUMER_VOLUME :: 0xE0 +HID_USAGE_CONSUMER_BALANCE :: 0xE1 +HID_USAGE_CONSUMER_MUTE :: 0xE2 +HID_USAGE_CONSUMER_BASS :: 0xE3 +HID_USAGE_CONSUMER_TREBLE :: 0xE4 +HID_USAGE_CONSUMER_BASS_BOOST :: 0xE5 +HID_USAGE_CONSUMER_SURROUND_MODE :: 0xE6 +HID_USAGE_CONSUMER_LOUDNESS :: 0xE7 +HID_USAGE_CONSUMER_MPX :: 0xE8 HID_USAGE_CONSUMER_VOLUME_INCREMENT :: 0xE9 HID_USAGE_CONSUMER_VOLUME_DECREMENT :: 0xEA // supplementary audio -HID_USAGE_CONSUMER_BASS_INCREMENT :: 0x152 -HID_USAGE_CONSUMER_BASS_DECREMENT :: 0x153 +HID_USAGE_CONSUMER_BASS_INCREMENT :: 0x152 +HID_USAGE_CONSUMER_BASS_DECREMENT :: 0x153 HID_USAGE_CONSUMER_TREBLE_INCREMENT :: 0x154 HID_USAGE_CONSUMER_TREBLE_DECREMENT :: 0x155 // Application Launch HID_USAGE_CONSUMER_AL_CONFIGURATION :: 0x183 -HID_USAGE_CONSUMER_AL_EMAIL :: 0x18A -HID_USAGE_CONSUMER_AL_CALCULATOR :: 0x192 -HID_USAGE_CONSUMER_AL_BROWSER :: 0x194 -HID_USAGE_CONSUMER_AL_SEARCH :: 0x1C6 +HID_USAGE_CONSUMER_AL_EMAIL :: 0x18A +HID_USAGE_CONSUMER_AL_CALCULATOR :: 0x192 +HID_USAGE_CONSUMER_AL_BROWSER :: 0x194 +HID_USAGE_CONSUMER_AL_SEARCH :: 0x1C6 // Application Control -HID_USAGE_CONSUMER_AC_SEARCH :: 0x221 -HID_USAGE_CONSUMER_AC_GOTO :: 0x222 -HID_USAGE_CONSUMER_AC_HOME :: 0x223 -HID_USAGE_CONSUMER_AC_BACK :: 0x224 -HID_USAGE_CONSUMER_AC_FORWARD :: 0x225 -HID_USAGE_CONSUMER_AC_STOP :: 0x226 -HID_USAGE_CONSUMER_AC_REFRESH :: 0x227 -HID_USAGE_CONSUMER_AC_PREVIOUS :: 0x228 -HID_USAGE_CONSUMER_AC_NEXT :: 0x229 +HID_USAGE_CONSUMER_AC_SEARCH :: 0x221 +HID_USAGE_CONSUMER_AC_GOTO :: 0x222 +HID_USAGE_CONSUMER_AC_HOME :: 0x223 +HID_USAGE_CONSUMER_AC_BACK :: 0x224 +HID_USAGE_CONSUMER_AC_FORWARD :: 0x225 +HID_USAGE_CONSUMER_AC_STOP :: 0x226 +HID_USAGE_CONSUMER_AC_REFRESH :: 0x227 +HID_USAGE_CONSUMER_AC_PREVIOUS :: 0x228 +HID_USAGE_CONSUMER_AC_NEXT :: 0x229 HID_USAGE_CONSUMER_AC_BOOKMARKS :: 0x22A -HID_USAGE_CONSUMER_AC_PAN :: 0x238 +HID_USAGE_CONSUMER_AC_PAN :: 0x238 // Keyboard Extended Attributes (defined on consumer page in HUTRR42) -HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION :: 0x2C0 -HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR :: 0x2C1 -HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE :: 0x2C2 -HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT :: 0x2C3 -HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT :: 0x2C4 -HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX :: 0x2C5 +HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION :: 0x2C0 +HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR :: 0x2C1 +HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE :: 0x2C2 +HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT :: 0x2C3 +HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT :: 0x2C4 +HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX :: 0x2C5 HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS :: 0x2C6 -HID_USAGE_DIGITIZER_DIGITIZER :: 0x01 -HID_USAGE_DIGITIZER_PEN :: 0x02 -HID_USAGE_DIGITIZER_LIGHT_PEN :: 0x03 -HID_USAGE_DIGITIZER_TOUCH_SCREEN :: 0x04 -HID_USAGE_DIGITIZER_TOUCH_PAD :: 0x05 -HID_USAGE_DIGITIZER_WHITE_BOARD :: 0x06 -HID_USAGE_DIGITIZER_COORD_MEASURING :: 0x07 -HID_USAGE_DIGITIZER_3D_DIGITIZER :: 0x08 -HID_USAGE_DIGITIZER_STEREO_PLOTTER :: 0x09 -HID_USAGE_DIGITIZER_ARTICULATED_ARM :: 0x0A -HID_USAGE_DIGITIZER_ARMATURE :: 0x0B -HID_USAGE_DIGITIZER_MULTI_POINT :: 0x0C -HID_USAGE_DIGITIZER_FREE_SPACE_WAND :: 0x0D -HID_USAGE_DIGITIZER_HEAT_MAP :: 0x0F -HID_USAGE_DIGITIZER_STYLUS :: 0x20 -HID_USAGE_DIGITIZER_PUCK :: 0x21 -HID_USAGE_DIGITIZER_FINGER :: 0x22 +HID_USAGE_DIGITIZER_DIGITIZER :: 0x01 +HID_USAGE_DIGITIZER_PEN :: 0x02 +HID_USAGE_DIGITIZER_LIGHT_PEN :: 0x03 +HID_USAGE_DIGITIZER_TOUCH_SCREEN :: 0x04 +HID_USAGE_DIGITIZER_TOUCH_PAD :: 0x05 +HID_USAGE_DIGITIZER_WHITE_BOARD :: 0x06 +HID_USAGE_DIGITIZER_COORD_MEASURING :: 0x07 +HID_USAGE_DIGITIZER_3D_DIGITIZER :: 0x08 +HID_USAGE_DIGITIZER_STEREO_PLOTTER :: 0x09 +HID_USAGE_DIGITIZER_ARTICULATED_ARM :: 0x0A +HID_USAGE_DIGITIZER_ARMATURE :: 0x0B +HID_USAGE_DIGITIZER_MULTI_POINT :: 0x0C +HID_USAGE_DIGITIZER_FREE_SPACE_WAND :: 0x0D +HID_USAGE_DIGITIZER_HEAT_MAP :: 0x0F +HID_USAGE_DIGITIZER_STYLUS :: 0x20 +HID_USAGE_DIGITIZER_PUCK :: 0x21 +HID_USAGE_DIGITIZER_FINGER :: 0x22 HID_USAGE_DIGITIZER_TABLET_FUNC_KEYS :: 0x39 HID_USAGE_DIGITIZER_PROG_CHANGE_KEYS :: 0x3A -HID_USAGE_DIGITIZER_TIP_PRESSURE :: 0x30 -HID_USAGE_DIGITIZER_BARREL_PRESSURE :: 0x31 -HID_USAGE_DIGITIZER_IN_RANGE :: 0x32 -HID_USAGE_DIGITIZER_TOUCH :: 0x33 -HID_USAGE_DIGITIZER_UNTOUCH :: 0x34 -HID_USAGE_DIGITIZER_TAP :: 0x35 -HID_USAGE_DIGITIZER_QUALITY :: 0x36 -HID_USAGE_DIGITIZER_DATA_VALID :: 0x37 -HID_USAGE_DIGITIZER_TRANSDUCER_INDEX :: 0x38 -HID_USAGE_DIGITIZER_BATTERY_STRENGTH :: 0x3B -HID_USAGE_DIGITIZER_INVERT :: 0x3C -HID_USAGE_DIGITIZER_X_TILT :: 0x3D -HID_USAGE_DIGITIZER_Y_TILT :: 0x3E -HID_USAGE_DIGITIZER_AZIMUTH :: 0x3F -HID_USAGE_DIGITIZER_ALTITUDE :: 0x40 -HID_USAGE_DIGITIZER_TWIST :: 0x41 -HID_USAGE_DIGITIZER_TIP_SWITCH :: 0x42 -HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH :: 0x43 -HID_USAGE_DIGITIZER_BARREL_SWITCH :: 0x44 -HID_USAGE_DIGITIZER_ERASER :: 0x45 -HID_USAGE_DIGITIZER_TABLET_PICK :: 0x46 -HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL :: 0x5B +HID_USAGE_DIGITIZER_TIP_PRESSURE :: 0x30 +HID_USAGE_DIGITIZER_BARREL_PRESSURE :: 0x31 +HID_USAGE_DIGITIZER_IN_RANGE :: 0x32 +HID_USAGE_DIGITIZER_TOUCH :: 0x33 +HID_USAGE_DIGITIZER_UNTOUCH :: 0x34 +HID_USAGE_DIGITIZER_TAP :: 0x35 +HID_USAGE_DIGITIZER_QUALITY :: 0x36 +HID_USAGE_DIGITIZER_DATA_VALID :: 0x37 +HID_USAGE_DIGITIZER_TRANSDUCER_INDEX :: 0x38 +HID_USAGE_DIGITIZER_BATTERY_STRENGTH :: 0x3B +HID_USAGE_DIGITIZER_INVERT :: 0x3C +HID_USAGE_DIGITIZER_X_TILT :: 0x3D +HID_USAGE_DIGITIZER_Y_TILT :: 0x3E +HID_USAGE_DIGITIZER_AZIMUTH :: 0x3F +HID_USAGE_DIGITIZER_ALTITUDE :: 0x40 +HID_USAGE_DIGITIZER_TWIST :: 0x41 +HID_USAGE_DIGITIZER_TIP_SWITCH :: 0x42 +HID_USAGE_DIGITIZER_SECONDARY_TIP_SWITCH :: 0x43 +HID_USAGE_DIGITIZER_BARREL_SWITCH :: 0x44 +HID_USAGE_DIGITIZER_ERASER :: 0x45 +HID_USAGE_DIGITIZER_TABLET_PICK :: 0x46 +HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL :: 0x5B HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VENDOR_ID :: 0x6A -HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VERSION :: 0x6B -HID_USAGE_DIGITIZER_HEAT_MAP_FRAME_DATA :: 0x6C -HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_PART2 :: 0x6E -HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR :: 0x91 -HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT :: 0x92 -HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED :: 0xA2 +HID_USAGE_DIGITIZER_HEAT_MAP_PROTOCOL_VERSION :: 0x6B +HID_USAGE_DIGITIZER_HEAT_MAP_FRAME_DATA :: 0x6C +HID_USAGE_DIGITIZER_TRANSDUCER_SERIAL_PART2 :: 0x6E +HID_USAGE_DIGITIZER_TRANSDUCER_VENDOR :: 0x91 +HID_USAGE_DIGITIZER_TRANSDUCER_PRODUCT :: 0x92 +HID_USAGE_DIGITIZER_TRANSDUCER_CONNECTED :: 0xA2 HID_USAGE_HAPTICS_SIMPLE_CONTROLLER :: 0x01 HID_USAGE_HAPTICS_WAVEFORM_LIST :: 0x10 HID_USAGE_HAPTICS_DURATION_LIST :: 0x11 -HID_USAGE_HAPTICS_AUTO_TRIGGER :: 0x20 -HID_USAGE_HAPTICS_MANUAL_TRIGGER :: 0x21 +HID_USAGE_HAPTICS_AUTO_TRIGGER :: 0x20 +HID_USAGE_HAPTICS_MANUAL_TRIGGER :: 0x21 HID_USAGE_HAPTICS_AUTO_ASSOCIATED_CONTROL :: 0x22 -HID_USAGE_HAPTICS_INTENSITY :: 0x23 -HID_USAGE_HAPTICS_REPEAT_COUNT :: 0x24 -HID_USAGE_HAPTICS_RETRIGGER_PERIOD :: 0x25 -HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE :: 0x26 -HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID :: 0x27 -HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME :: 0x28 +HID_USAGE_HAPTICS_INTENSITY :: 0x23 +HID_USAGE_HAPTICS_REPEAT_COUNT :: 0x24 +HID_USAGE_HAPTICS_RETRIGGER_PERIOD :: 0x25 +HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE :: 0x26 +HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID :: 0x27 +HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME :: 0x28 // Waveform types -HID_USAGE_HAPTICS_WAVEFORM_BEGIN :: 0x1000 -HID_USAGE_HAPTICS_WAVEFORM_STOP :: 0x1001 -HID_USAGE_HAPTICS_WAVEFORM_NULL :: 0x1002 -HID_USAGE_HAPTICS_WAVEFORM_CLICK :: 0x1003 -HID_USAGE_HAPTICS_WAVEFORM_BUZZ :: 0x1004 -HID_USAGE_HAPTICS_WAVEFORM_RUMBLE :: 0x1005 -HID_USAGE_HAPTICS_WAVEFORM_PRESS :: 0x1006 +HID_USAGE_HAPTICS_WAVEFORM_BEGIN :: 0x1000 +HID_USAGE_HAPTICS_WAVEFORM_STOP :: 0x1001 +HID_USAGE_HAPTICS_WAVEFORM_NULL :: 0x1002 +HID_USAGE_HAPTICS_WAVEFORM_CLICK :: 0x1003 +HID_USAGE_HAPTICS_WAVEFORM_BUZZ :: 0x1004 +HID_USAGE_HAPTICS_WAVEFORM_RUMBLE :: 0x1005 +HID_USAGE_HAPTICS_WAVEFORM_PRESS :: 0x1006 HID_USAGE_HAPTICS_WAVEFORM_RELEASE :: 0x1007 -HID_USAGE_HAPTICS_WAVEFORM_END :: 0x1FFF +HID_USAGE_HAPTICS_WAVEFORM_END :: 0x1FFF HID_USAGE_HAPTICS_WAVEFORM_VENDOR_BEGIN :: 0x2000 -HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END :: 0x2FFF +HID_USAGE_HAPTICS_WAVEFORM_VENDOR_END :: 0x2FFF -HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY :: 0x01 -HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY :: 0x02 +HID_USAGE_ALPHANUMERIC_ALPHANUMERIC_DISPLAY :: 0x01 +HID_USAGE_ALPHANUMERIC_BITMAPPED_DISPLAY :: 0x02 HID_USAGE_ALPHANUMERIC_DISPLAY_ATTRIBUTES_REPORT :: 0x20 -HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT :: 0x24 -HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT :: 0x2B -HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS :: 0x2D -HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT :: 0x32 -HID_USAGE_ALPHANUMERIC_FONT_REPORT :: 0x3B -HID_USAGE_ALPHANUMERIC_FONT_DATA :: 0x3C -HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE :: 0x48 -HID_USAGE_ALPHANUMERIC_PALETTE_REPORT :: 0x85 -HID_USAGE_ALPHANUMERIC_PALETTE_DATA :: 0x88 -HID_USAGE_ALPHANUMERIC_BLIT_REPORT :: 0x8A -HID_USAGE_ALPHANUMERIC_BLIT_DATA :: 0x8F -HID_USAGE_ALPHANUMERIC_SOFT_BUTTON :: 0x90 +HID_USAGE_ALPHANUMERIC_DISPLAY_CONTROL_REPORT :: 0x24 +HID_USAGE_ALPHANUMERIC_CHARACTER_REPORT :: 0x2B +HID_USAGE_ALPHANUMERIC_DISPLAY_STATUS :: 0x2D +HID_USAGE_ALPHANUMERIC_CURSOR_POSITION_REPORT :: 0x32 +HID_USAGE_ALPHANUMERIC_FONT_REPORT :: 0x3B +HID_USAGE_ALPHANUMERIC_FONT_DATA :: 0x3C +HID_USAGE_ALPHANUMERIC_CHARACTER_ATTRIBUTE :: 0x48 +HID_USAGE_ALPHANUMERIC_PALETTE_REPORT :: 0x85 +HID_USAGE_ALPHANUMERIC_PALETTE_DATA :: 0x88 +HID_USAGE_ALPHANUMERIC_BLIT_REPORT :: 0x8A +HID_USAGE_ALPHANUMERIC_BLIT_DATA :: 0x8F +HID_USAGE_ALPHANUMERIC_SOFT_BUTTON :: 0x90 -HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET :: 0x21 -HID_USAGE_ALPHANUMERIC_DATA_READ_BACK :: 0x22 -HID_USAGE_ALPHANUMERIC_FONT_READ_BACK :: 0x23 -HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY :: 0x25 -HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE :: 0x26 -HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY :: 0x27 -HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE :: 0x28 -HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL :: 0x29 -HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL :: 0x2A -HID_USAGE_ALPHANUMERIC_DISPLAY_DATA :: 0x2C -HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY :: 0x2E -HID_USAGE_ALPHANUMERIC_STATUS_READY :: 0x2F +HID_USAGE_ALPHANUMERIC_ASCII_CHARACTER_SET :: 0x21 +HID_USAGE_ALPHANUMERIC_DATA_READ_BACK :: 0x22 +HID_USAGE_ALPHANUMERIC_FONT_READ_BACK :: 0x23 +HID_USAGE_ALPHANUMERIC_CLEAR_DISPLAY :: 0x25 +HID_USAGE_ALPHANUMERIC_DISPLAY_ENABLE :: 0x26 +HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_DELAY :: 0x27 +HID_USAGE_ALPHANUMERIC_SCREEN_SAVER_ENABLE :: 0x28 +HID_USAGE_ALPHANUMERIC_VERTICAL_SCROLL :: 0x29 +HID_USAGE_ALPHANUMERIC_HORIZONTAL_SCROLL :: 0x2A +HID_USAGE_ALPHANUMERIC_DISPLAY_DATA :: 0x2C +HID_USAGE_ALPHANUMERIC_STATUS_NOT_READY :: 0x2E +HID_USAGE_ALPHANUMERIC_STATUS_READY :: 0x2F HID_USAGE_ALPHANUMERIC_ERR_NOT_A_LOADABLE_CHARACTER :: 0x30 HID_USAGE_ALPHANUMERIC_ERR_FONT_DATA_CANNOT_BE_READ :: 0x31 -HID_USAGE_ALPHANUMERIC_ROW :: 0x33 -HID_USAGE_ALPHANUMERIC_COLUMN :: 0x34 -HID_USAGE_ALPHANUMERIC_ROWS :: 0x35 -HID_USAGE_ALPHANUMERIC_COLUMNS :: 0x36 -HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING :: 0x37 -HID_USAGE_ALPHANUMERIC_CURSOR_MODE :: 0x38 -HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE :: 0x39 -HID_USAGE_ALPHANUMERIC_CURSOR_BLINK :: 0x3A -HID_USAGE_ALPHANUMERIC_CHAR_WIDTH :: 0x3D -HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT :: 0x3E -HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL :: 0x3F -HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL :: 0x40 -HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET :: 0x41 -HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT :: 0x42 -HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP :: 0x43 -HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT :: 0x44 -HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP :: 0x45 -HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS :: 0x46 -HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST :: 0x47 -HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK :: 0x49 -HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA :: 0x4A -HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE :: 0x4B -HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE :: 0x4C -HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK :: 0x4D -HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X :: 0x80 -HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y :: 0x81 -HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT :: 0x83 -HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION :: 0x84 -HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE :: 0x86 -HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET :: 0x87 -HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 :: 0x8B -HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 :: 0x8C -HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 :: 0x8D -HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 :: 0x8E -HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID :: 0x91 -HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE :: 0x92 -HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 :: 0x93 -HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 :: 0x94 -HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT :: 0x95 +HID_USAGE_ALPHANUMERIC_ROW :: 0x33 +HID_USAGE_ALPHANUMERIC_COLUMN :: 0x34 +HID_USAGE_ALPHANUMERIC_ROWS :: 0x35 +HID_USAGE_ALPHANUMERIC_COLUMNS :: 0x36 +HID_USAGE_ALPHANUMERIC_CURSOR_PIXEL_POSITIONING :: 0x37 +HID_USAGE_ALPHANUMERIC_CURSOR_MODE :: 0x38 +HID_USAGE_ALPHANUMERIC_CURSOR_ENABLE :: 0x39 +HID_USAGE_ALPHANUMERIC_CURSOR_BLINK :: 0x3A +HID_USAGE_ALPHANUMERIC_CHAR_WIDTH :: 0x3D +HID_USAGE_ALPHANUMERIC_CHAR_HEIGHT :: 0x3E +HID_USAGE_ALPHANUMERIC_CHAR_SPACING_HORIZONTAL :: 0x3F +HID_USAGE_ALPHANUMERIC_CHAR_SPACING_VERTICAL :: 0x40 +HID_USAGE_ALPHANUMERIC_UNICODE_CHAR_SET :: 0x41 +HID_USAGE_ALPHANUMERIC_FONT_7_SEGMENT :: 0x42 +HID_USAGE_ALPHANUMERIC_7_SEGMENT_DIRECT_MAP :: 0x43 +HID_USAGE_ALPHANUMERIC_FONT_14_SEGMENT :: 0x44 +HID_USAGE_ALPHANUMERIC_14_SEGMENT_DIRECT_MAP :: 0x45 +HID_USAGE_ALPHANUMERIC_DISPLAY_BRIGHTNESS :: 0x46 +HID_USAGE_ALPHANUMERIC_DISPLAY_CONTRAST :: 0x47 +HID_USAGE_ALPHANUMERIC_ATTRIBUTE_READBACK :: 0x49 +HID_USAGE_ALPHANUMERIC_ATTRIBUTE_DATA :: 0x4A +HID_USAGE_ALPHANUMERIC_CHAR_ATTR_ENHANCE :: 0x4B +HID_USAGE_ALPHANUMERIC_CHAR_ATTR_UNDERLINE :: 0x4C +HID_USAGE_ALPHANUMERIC_CHAR_ATTR_BLINK :: 0x4D +HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_X :: 0x80 +HID_USAGE_ALPHANUMERIC_BITMAP_SIZE_Y :: 0x81 +HID_USAGE_ALPHANUMERIC_BIT_DEPTH_FORMAT :: 0x83 +HID_USAGE_ALPHANUMERIC_DISPLAY_ORIENTATION :: 0x84 +HID_USAGE_ALPHANUMERIC_PALETTE_DATA_SIZE :: 0x86 +HID_USAGE_ALPHANUMERIC_PALETTE_DATA_OFFSET :: 0x87 +HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X1 :: 0x8B +HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y1 :: 0x8C +HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_X2 :: 0x8D +HID_USAGE_ALPHANUMERIC_BLIT_RECTANGLE_Y2 :: 0x8E +HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_ID :: 0x91 +HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_SIDE :: 0x92 +HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET1 :: 0x93 +HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_OFFSET2 :: 0x94 +HID_USAGE_ALPHANUMERIC_SOFT_BUTTON_REPORT :: 0x95 -HID_USAGE_LAMPARRAY :: 0x01 -HID_USAGE_LAMPARRAY_ATTRBIUTES_REPORT :: 0x02 -HID_USAGE_LAMPARRAY_LAMP_COUNT :: 0x03 -HID_USAGE_LAMPARRAY_BOUNDING_BOX_WIDTH_IN_MICROMETERS :: 0x04 -HID_USAGE_LAMPARRAY_BOUNDING_BOX_HEIGHT_IN_MICROMETERS :: 0x05 -HID_USAGE_LAMPARRAY_BOUNDING_BOX_DEPTH_IN_MICROMETERS :: 0x06 -HID_USAGE_LAMPARRAY_KIND :: 0x07 +HID_USAGE_LAMPARRAY :: 0x01 +HID_USAGE_LAMPARRAY_ATTRBIUTES_REPORT :: 0x02 +HID_USAGE_LAMPARRAY_LAMP_COUNT :: 0x03 +HID_USAGE_LAMPARRAY_BOUNDING_BOX_WIDTH_IN_MICROMETERS :: 0x04 +HID_USAGE_LAMPARRAY_BOUNDING_BOX_HEIGHT_IN_MICROMETERS :: 0x05 +HID_USAGE_LAMPARRAY_BOUNDING_BOX_DEPTH_IN_MICROMETERS :: 0x06 +HID_USAGE_LAMPARRAY_KIND :: 0x07 HID_USAGE_LAMPARRAY_MIN_UPDATE_INTERVAL_IN_MICROSECONDS :: 0x08 // 0x09 - 0x1F Reserved -HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_REQUEST_REPORT :: 0x20 -HID_USAGE_LAMPARRAY_LAMP_ID :: 0x21 +HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_REQUEST_REPORT :: 0x20 +HID_USAGE_LAMPARRAY_LAMP_ID :: 0x21 HID_USAGE_LAMPARRAY_LAMP_ATTRIBUTES_RESPONSE_REPORT :: 0x22 -HID_USAGE_LAMPARRAY_POSITION_X_IN_MICROMETERS :: 0x23 -HID_USAGE_LAMPARRAY_POSITION_Y_IN_MICROMETERS :: 0x24 -HID_USAGE_LAMPARRAY_POSITION_Z_IN_MICROMETERS :: 0x25 -HID_USAGE_LAMPARRAY_LAMP_PURPOSES :: 0x26 -HID_USAGE_LAMPARRAY_UPDATE_LATENCY_IN_MICROSECONDS :: 0x27 -HID_USAGE_LAMPARRAY_RED_LEVEL_COUNT :: 0x28 -HID_USAGE_LAMPARRAY_GREEN_LEVEL_COUNT :: 0x29 -HID_USAGE_LAMPARRAY_BLUE_LEVEL_COUNT :: 0x2A -HID_USAGE_LAMPARRAY_INTENSITY_LEVEL_COUNT :: 0x2B -HID_USAGE_LAMPARRAY_IS_PROGRAMMABLE :: 0x2C -HID_USAGE_LAMPARRAY_INPUT_BINDING :: 0x2D +HID_USAGE_LAMPARRAY_POSITION_X_IN_MICROMETERS :: 0x23 +HID_USAGE_LAMPARRAY_POSITION_Y_IN_MICROMETERS :: 0x24 +HID_USAGE_LAMPARRAY_POSITION_Z_IN_MICROMETERS :: 0x25 +HID_USAGE_LAMPARRAY_LAMP_PURPOSES :: 0x26 +HID_USAGE_LAMPARRAY_UPDATE_LATENCY_IN_MICROSECONDS :: 0x27 +HID_USAGE_LAMPARRAY_RED_LEVEL_COUNT :: 0x28 +HID_USAGE_LAMPARRAY_GREEN_LEVEL_COUNT :: 0x29 +HID_USAGE_LAMPARRAY_BLUE_LEVEL_COUNT :: 0x2A +HID_USAGE_LAMPARRAY_INTENSITY_LEVEL_COUNT :: 0x2B +HID_USAGE_LAMPARRAY_IS_PROGRAMMABLE :: 0x2C +HID_USAGE_LAMPARRAY_INPUT_BINDING :: 0x2D // 0x2E - 0x4F Reserved -HID_USAGE_LAMPARRAY_LAMP_MULTI_UPDATE_REPORT :: 0x50 -HID_USAGE_LAMPARRAY_LAMP_RED_UPDATE_CHANNEL :: 0x51 -HID_USAGE_LAMPARRAY_LAMP_GREEN_UPDATE_CHANNEL :: 0x52 -HID_USAGE_LAMPARRAY_LAMP_BLUE_UPDATE_CHANNEL :: 0x53 +HID_USAGE_LAMPARRAY_LAMP_MULTI_UPDATE_REPORT :: 0x50 +HID_USAGE_LAMPARRAY_LAMP_RED_UPDATE_CHANNEL :: 0x51 +HID_USAGE_LAMPARRAY_LAMP_GREEN_UPDATE_CHANNEL :: 0x52 +HID_USAGE_LAMPARRAY_LAMP_BLUE_UPDATE_CHANNEL :: 0x53 HID_USAGE_LAMPARRAY_LAMP_INTENSITY_UPDATE_CHANNEL :: 0x54 -HID_USAGE_LAMPARRAY_LAMP_UPDATE_FLAGS :: 0x55 +HID_USAGE_LAMPARRAY_LAMP_UPDATE_FLAGS :: 0x55 // 0x55 - 0x5F Reserved HID_USAGE_LAMPARRAY_LAMP_RANGE_UPDATE_REPORT :: 0x60 -HID_USAGE_LAMPARRAY_LAMP_ID_START :: 0x61 -HID_USAGE_LAMPARRAY_LAMP_ID_END :: 0x62 +HID_USAGE_LAMPARRAY_LAMP_ID_START :: 0x61 +HID_USAGE_LAMPARRAY_LAMP_ID_END :: 0x62 // 0x63 - 0x6F Reserved -HID_USAGE_LAMPARRAY_CONTROL_REPORT :: 0x70 +HID_USAGE_LAMPARRAY_CONTROL_REPORT :: 0x70 HID_USAGE_LAMPARRAY_AUTONOMOUS_MODE :: 0x71 HID_USAGE_CAMERA_AUTO_FOCUS :: 0x20 -HID_USAGE_CAMERA_SHUTTER :: 0x21 +HID_USAGE_CAMERA_SHUTTER :: 0x21 HID_USAGE_MS_BTH_HF_DIALNUMBER :: 0x21 HID_USAGE_MS_BTH_HF_DIALMEMORY :: 0x22 diff --git a/core/sys/windows/icu.odin b/core/sys/windows/icu.odin index b481a05a9..7be9ce4c6 100644 --- a/core/sys/windows/icu.odin +++ b/core/sys/windows/icu.odin @@ -10,7 +10,7 @@ UError :: enum i32 { @(default_calling_convention="system") foreign icu { ucal_getWindowsTimeZoneID :: proc(id: wstring, len: i32, winid: wstring, winidCapacity: i32, status: ^UError) -> i32 --- - ucal_getDefaultTimeZone :: proc(result: wstring, cap: i32, status: ^UError) -> i32 --- + ucal_getDefaultTimeZone :: proc(result: wstring, cap: i32, status: ^UError) -> i32 --- } diff --git a/core/sys/windows/ip_helper.odin b/core/sys/windows/ip_helper.odin index da23a064f..74ffa95b9 100644 --- a/core/sys/windows/ip_helper.odin +++ b/core/sys/windows/ip_helper.odin @@ -223,7 +223,7 @@ foreign iphlpapi { The GetAdaptersAddresses function retrieves the addresses associated with the adapters on the local computer. See: https://docs.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses */ - @(link_name="GetAdaptersAddresses") get_adapters_addresses :: proc( + GetAdaptersAddresses :: proc( family: Address_Family, flags: GAA_Flags, _reserved: rawptr, @@ -232,3 +232,5 @@ foreign iphlpapi { ) -> ULONG --- } + +get_adapters_addresses :: GetAdaptersAddresses \ No newline at end of file diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index e5163bac7..0ad11121e 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -60,15 +60,15 @@ foreign kernel32 { // https://learn.microsoft.com/en-us/windows/console/getnumberofconsoleinputevents GetNumberOfConsoleInputEvents :: proc(hConsoleInput: HANDLE, lpcNumberOfEvents: LPDWORD) -> BOOL --- - GetConsoleMode :: proc(hConsoleHandle: HANDLE, lpMode: LPDWORD) -> BOOL --- - SetConsoleMode :: proc(hConsoleHandle: HANDLE, dwMode: DWORD) -> BOOL --- + GetConsoleMode :: proc(hConsoleHandle: HANDLE, lpMode: LPDWORD) -> BOOL --- + SetConsoleMode :: proc(hConsoleHandle: HANDLE, dwMode: DWORD) -> BOOL --- SetConsoleCursorPosition :: proc(hConsoleHandle: HANDLE, dwCursorPosition: COORD) -> BOOL --- - SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL --- - GetConsoleCP :: proc() -> CODEPAGE --- - SetConsoleCP :: proc(wCodePageID: CODEPAGE) -> BOOL --- - GetConsoleOutputCP :: proc() -> CODEPAGE --- - SetConsoleOutputCP :: proc(wCodePageID: CODEPAGE) -> BOOL --- - FlushConsoleInputBuffer :: proc(hConsoleInput: HANDLE) -> BOOL --- + SetConsoleTextAttribute :: proc(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL --- + GetConsoleCP :: proc() -> CODEPAGE --- + SetConsoleCP :: proc(wCodePageID: CODEPAGE) -> BOOL --- + GetConsoleOutputCP :: proc() -> CODEPAGE --- + SetConsoleOutputCP :: proc(wCodePageID: CODEPAGE) -> BOOL --- + FlushConsoleInputBuffer :: proc(hConsoleInput: HANDLE) -> BOOL --- GetFileInformationByHandle :: proc(hFile: HANDLE, lpFileInformation: LPBY_HANDLE_FILE_INFORMATION) -> BOOL --- @@ -82,11 +82,11 @@ foreign kernel32 { dwBufferSize: DWORD) -> BOOL --- - AddVectoredExceptionHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID --- - AddVectoredContinueHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID --- + AddVectoredExceptionHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID --- + AddVectoredContinueHandler :: proc(FirstHandler: ULONG, VectoredHandler: PVECTORED_EXCEPTION_HANDLER) -> LPVOID --- RemoveVectoredExceptionHandler :: proc(Handle: LPVOID) -> DWORD --- - RemoveVectoredContinueHandler :: proc(Handle: LPVOID) -> DWORD --- - RaiseException :: proc(dwExceptionCode, dwExceptionFlags, nNumberOfArguments: DWORD, lpArguments: ^ULONG_PTR) -> ! --- + RemoveVectoredContinueHandler :: proc(Handle: LPVOID) -> DWORD --- + RaiseException :: proc(dwExceptionCode, dwExceptionFlags, nNumberOfArguments: DWORD, lpArguments: ^ULONG_PTR) -> ! --- SetUnhandledExceptionFilter :: proc(lpTopLevelExceptionFilter: LPTOP_LEVEL_EXCEPTION_FILTER) -> LPTOP_LEVEL_EXCEPTION_FILTER --- @@ -103,31 +103,31 @@ foreign kernel32 { lpFileInformation: LPVOID, dwBufferSize: DWORD) -> BOOL --- - InitializeCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- + InitializeCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- InitializeCriticalSectionAndSpinCount :: proc(CriticalSection: ^CRITICAL_SECTION, dwSpinCount: DWORD) -> BOOL --- - EnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- - TryEnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) -> BOOLEAN --- - LeaveCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- - DeleteCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- + EnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- + TryEnterCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) -> BOOLEAN --- + LeaveCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- + DeleteCriticalSection :: proc(CriticalSection: ^CRITICAL_SECTION) --- - RemoveDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL --- - SetFileAttributesW :: proc(lpFileName: LPCWSTR, dwFileAttributes: DWORD) -> BOOL --- - SetLastError :: proc(dwErrCode: DWORD) --- - GetCommTimeouts :: proc(handle: HANDLE, timeouts: ^COMMTIMEOUTS) -> BOOL --- - SetCommTimeouts :: proc(handle: HANDLE, timeouts: ^COMMTIMEOUTS) -> BOOL --- - ClearCommError :: proc(hFile: HANDLE, lpErrors: ^Com_Error, lpStat: ^COMSTAT) -> BOOL --- - GetCommState :: proc(handle: HANDLE, dcb: ^DCB) -> BOOL --- - SetCommState :: proc(handle: HANDLE, dcb: ^DCB) -> BOOL --- - SetCommMask :: proc(handle: HANDLE, dwEvtMap: DWORD) -> BOOL --- - GetCommMask :: proc(handle: HANDLE, lpEvtMask: LPDWORD) -> BOOL --- - WaitCommEvent :: proc(handle: HANDLE, lpEvtMask: LPDWORD, lpOverlapped: LPOVERLAPPED) -> BOOL --- - GetCommandLineW :: proc() -> LPCWSTR --- - GetTempPathW :: proc(nBufferLength: DWORD, lpBuffer: LPCWSTR) -> DWORD --- - GetTempFileNameW :: proc(lpPathName: LPCWSTR, lpPrefixString: LPCWSTR, uUnique: c_int, lpTempFileName: LPWSTR) -> c_uint --- - GetCurrentProcess :: proc() -> HANDLE --- + RemoveDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL --- + SetFileAttributesW :: proc(lpFileName: LPCWSTR, dwFileAttributes: DWORD) -> BOOL --- + SetLastError :: proc(dwErrCode: DWORD) --- + GetCommTimeouts :: proc(handle: HANDLE, timeouts: ^COMMTIMEOUTS) -> BOOL --- + SetCommTimeouts :: proc(handle: HANDLE, timeouts: ^COMMTIMEOUTS) -> BOOL --- + ClearCommError :: proc(hFile: HANDLE, lpErrors: ^Com_Error, lpStat: ^COMSTAT) -> BOOL --- + GetCommState :: proc(handle: HANDLE, dcb: ^DCB) -> BOOL --- + SetCommState :: proc(handle: HANDLE, dcb: ^DCB) -> BOOL --- + SetCommMask :: proc(handle: HANDLE, dwEvtMap: DWORD) -> BOOL --- + GetCommMask :: proc(handle: HANDLE, lpEvtMask: LPDWORD) -> BOOL --- + WaitCommEvent :: proc(handle: HANDLE, lpEvtMask: LPDWORD, lpOverlapped: LPOVERLAPPED) -> BOOL --- + GetCommandLineW :: proc() -> LPCWSTR --- + GetTempPathW :: proc(nBufferLength: DWORD, lpBuffer: LPCWSTR) -> DWORD --- + GetTempFileNameW :: proc(lpPathName: LPCWSTR, lpPrefixString: LPCWSTR, uUnique: c_int, lpTempFileName: LPWSTR) -> c_uint --- + GetCurrentProcess :: proc() -> HANDLE --- GetCurrentProcessId :: proc() -> DWORD --- - GetCurrentThread :: proc() -> HANDLE --- - GetCurrentThreadId :: proc() -> DWORD --- + GetCurrentThread :: proc() -> HANDLE --- + GetCurrentThreadId :: proc() -> DWORD --- GetProcessTimes :: proc( hProcess: HANDLE, lpCreationTime: LPFILETIME, @@ -136,7 +136,7 @@ foreign kernel32 { lpUserTime: LPFILETIME, ) -> BOOL --- GetStdHandle :: proc(which: DWORD) -> HANDLE --- - ExitProcess :: proc(uExitCode: c_uint) -> ! --- + ExitProcess :: proc(uExitCode: c_uint) -> ! --- DeviceIoControl :: proc( hDevice: HANDLE, dwIoControlCode: DWORD, @@ -164,15 +164,15 @@ foreign kernel32 { dwCreationFlags: DWORD, lpThreadId: LPDWORD, ) -> HANDLE --- - SwitchToThread :: proc() -> BOOL --- - ResumeThread :: proc(thread: HANDLE) -> DWORD --- - GetThreadPriority :: proc(thread: HANDLE) -> c_int --- - SetThreadPriority :: proc(thread: HANDLE, priority: c_int) -> BOOL --- + SwitchToThread :: proc() -> BOOL --- + ResumeThread :: proc(thread: HANDLE) -> DWORD --- + GetThreadPriority :: proc(thread: HANDLE) -> c_int --- + SetThreadPriority :: proc(thread: HANDLE, priority: c_int) -> BOOL --- GetThreadDescription :: proc(hThread: HANDLE, ppszThreadDescription: ^PCWSTR) -> HRESULT --- SetThreadDescription :: proc(hThread: HANDLE, lpThreadDescription: PCWSTR) -> HRESULT --- - GetExitCodeThread :: proc(thread: HANDLE, exit_code: ^DWORD) -> BOOL --- - TerminateThread :: proc(thread: HANDLE, exit_code: DWORD) -> BOOL --- - SuspendThread :: proc(hThread: HANDLE) -> DWORD --- + GetExitCodeThread :: proc(thread: HANDLE, exit_code: ^DWORD) -> BOOL --- + TerminateThread :: proc(thread: HANDLE, exit_code: DWORD) -> BOOL --- + SuspendThread :: proc(hThread: HANDLE) -> DWORD --- GetProcessAffinityMask :: proc( hProcess: HANDLE, @@ -237,17 +237,17 @@ foreign kernel32 { nsize: DWORD, args: rawptr, ) -> DWORD --- - TlsAlloc :: proc() -> DWORD --- - TlsFree :: proc(dwTlsIndex: DWORD) -> BOOL --- - TlsGetValue :: proc(dwTlsIndex: DWORD) -> LPVOID --- - TlsSetValue :: proc(dwTlsIndex: DWORD, lpTlsvalue: LPVOID) -> BOOL --- - GetLastError :: proc() -> DWORD --- + TlsAlloc :: proc() -> DWORD --- + TlsFree :: proc(dwTlsIndex: DWORD) -> BOOL --- + TlsGetValue :: proc(dwTlsIndex: DWORD) -> LPVOID --- + TlsSetValue :: proc(dwTlsIndex: DWORD, lpTlsvalue: LPVOID) -> BOOL --- + GetLastError :: proc() -> DWORD --- QueryPerformanceFrequency :: proc(lpFrequency: ^LARGE_INTEGER) -> BOOL --- - QueryPerformanceCounter :: proc(lpPerformanceCount: ^LARGE_INTEGER) -> BOOL --- - GetExitCodeProcess :: proc(hProcess: HANDLE, lpExitCode: LPDWORD) -> BOOL --- - TerminateProcess :: proc(hProcess: HANDLE, uExitCode: UINT) -> BOOL --- - OpenProcess :: proc(dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwProcessId: DWORD) -> HANDLE --- - OpenThread :: proc(dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwThreadId: DWORD) -> HANDLE --- + QueryPerformanceCounter :: proc(lpPerformanceCount: ^LARGE_INTEGER) -> BOOL --- + GetExitCodeProcess :: proc(hProcess: HANDLE, lpExitCode: LPDWORD) -> BOOL --- + TerminateProcess :: proc(hProcess: HANDLE, uExitCode: UINT) -> BOOL --- + OpenProcess :: proc(dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwProcessId: DWORD) -> HANDLE --- + OpenThread :: proc(dwDesiredAccess: DWORD, bInheritHandle: BOOL, dwThreadId: DWORD) -> HANDLE --- GetThreadContext :: proc( hThread: HANDLE, lpContext: LPCONTEXT, @@ -366,14 +366,14 @@ foreign kernel32 { ) -> BOOL --- CompareFileTime :: proc(lpFileTime1: LPFILETIME, lpFileTime2: LPFILETIME) -> LONG --- - FindFirstFileW :: proc(fileName: LPCWSTR, findFileData: LPWIN32_FIND_DATAW) -> HANDLE --- - FindNextFileW :: proc(findFile: HANDLE, findFileData: LPWIN32_FIND_DATAW) -> BOOL --- - FindClose :: proc(findFile: HANDLE) -> BOOL --- - GetModuleHandleW :: proc(lpModuleName: LPCWSTR) -> HMODULE --- - GetModuleHandleA :: proc(lpModuleName: LPCSTR) -> HMODULE --- - GetSystemTimeAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) --- - GetSystemTimePreciseAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) --- - FileTimeToSystemTime :: proc(lpFileTime: ^FILETIME, lpSystemTime: ^SYSTEMTIME) -> BOOL --- + FindFirstFileW :: proc(fileName: LPCWSTR, findFileData: LPWIN32_FIND_DATAW) -> HANDLE --- + FindNextFileW :: proc(findFile: HANDLE, findFileData: LPWIN32_FIND_DATAW) -> BOOL --- + FindClose :: proc(findFile: HANDLE) -> BOOL --- + GetModuleHandleW :: proc(lpModuleName: LPCWSTR) -> HMODULE --- + GetModuleHandleA :: proc(lpModuleName: LPCSTR) -> HMODULE --- + GetSystemTimeAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) --- + GetSystemTimePreciseAsFileTime :: proc(lpSystemTimeAsFileTime: LPFILETIME) --- + FileTimeToSystemTime :: proc(lpFileTime: ^FILETIME, lpSystemTime: ^SYSTEMTIME) -> BOOL --- SystemTimeToTzSpecificLocalTime :: proc( lpTimeZoneInformation: ^TIME_ZONE_INFORMATION, lpUniversalTime: ^SYSTEMTIME, @@ -428,7 +428,7 @@ foreign kernel32 { lpTotalBytesAvail: ^u32, lpBytesLeftThisMessage: ^u32, ) -> BOOL --- - CancelIo :: proc(handle: HANDLE) -> BOOL --- + CancelIo :: proc(handle: HANDLE) -> BOOL --- CancelIoEx :: proc(hFile: HANDLE, lpOverlapped: LPOVERLAPPED) -> BOOL --- GetOverlappedResult :: proc( hFile: HANDLE, @@ -437,19 +437,19 @@ foreign kernel32 { bWait: BOOL, ) -> BOOL --- GetProcessHeap :: proc() -> HANDLE --- - HeapAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) -> LPVOID --- - HeapReAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID, dwBytes: SIZE_T) -> LPVOID --- - HeapFree :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL --- + HeapAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, dwBytes: SIZE_T) -> LPVOID --- + HeapReAlloc :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID, dwBytes: SIZE_T) -> LPVOID --- + HeapFree :: proc(hHeap: HANDLE, dwFlags: DWORD, lpMem: LPVOID) -> BOOL --- - LocalAlloc :: proc(flags: UINT, bytes: SIZE_T) -> LPVOID --- + LocalAlloc :: proc(flags: UINT, bytes: SIZE_T) -> LPVOID --- LocalReAlloc :: proc(mem: LPVOID, bytes: SIZE_T, flags: UINT) -> LPVOID --- - LocalFree :: proc(mem: LPVOID) -> LPVOID --- + LocalFree :: proc(mem: LPVOID) -> LPVOID --- - GlobalAlloc :: proc(flags: UINT, bytes: SIZE_T) -> LPVOID --- + GlobalAlloc :: proc(flags: UINT, bytes: SIZE_T) -> LPVOID --- GlobalReAlloc :: proc(mem: LPVOID, bytes: SIZE_T, flags: UINT) -> LPVOID --- - GlobalFree :: proc(mem: LPVOID) -> LPVOID --- + GlobalFree :: proc(mem: LPVOID) -> LPVOID --- - GlobalLock :: proc(hMem: HGLOBAL) -> LPVOID --- + GlobalLock :: proc(hMem: HGLOBAL) -> LPVOID --- GlobalUnlock :: proc(hMem: HGLOBAL) -> BOOL --- ReadDirectoryChangesW :: proc( @@ -467,16 +467,16 @@ foreign kernel32 { bWatchSubtree: BOOL, dwNotifyFilter: DWORD, ) -> HANDLE --- - FindNextChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL --- + FindNextChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL --- FindCloseChangeNotification :: proc(hChangeHandle: HANDLE) -> BOOL --- InitializeSRWLock :: proc(SRWLock: ^SRWLOCK) --- AcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) --- TryAcquireSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) -> BOOLEAN --- ReleaseSRWLockExclusive :: proc(SRWLock: ^SRWLOCK) --- - AcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) --- - TryAcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) -> BOOLEAN --- - ReleaseSRWLockShared :: proc(SRWLock: ^SRWLOCK) --- + AcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) --- + TryAcquireSRWLockShared :: proc(SRWLock: ^SRWLOCK) -> BOOLEAN --- + ReleaseSRWLockShared :: proc(SRWLock: ^SRWLOCK) --- InitializeConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) --- WakeConditionVariable :: proc(ConditionVariable: ^CONDITION_VARIABLE) --- @@ -485,42 +485,42 @@ foreign kernel32 { SleepConditionVariableSRW :: proc(ConditionVariable: ^CONDITION_VARIABLE, SRWLock: ^SRWLOCK, dwMilliseconds: DWORD, Flags: LONG) -> BOOL --- - GetFileType :: proc(file_handle: HANDLE) -> DWORD --- - SetFilePointer :: proc(file_handle: HANDLE, distance_to_move: LONG, distance_to_move_high: ^LONG, move_method: DWORD) -> DWORD --- - GetFileSizeEx :: proc(file_handle: HANDLE, file_size: ^LARGE_INTEGER) -> BOOL --- - GetFileAttributesW :: proc(lpFileName: LPCWSTR) -> DWORD --- - GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL --- - GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) --- - GetVersionExW :: proc(osvi: ^OSVERSIONINFOEXW) --- - GetSystemDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT --- - GetWindowsDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT --- - GetSystemDefaultLangID :: proc() -> LANGID --- - GetSystemDefaultLCID :: proc() -> LCID --- + GetFileType :: proc(file_handle: HANDLE) -> DWORD --- + SetFilePointer :: proc(file_handle: HANDLE, distance_to_move: LONG, distance_to_move_high: ^LONG, move_method: DWORD) -> DWORD --- + GetFileSizeEx :: proc(file_handle: HANDLE, file_size: ^LARGE_INTEGER) -> BOOL --- + GetFileAttributesW :: proc(lpFileName: LPCWSTR) -> DWORD --- + GetFileAttributesExW :: proc(lpFileName: LPCWSTR, fInfoLevelId: GET_FILEEX_INFO_LEVELS, lpFileInformation: LPVOID) -> BOOL --- + GetSystemInfo :: proc(system_info: ^SYSTEM_INFO) --- + GetVersionExW :: proc(osvi: ^OSVERSIONINFOEXW) --- + GetSystemDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT --- + GetWindowsDirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT --- + GetSystemDefaultLangID :: proc() -> LANGID --- + GetSystemDefaultLCID :: proc() -> LCID --- GetSystemDefaultLocaleName :: proc(lpLocaleName: LPWSTR, cchLocaleName: INT) -> INT --- - LCIDToLocaleName :: proc(Locale: LCID, lpName: LPWSTR, cchName: INT, dwFlags: DWORD) -> INT --- - LocaleNameToLCID :: proc(lpName: LPCWSTR, dwFlags: DWORD) -> LCID --- - SetDllDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL --- - AddDllDirectory :: proc(NewDirectory: PCWSTR) -> rawptr --- - RemoveDllDirectory :: proc(Cookie: rawptr) -> BOOL --- - LoadLibraryW :: proc(c_str: LPCWSTR) -> HMODULE --- - LoadLibraryExW :: proc(c_str: LPCWSTR, hFile: HANDLE, dwFlags: LoadLibraryEx_Flags) -> HMODULE --- - FreeLibrary :: proc(h: HMODULE) -> BOOL --- - FreeLibraryAndExitThread :: proc(hLibModule: HMODULE, dwExitCode: DWORD) -> VOID --- - GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr --- + LCIDToLocaleName :: proc(Locale: LCID, lpName: LPWSTR, cchName: INT, dwFlags: DWORD) -> INT --- + LocaleNameToLCID :: proc(lpName: LPCWSTR, dwFlags: DWORD) -> LCID --- + SetDllDirectoryW :: proc(lpPathName: LPCWSTR) -> BOOL --- + AddDllDirectory :: proc(NewDirectory: PCWSTR) -> rawptr --- + RemoveDllDirectory :: proc(Cookie: rawptr) -> BOOL --- + LoadLibraryW :: proc(c_str: LPCWSTR) -> HMODULE --- + LoadLibraryExW :: proc(c_str: LPCWSTR, hFile: HANDLE, dwFlags: LoadLibraryEx_Flags) -> HMODULE --- + FreeLibrary :: proc(h: HMODULE) -> BOOL --- + FreeLibraryAndExitThread :: proc(hLibModule: HMODULE, dwExitCode: DWORD) -> VOID --- + GetProcAddress :: proc(h: HMODULE, c_str: LPCSTR) -> rawptr --- - LoadResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> HGLOBAL --- - FreeResource :: proc(hResData: HGLOBAL) -> BOOL --- - LockResource :: proc(hResData: HGLOBAL) -> LPVOID --- - SizeofResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> DWORD --- - FindResourceW :: proc(hModule: HMODULE, lpName: LPCWSTR, lpType: LPCWSTR) -> HRSRC --- - FindResourceExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, wLanguage: LANGID) -> HRSRC --- - EnumResourceNamesW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR) -> BOOL --- - EnumResourceNamesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL --- - EnumResourceTypesExW :: proc(hModule: HMODULE, lpEnumFunc: ENUMRESTYPEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL --- - EnumResourceLanguagesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, lpEnumFunc: ENUMRESLANGPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL --- - LookupIconIdFromDirectory :: proc(presbits: PBYTE, fIcon: BOOL) -> INT --- + LoadResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> HGLOBAL --- + FreeResource :: proc(hResData: HGLOBAL) -> BOOL --- + LockResource :: proc(hResData: HGLOBAL) -> LPVOID --- + SizeofResource :: proc(hModule: HMODULE, hResInfo: HRSRC) -> DWORD --- + FindResourceW :: proc(hModule: HMODULE, lpName: LPCWSTR, lpType: LPCWSTR) -> HRSRC --- + FindResourceExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, wLanguage: LANGID) -> HRSRC --- + EnumResourceNamesW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR) -> BOOL --- + EnumResourceNamesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpEnumFunc: ENUMRESNAMEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL --- + EnumResourceTypesExW :: proc(hModule: HMODULE, lpEnumFunc: ENUMRESTYPEPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL --- + EnumResourceLanguagesExW :: proc(hModule: HMODULE, lpType: LPCWSTR, lpName: LPCWSTR, lpEnumFunc: ENUMRESLANGPROCW, lParam: LONG_PTR, dwFlags: DWORD, LangId: LANGID) -> BOOL --- + LookupIconIdFromDirectory :: proc(presbits: PBYTE, fIcon: BOOL) -> INT --- LookupIconIdFromDirectoryEx :: proc(presbits: PBYTE, fIcon: BOOL, cxDesired: INT, cyDesired: INT, Flags: UINT) -> INT --- - CreateIconFromResourceEx :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD, cxDesired: INT, cyDesired: INT, Flags: UINT) -> HICON --- + CreateIconFromResourceEx :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD, cxDesired: INT, cyDesired: INT, Flags: UINT) -> HICON --- GetFullPathNameW :: proc(filename: LPCWSTR, buffer_length: DWORD, buffer: LPCWSTR, file_part: ^LPCWSTR) -> DWORD --- GetLongPathNameW :: proc(short, long: LPCWSTR, len: DWORD) -> DWORD --- @@ -533,21 +533,21 @@ foreign kernel32 { CreatePipe :: proc(hReadPipe, hWritePipe: ^HANDLE, lpPipeAttributes: LPSECURITY_ATTRIBUTES, nSize: DWORD) -> BOOL --- - ConnectNamedPipe :: proc(hNamedPipe: HANDLE, lpOverlapped: LPOVERLAPPED) -> BOOL --- + ConnectNamedPipe :: proc(hNamedPipe: HANDLE, lpOverlapped: LPOVERLAPPED) -> BOOL --- DisconnectNamedPipe :: proc(hNamedPipe: HANDLE) -> BOOL --- - WaitNamedPipeW :: proc(lpNamedPipeName: LPCWSTR, nTimeOut: DWORD) -> BOOL --- + WaitNamedPipeW :: proc(lpNamedPipeName: LPCWSTR, nTimeOut: DWORD) -> BOOL --- - AllocConsole :: proc() -> BOOL --- - AttachConsole :: proc(dwProcessId: DWORD) -> BOOL --- - SetConsoleCtrlHandler :: proc(HandlerRoutine: PHANDLER_ROUTINE, Add: BOOL) -> BOOL --- - GenerateConsoleCtrlEvent :: proc(dwCtrlEvent: DWORD, dwProcessGroupId: DWORD) -> BOOL --- - FreeConsole :: proc() -> BOOL --- - GetConsoleWindow :: proc() -> HWND --- + AllocConsole :: proc() -> BOOL --- + AttachConsole :: proc(dwProcessId: DWORD) -> BOOL --- + SetConsoleCtrlHandler :: proc(HandlerRoutine: PHANDLER_ROUTINE, Add: BOOL) -> BOOL --- + GenerateConsoleCtrlEvent :: proc(dwCtrlEvent: DWORD, dwProcessGroupId: DWORD) -> BOOL --- + FreeConsole :: proc() -> BOOL --- + GetConsoleWindow :: proc() -> HWND --- GetConsoleScreenBufferInfo :: proc(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: PCONSOLE_SCREEN_BUFFER_INFO) -> BOOL --- SetConsoleScreenBufferSize :: proc(hConsoleOutput: HANDLE, dwSize: COORD) -> BOOL --- - SetConsoleWindowInfo :: proc(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: ^SMALL_RECT) -> BOOL --- - GetConsoleCursorInfo :: proc(hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO) -> BOOL --- - SetConsoleCursorInfo :: proc(hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO) -> BOOL --- + SetConsoleWindowInfo :: proc(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: ^SMALL_RECT) -> BOOL --- + GetConsoleCursorInfo :: proc(hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO) -> BOOL --- + SetConsoleCursorInfo :: proc(hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO) -> BOOL --- GetDiskFreeSpaceExW :: proc( lpDirectoryName: LPCWSTR, @@ -561,15 +561,15 @@ foreign kernel32 { // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setfilecompletionnotificationmodes) SetFileCompletionNotificationModes :: proc(FileHandle: HANDLE, Flags: u8) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-createiocompletionport) - CreateIoCompletionPort :: proc(FileHandle: HANDLE, ExistingCompletionPort: HANDLE, CompletionKey: ULONG_PTR, NumberOfConcurrentThreads: DWORD) -> HANDLE --- + CreateIoCompletionPort :: proc(FileHandle: HANDLE, ExistingCompletionPort: HANDLE, CompletionKey: ULONG_PTR, NumberOfConcurrentThreads: DWORD) -> HANDLE --- //[MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatus) - GetQueuedCompletionStatus :: proc(CompletionPort: HANDLE, lpNumberOfBytesTransferred: ^DWORD, lpCompletionKey: PULONG_PTR, lpOverlapped: ^^OVERLAPPED, dwMilliseconds: DWORD) -> BOOL --- + GetQueuedCompletionStatus :: proc(CompletionPort: HANDLE, lpNumberOfBytesTransferred: ^DWORD, lpCompletionKey: PULONG_PTR, lpOverlapped: ^^OVERLAPPED, dwMilliseconds: DWORD) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatusex) - GetQueuedCompletionStatusEx :: proc(CompletionPort: HANDLE, lpCompletionPortEntries: ^OVERLAPPED_ENTRY, ulCount: c_ulong, ulNumEntriesRemoved: ^c_ulong, dwMilliseconds: DWORD, fAlertable: BOOL) -> BOOL --- + GetQueuedCompletionStatusEx :: proc(CompletionPort: HANDLE, lpCompletionPortEntries: ^OVERLAPPED_ENTRY, ulCount: c_ulong, ulNumEntriesRemoved: ^c_ulong, dwMilliseconds: DWORD, fAlertable: BOOL) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-postqueuedcompletionstatus) - PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: c_ulong, lpOverlapped: ^OVERLAPPED) -> BOOL --- + PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: c_ulong, lpOverlapped: ^OVERLAPPED) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation) - GetHandleInformation :: proc(hObject: HANDLE, lpdwFlags: ^DWORD) -> BOOL --- + GetHandleInformation :: proc(hObject: HANDLE, lpdwFlags: ^DWORD) -> BOOL --- RtlCaptureStackBackTrace :: proc(FramesToSkip: ULONG, FramesToCapture: ULONG, BackTrace: [^]PVOID, BackTraceHash: PULONG) -> USHORT --- RtlNtStatusToDosError :: proc(status: NTSTATUS) -> ULONG --- @@ -625,44 +625,44 @@ THREAD_PRIORITY_IDLE :: THREAD_BASE_PRIORITY_IDLE THREAD_MODE_BACKGROUND_BEGIN :: 0x00010000 THREAD_MODE_BACKGROUND_END :: 0x00020000 -PROCESS_ALL_ACCESS :: 0x000F0000 | SYNCHRONIZE | 0xFFFF -PROCESS_CREATE_PROCESS :: 0x0080 -PROCESS_CREATE_THREAD :: 0x0002 -PROCESS_DUP_HANDLE :: 0x0040 -PROCESS_QUERY_INFORMATION :: 0x0400 +PROCESS_ALL_ACCESS :: 0x000F0000 | SYNCHRONIZE | 0xFFFF +PROCESS_CREATE_PROCESS :: 0x0080 +PROCESS_CREATE_THREAD :: 0x0002 +PROCESS_DUP_HANDLE :: 0x0040 +PROCESS_QUERY_INFORMATION :: 0x0400 PROCESS_QUERY_LIMITED_INFORMATION :: 0x1000 -PROCESS_SET_INFORMATION :: 0x0200 -PROCESS_SET_QUOTA :: 0x0100 -PROCESS_SUSPEND_RESUME :: 0x0800 -PROCESS_TERMINATE :: 0x0001 -PROCESS_VM_OPERATION :: 0x0008 -PROCESS_VM_READ :: 0x0010 -PROCESS_VM_WRITE :: 0x0020 +PROCESS_SET_INFORMATION :: 0x0200 +PROCESS_SET_QUOTA :: 0x0100 +PROCESS_SUSPEND_RESUME :: 0x0800 +PROCESS_TERMINATE :: 0x0001 +PROCESS_VM_OPERATION :: 0x0008 +PROCESS_VM_READ :: 0x0010 +PROCESS_VM_WRITE :: 0x0020 THREAD_ALL_ACCESS :: \ - THREAD_DIRECT_IMPERSONATION | - THREAD_GET_CONTEXT | - THREAD_IMPERSONATE | - THREAD_QUERY_INFORMATION | + THREAD_DIRECT_IMPERSONATION | + THREAD_GET_CONTEXT | + THREAD_IMPERSONATE | + THREAD_QUERY_INFORMATION | THREAD_QUERY_LIMITED_INFORMATION | - THREAD_SET_CONTEXT | - THREAD_SET_INFORMATION | - THREAD_SET_LIMITED_INFORMATION | - THREAD_SET_THREAD_TOKEN | - THREAD_SUSPEND_RESUME | - THREAD_TERMINATE | + THREAD_SET_CONTEXT | + THREAD_SET_INFORMATION | + THREAD_SET_LIMITED_INFORMATION | + THREAD_SET_THREAD_TOKEN | + THREAD_SUSPEND_RESUME | + THREAD_TERMINATE | SYNCHRONIZE -THREAD_DIRECT_IMPERSONATION :: 0x0200 -THREAD_GET_CONTEXT :: 0x0008 -THREAD_IMPERSONATE :: 0x0100 -THREAD_QUERY_INFORMATION :: 0x0040 +THREAD_DIRECT_IMPERSONATION :: 0x0200 +THREAD_GET_CONTEXT :: 0x0008 +THREAD_IMPERSONATE :: 0x0100 +THREAD_QUERY_INFORMATION :: 0x0040 THREAD_QUERY_LIMITED_INFORMATION :: 0x0800 -THREAD_SET_CONTEXT :: 0x0010 -THREAD_SET_INFORMATION :: 0x0020 -THREAD_SET_LIMITED_INFORMATION :: 0x0400 -THREAD_SET_THREAD_TOKEN :: 0x0080 -THREAD_SUSPEND_RESUME :: 0x0002 -THREAD_TERMINATE :: 0x0001 +THREAD_SET_CONTEXT :: 0x0010 +THREAD_SET_INFORMATION :: 0x0020 +THREAD_SET_LIMITED_INFORMATION :: 0x0400 +THREAD_SET_THREAD_TOKEN :: 0x0080 +THREAD_SUSPEND_RESUME :: 0x0002 +THREAD_TERMINATE :: 0x0001 COPY_FILE_FAIL_IF_EXISTS :: 0x00000001 COPY_FILE_RESTARTABLE :: 0x00000002 @@ -701,7 +701,7 @@ FILE_MAP_TARGETS_INVALID :: DWORD(0x40000000) FILE_MAP_LARGE_PAGES :: DWORD(0x20000000) LOCKFILE_FAIL_IMMEDIATELY :: DWORD (0x00000001) -LOCKFILE_EXCLUSIVE_LOCK :: DWORD(0x00000002) +LOCKFILE_EXCLUSIVE_LOCK :: DWORD(0x00000002) // Flags for `SetFileCompletionNotificationModes`. FILE_SKIP_COMPLETION_PORT_ON_SUCCESS :: 0x1 @@ -720,16 +720,16 @@ PAGE_NOCACHE :: 0x200 PAGE_WRITECOMBINE :: 0x400 MEMORY_BASIC_INFORMATION :: struct { - BaseAddress: PVOID, - AllocationBase: PVOID, + BaseAddress: PVOID, + AllocationBase: PVOID, AllocationProtect: DWORD, - PartitionId: WORD, - RegionSize: SIZE_T, - State: DWORD, - Protect: DWORD, - Type: DWORD, + PartitionId: WORD, + RegionSize: SIZE_T, + State: DWORD, + Protect: DWORD, + Type: DWORD, } -PMEMORY_BASIC_INFORMATION :: ^MEMORY_BASIC_INFORMATION +PMEMORY_BASIC_INFORMATION :: ^MEMORY_BASIC_INFORMATION LPMEMORY_BASIC_INFORMATION :: ^MEMORY_BASIC_INFORMATION MEM_COMMIT :: 0x1000 @@ -747,97 +747,97 @@ MEM_4MB_PAGES :: 0x80000000 @(default_calling_convention="system") foreign kernel32 { VirtualAlloc :: proc( - lpAddress: LPVOID, - dwSize: SIZE_T, + lpAddress: LPVOID, + dwSize: SIZE_T, flAllocationType: DWORD, - flProtect: DWORD, + flProtect: DWORD, ) -> LPVOID --- VirtualProtect :: proc( - lpAddress: LPVOID, - dwSize: SIZE_T, - flNewProtect: DWORD, + lpAddress: LPVOID, + dwSize: SIZE_T, + flNewProtect: DWORD, lpflOldProtect: PDWORD, ) -> BOOL --- VirtualFree :: proc( - lpAddress: LPVOID, - dwSize: SIZE_T, + lpAddress: LPVOID, + dwSize: SIZE_T, dwFreeType: DWORD, ) -> BOOL --- VirtualQuery :: proc( lpAddress: LPCVOID, - lpBuffer: PMEMORY_BASIC_INFORMATION, - dwLength: SIZE_T, + lpBuffer: PMEMORY_BASIC_INFORMATION, + dwLength: SIZE_T, ) -> SIZE_T --- VirtualAllocEx :: proc( - hProcess: HANDLE, - lpAddress: LPVOID, - dwSize: SIZE_T, + hProcess: HANDLE, + lpAddress: LPVOID, + dwSize: SIZE_T, flAllocationType: DWORD, - flProtect: DWORD, + flProtect: DWORD, ) -> LPVOID --- VirtualFreeEx :: proc( - hProcess: HANDLE, - lpAddress: LPVOID, - dwSize: SIZE_T, + hProcess: HANDLE, + lpAddress: LPVOID, + dwSize: SIZE_T, dwFreeType: DWORD, ) -> BOOL --- VirtualProtectEx :: proc( - hProcess: HANDLE, - lpAddress: LPVOID, - dwSize: SIZE_T, - flNewProtect: DWORD, + hProcess: HANDLE, + lpAddress: LPVOID, + dwSize: SIZE_T, + flNewProtect: DWORD, lpflOldProtect: PDWORD, ) -> BOOL --- VirtualQueryEx :: proc( - hProcess: HANDLE, + hProcess: HANDLE, lpAddress: LPCVOID, - lpBuffer: PMEMORY_BASIC_INFORMATION, - dwLength: SIZE_T, + lpBuffer: PMEMORY_BASIC_INFORMATION, + dwLength: SIZE_T, ) -> SIZE_T --- ReadProcessMemory :: proc( - hProcess: HANDLE, - lpBaseAddress: LPCVOID, - lpBuffer: LPVOID, - nSize: SIZE_T, + hProcess: HANDLE, + lpBaseAddress: LPCVOID, + lpBuffer: LPVOID, + nSize: SIZE_T, lpNumberOfBytesRead: ^SIZE_T, ) -> BOOL --- WriteProcessMemory :: proc( - hProcess: HANDLE, - lpBaseAddress: LPVOID, - lpBuffer: LPCVOID, - nSize: SIZE_T, + hProcess: HANDLE, + lpBaseAddress: LPVOID, + lpBuffer: LPCVOID, + nSize: SIZE_T, lpNumberOfBytesWritten: ^SIZE_T, ) -> BOOL --- CreateFileMappingW :: proc( - hFile: HANDLE, + hFile: HANDLE, lpFileMappingAttributes: LPSECURITY_ATTRIBUTES, - flProtect: DWORD, - dwMaximumSizeHigh: DWORD, - dwMaximumSizeLow: DWORD, - lpName: LPCWSTR, + flProtect: DWORD, + dwMaximumSizeHigh: DWORD, + dwMaximumSizeLow: DWORD, + lpName: LPCWSTR, ) -> HANDLE --- OpenFileMappingW :: proc( dwDesiredAccess: DWORD, - bInheritHandle: BOOL, - lpName: LPCWSTR, + bInheritHandle: BOOL, + lpName: LPCWSTR, ) -> HANDLE --- MapViewOfFile :: proc( - hFileMappingObject: HANDLE, - dwDesiredAccess: DWORD, - dwFileOffsetHigh: DWORD, - dwFileOffsetLow: DWORD, + hFileMappingObject: HANDLE, + dwDesiredAccess: DWORD, + dwFileOffsetHigh: DWORD, + dwFileOffsetLow: DWORD, dwNumberOfBytesToMap: SIZE_T, ) -> LPVOID --- MapViewOfFileEx :: proc( - hFileMappingObject: HANDLE, - dwDesiredAccess: DWORD, - dwFileOffsetHigh: DWORD, - dwFileOffsetLow: DWORD, + hFileMappingObject: HANDLE, + dwDesiredAccess: DWORD, + dwFileOffsetHigh: DWORD, + dwFileOffsetLow: DWORD, dwNumberOfBytesToMap: SIZE_T, - lpBaseAddress: LPVOID, + lpBaseAddress: LPVOID, ) -> LPVOID --- FlushViewOfFile :: proc( - lpBaseAddress: LPCVOID, + lpBaseAddress: LPCVOID, dwNumberOfBytesToFlush: SIZE_T, ) -> BOOL --- UnmapViewOfFile :: proc( @@ -845,36 +845,36 @@ foreign kernel32 { ) -> BOOL --- GetLargePageMinimum :: proc() -> SIZE_T --- GetProcessWorkingSetSizeEx :: proc( - hProcess: HANDLE, + hProcess: HANDLE, lpMinimumWorkingSetSize: PSIZE_T, lpMaximumWorkingSetSize: PSIZE_T, - Flags: PDWORD, + Flags: PDWORD, ) -> BOOL --- SetProcessWorkingSetSizeEx :: proc( - hProcess: HANDLE, + hProcess: HANDLE, dwMinimumWorkingSetSize: SIZE_T, dwMaximumWorkingSetSize: SIZE_T, - Flags: DWORD, + Flags: DWORD, ) -> BOOL --- VirtualLock :: proc( lpAddress: LPVOID, - dwSize: SIZE_T, + dwSize: SIZE_T, ) -> BOOL --- VirtualUnlock :: proc( lpAddress: LPVOID, - dwSize: SIZE_T, + dwSize: SIZE_T, ) -> BOOL --- GetWriteWatch :: proc( - dwFlags: DWORD, - lpBaseAddress: PVOID, - dwRegionSize: SIZE_T, - lpAddresses: ^PVOID, - lpdwCount: ^ULONG_PTR, + dwFlags: DWORD, + lpBaseAddress: PVOID, + dwRegionSize: SIZE_T, + lpAddresses: ^PVOID, + lpdwCount: ^ULONG_PTR, lpdwGranularity: LPDWORD, ) -> UINT --- ResetWriteWatch :: proc( lpBaseAddress: LPVOID, - dwRegionSize: SIZE_T, + dwRegionSize: SIZE_T, ) -> UINT --- } @@ -907,27 +907,27 @@ foreign kernel32 { GetSystemFileCacheSize :: proc( lpMinimumFileCacheSize: PSIZE_T, lpMaximumFileCacheSize: PSIZE_T, - lpFlags: PDWORD, + lpFlags: PDWORD, ) -> BOOL --- SetSystemFileCacheSize :: proc( MinimumFileCacheSize: SIZE_T, MaximumFileCacheSize: SIZE_T, - Flags: DWORD, + Flags: DWORD, ) -> BOOL --- CreateFileMappingNumaW :: proc( - hFile: HANDLE, + hFile: HANDLE, lpFileMappingAttributes: LPSECURITY_ATTRIBUTES, - flProtect: DWORD, - dwMaximumSizeHigh: DWORD, - dwMaximumSizeLow: DWORD, - lpName: LPCWSTR, - nndPreferred: DWORD, + flProtect: DWORD, + dwMaximumSizeHigh: DWORD, + dwMaximumSizeLow: DWORD, + lpName: LPCWSTR, + nndPreferred: DWORD, ) -> HANDLE --- } WIN32_MEMORY_RANGE_ENTRY :: struct { VirtualAddress: PVOID, - NumberOfBytes: SIZE_T, + NumberOfBytes: SIZE_T, } PWIN32_MEMORY_RANGE_ENTRY :: ^WIN32_MEMORY_RANGE_ENTRY @@ -935,56 +935,56 @@ PWIN32_MEMORY_RANGE_ENTRY :: ^WIN32_MEMORY_RANGE_ENTRY @(default_calling_convention="system") foreign kernel32 { PrefetchVirtualMemory :: proc( - hProcess: HANDLE, - NumberOfEntries: ULONG_PTR, + hProcess: HANDLE, + NumberOfEntries: ULONG_PTR, VirtualAddresses: PWIN32_MEMORY_RANGE_ENTRY, - Flags: ULONG, + Flags: ULONG, ) -> BOOL --- CreateFileMappingFromApp :: proc( - hFile: HANDLE, + hFile: HANDLE, SecurityAttributes: PSECURITY_ATTRIBUTES, - PageProtection: ULONG, - MaximumSize: ULONG64, - Name: PCWSTR, + PageProtection: ULONG, + MaximumSize: ULONG64, + Name: PCWSTR, ) -> HANDLE --- MapViewOfFileFromApp :: proc( hFileMappingObject: HANDLE, - DesiredAccess: ULONG, - FileOffset: ULONG64, + DesiredAccess: ULONG, + FileOffset: ULONG64, NumberOfBytesToMap: SIZE_T, ) -> PVOID --- UnmapViewOfFileEx :: proc( BaseAddress: PVOID, - UnmapFlags: ULONG, + UnmapFlags: ULONG, ) -> BOOL --- AllocateUserPhysicalPages :: proc( - hProcess: HANDLE, + hProcess: HANDLE, NumberOfPages: PULONG_PTR, - PageArray: PULONG_PTR, + PageArray: PULONG_PTR, ) -> BOOL --- FreeUserPhysicalPages :: proc( - hProcess: HANDLE, + hProcess: HANDLE, NumberOfPages: PULONG_PTR, - PageArray: PULONG_PTR, + PageArray: PULONG_PTR, ) -> BOOL --- MapUserPhysicalPages :: proc( VirtualAddress: PVOID, - NumberOfPages: ULONG_PTR, - PageArray: PULONG_PTR, + NumberOfPages: ULONG_PTR, + PageArray: PULONG_PTR, ) -> BOOL --- AllocateUserPhysicalPagesNuma :: proc( - hProcess: HANDLE, + hProcess: HANDLE, NumberOfPages: PULONG_PTR, - PageArray: PULONG_PTR, - nndPreferred: DWORD, + PageArray: PULONG_PTR, + nndPreferred: DWORD, ) -> BOOL --- VirtualAllocExNuma :: proc( - hProcess: HANDLE, - lpAddress: LPVOID, - dwSize: SIZE_T, + hProcess: HANDLE, + lpAddress: LPVOID, + dwSize: SIZE_T, flAllocationType: DWORD, - flProtect: DWORD, - nndPreferred: DWORD, + flProtect: DWORD, + nndPreferred: DWORD, ) -> LPVOID --- } @@ -992,28 +992,20 @@ MEHC_PATROL_SCRUBBER_PRESENT :: ULONG(0x1) @(default_calling_convention="system") foreign kernel32 { - GetMemoryErrorHandlingCapabilities :: proc( - Capabilities: PULONG, - ) -> BOOL --- + GetMemoryErrorHandlingCapabilities :: proc(Capabilities: PULONG) -> BOOL --- } @(default_calling_convention="system") foreign kernel32 { - GlobalMemoryStatusEx :: proc( - lpBuffer: ^MEMORYSTATUSEX, - ) -> BOOL --- + GlobalMemoryStatusEx :: proc(lpBuffer: ^MEMORYSTATUSEX) -> BOOL --- } PBAD_MEMORY_CALLBACK_ROUTINE :: #type proc "system" () @(default_calling_convention="system") foreign kernel32 { - RegisterBadMemoryNotification :: proc( - Callback: PBAD_MEMORY_CALLBACK_ROUTINE, - ) -> PVOID --- - UnregisterBadMemoryNotification :: proc( - RegistrationHandle: PVOID, - ) -> BOOL --- + RegisterBadMemoryNotification :: proc(Callback: PBAD_MEMORY_CALLBACK_ROUTINE) -> PVOID --- + UnregisterBadMemoryNotification :: proc(RegistrationHandle: PVOID) -> BOOL --- } OFFER_PRIORITY :: enum c_int { @@ -1031,33 +1023,33 @@ VmOfferPriorityNormal :: OFFER_PRIORITY.VmOfferPriorityNormal foreign kernel32 { OfferVirtualMemory :: proc( VirtualAddress: PVOID, - Size: SIZE_T, - Priority: OFFER_PRIORITY, + Size: SIZE_T, + Priority: OFFER_PRIORITY, ) -> DWORD --- ReclaimVirtualMemory :: proc( VirtualAddress: PVOID, - Size: SIZE_T, + Size: SIZE_T, ) -> DWORD --- DiscardVirtualMemory :: proc( VirtualAddress: PVOID, - Size: SIZE_T, + Size: SIZE_T, ) -> DWORD --- VirtualAllocFromApp :: proc( - BaseAddress: PVOID, - Size: SIZE_T, + BaseAddress: PVOID, + Size: SIZE_T, AllocationType: ULONG, - Protection: ULONG, + Protection: ULONG, ) -> PVOID --- VirtualProtectFromApp :: proc( - Address: PVOID, - Size: SIZE_T, + Address: PVOID, + Size: SIZE_T, NewProtection: ULONG, OldProtection: PULONG, ) -> BOOL --- OpenFileMappingFromApp :: proc( DesiredAccess: ULONG, InheritHandle: BOOL, - Name: PCWSTR, + Name: PCWSTR, ) -> HANDLE --- } @@ -1067,54 +1059,48 @@ WIN32_MEMORY_INFORMATION_CLASS :: enum c_int { MemoryRegionInfo :: WIN32_MEMORY_INFORMATION_CLASS.MemoryRegionInfo WIN32_MEMORY_REGION_INFORMATION :: struct { - AllocationBase: PVOID, + AllocationBase: PVOID, AllocationProtect: ULONG, - u: WIN32_MEMORY_REGION_INFORMATION_u, + using DUMMYUNIONNAME: struct #raw_union { + _: [1]u32, + Flags: ULONG, + using DUMMYSTRUCTNAME: bit_field ULONG { + Private: ULONG | 1, + MappedDataFile: ULONG | 1, + MappedImage: ULONG | 1, + MappedPageFile: ULONG | 1, + MappedPhysical: ULONG | 1, + DirectMapped: ULONG | 1, + Reserved: ULONG | 26, + }, + }, RegionSize: SIZE_T, CommitSize: SIZE_T, } -WIN32_MEMORY_REGION_INFORMATION_u :: struct #raw_union { - u: [1]u32, - Flags: ULONG, - s: WIN32_MEMORY_REGION_INFORMATION_u_s, -} -WIN32_MEMORY_REGION_INFORMATION_u_s :: struct { - Bitfield: ULONG, -} -WIN32_MEMORY_REGION_INFORMATION_u_s_Bitfield :: distinct ULONG -/*bit_field #align(align_of(ULONG)) { - Private : 1-0, - MappedDataFile : 2-1, - MappedImage : 3-2, - MappedPageFile : 4-3, - MappedPhysical : 5-4, - DirectMapped : 6-5, - Reserved : 32-6, -}*/ @(default_calling_convention="system") foreign one_core { QueryVirtualMemoryInformation :: proc( - Process: HANDLE, - VirtualAddress: PVOID, + Process: HANDLE, + VirtualAddress: PVOID, MemoryInformationClass: WIN32_MEMORY_INFORMATION_CLASS, - MemoryInformation: PVOID, - MemoryInformationSize: SIZE_T, - ReturnSize: PSIZE_T, + MemoryInformation: PVOID, + MemoryInformationSize: SIZE_T, + ReturnSize: PSIZE_T, ) -> BOOL --- MapViewOfFileNuma2 :: proc( FileMappingHandle: HANDLE, - ProcessHandle: HANDLE, - Offset: ULONG64, - BaseAddress: PVOID, - ViewSize: SIZE_T, - AllocationType: ULONG, - PageProtection: ULONG, - PreferredNode: ULONG, + ProcessHandle: HANDLE, + Offset: ULONG64, + BaseAddress: PVOID, + ViewSize: SIZE_T, + AllocationType: ULONG, + PageProtection: ULONG, + PreferredNode: ULONG, ) -> PVOID --- GetCommPorts :: proc( - lpPortNumbers: PULONG, - uPortNumbersCount: ULONG, + lpPortNumbers: PULONG, + uPortNumbersCount: ULONG, puPortNumbersFound: PULONG, ) -> ULONG --- } @@ -1124,12 +1110,12 @@ NUMA_NO_PREFERRED_NODE :: 0xffffffff MapViewOfFile2 :: #force_inline proc "system" ( FileMappingHandle: HANDLE, - ProcessHandle: HANDLE, - Offset: ULONG64, - BaseAddress: PVOID, - ViewSize: SIZE_T, - AllocationType: ULONG, - PageProtection: ULONG, + ProcessHandle: HANDLE, + Offset: ULONG64, + BaseAddress: PVOID, + ViewSize: SIZE_T, + AllocationType: ULONG, + PageProtection: ULONG, ) -> PVOID { return MapViewOfFileNuma2( FileMappingHandle, @@ -1147,8 +1133,8 @@ MapViewOfFile2 :: #force_inline proc "system" ( foreign kernel32 { UnmapViewOfFile2 :: proc( ProcessHandle: HANDLE, - BaseAddress: PVOID, - UnmapFlags: ULONG, + BaseAddress: PVOID, + UnmapFlags: ULONG, ) -> BOOL --- } @@ -1159,7 +1145,7 @@ foreign kernel32 { OSMinorVersion: DWORD, SpMajorVersion: DWORD, SpMinorVersion: DWORD, - product_type: ^Windows_Product_Type, + product_type: ^Windows_Product_Type, ) -> BOOL --- } @@ -1173,10 +1159,10 @@ LPFIBER_START_ROUTINE :: #type proc "system" (lpFiberParameter: LPVOID) @(default_calling_convention = "system") foreign kernel32 { - CreateFiber :: proc(dwStackSize: SIZE_T, lpStartAddress: LPFIBER_START_ROUTINE, lpParameter: LPVOID) -> LPVOID --- - DeleteFiber :: proc(lpFiber: LPVOID) --- + CreateFiber :: proc(dwStackSize: SIZE_T, lpStartAddress: LPFIBER_START_ROUTINE, lpParameter: LPVOID) -> LPVOID --- + DeleteFiber :: proc(lpFiber: LPVOID) --- ConvertThreadToFiber :: proc(lpParameter: LPVOID) -> LPVOID --- - SwitchToFiber :: proc(lpFiber: LPVOID) --- + SwitchToFiber :: proc(lpFiber: LPVOID) --- } LOGICAL_PROCESSOR_RELATIONSHIP :: enum c_int { @@ -1199,11 +1185,11 @@ PROCESSOR_CACHE_TYPE :: enum c_int { } CACHE_DESCRIPTOR :: struct { - Level: BYTE, + Level: BYTE, Associativity: BYTE, - LineSize: WORD, - Size: DWORD, - Type: PROCESSOR_CACHE_TYPE, + LineSize: WORD, + Size: DWORD, + Type: PROCESSOR_CACHE_TYPE, } ProcessorCore :: struct { @@ -1212,17 +1198,16 @@ ProcessorCore :: struct { NumaNode :: struct { NodeNumber: DWORD, } -DUMMYUNIONNAME_u :: struct #raw_union { - Core: ProcessorCore, - Node: NumaNode, - Cache: CACHE_DESCRIPTOR, - Reserved: [2]ULONGLONG, -} SYSTEM_LOGICAL_PROCESSOR_INFORMATION :: struct { ProcessorMask: ULONG_PTR, - Relationship: LOGICAL_PROCESSOR_RELATIONSHIP, - using DummyUnion: DUMMYUNIONNAME_u, + Relationship: LOGICAL_PROCESSOR_RELATIONSHIP, + using DUMMYUNIONNAME: struct #raw_union { + ProcessorCore: ProcessorCore `raw_union_tag:"Relationship=RelationProcessorCore"`, + NumaNode: NumaNode `raw_union_tag:"Relationship=RelationNumaNode"`, + Cache: CACHE_DESCRIPTOR `raw_union_tag:"Relationship=RelationCache"`, + Reserved: [2]ULONGLONG, + }, } SYSTEM_POWER_STATUS :: struct { @@ -1294,6 +1279,6 @@ ACTCTX_FLAG_HMODULE_VALID :: 0x080 @(default_calling_convention="system") foreign kernel32 { - CreateActCtxW :: proc(pActCtx: ^ACTCTXW) -> HANDLE --- + CreateActCtxW :: proc(pActCtx: ^ACTCTXW) -> HANDLE --- ActivateActCtx :: proc(hActCtx: HANDLE, lpCookie: ^ULONG_PTR) -> BOOL --- } From 006681ec2240d46b977f04ab7d7c8e280ad2cb67 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 11:18:48 +0000 Subject: [PATCH 060/212] Improve formatting; fix types; add struct field tags --- core/sys/windows/key_codes.odin | 8 +- core/sys/windows/netapi32.odin | 30 +- core/sys/windows/ole32.odin | 32 +- core/sys/windows/shcore.odin | 10 +- core/sys/windows/shell32.odin | 26 +- core/sys/windows/tlhelp.odin | 102 +- core/sys/windows/types.odin | 2413 ++++++++++++++++--------------- 7 files changed, 1315 insertions(+), 1306 deletions(-) diff --git a/core/sys/windows/key_codes.odin b/core/sys/windows/key_codes.odin index 0991ca4b3..a2910ecd1 100644 --- a/core/sys/windows/key_codes.odin +++ b/core/sys/windows/key_codes.odin @@ -3,11 +3,11 @@ package sys_windows // https://docs.microsoft.com/en-us/windows/win32/inputdev/about-keyboard-input KF_EXTENDED :: 0x0100 -KF_DLGMODE :: 0x0800 +KF_DLGMODE :: 0x0800 KF_MENUMODE :: 0x1000 -KF_ALTDOWN :: 0x2000 -KF_REPEAT :: 0x4000 -KF_UP :: 0x8000 +KF_ALTDOWN :: 0x2000 +KF_REPEAT :: 0x4000 +KF_UP :: 0x8000 // https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes // Virtual Keys, Standard Set diff --git a/core/sys/windows/netapi32.odin b/core/sys/windows/netapi32.odin index 9442193ca..759c5847a 100644 --- a/core/sys/windows/netapi32.odin +++ b/core/sys/windows/netapi32.odin @@ -7,32 +7,32 @@ foreign import netapi32 "system:Netapi32.lib" foreign netapi32 { NetUserAdd :: proc( servername: wstring, - level: DWORD, - user_info: ^USER_INFO_1, // Perhaps make this a #raw_union with USER_INFO1..4 when we need the other levels. - parm_err: ^DWORD, + level: DWORD, + user_info: ^USER_INFO_1, // Perhaps make this a #raw_union with USER_INFO1..4 when we need the other levels. + parm_err: ^DWORD, ) -> NET_API_STATUS --- NetUserDel :: proc( servername: wstring, - username: wstring, + username: wstring, ) -> NET_API_STATUS --- NetUserGetInfo :: proc( servername: wstring, - username: wstring, - level: DWORD, - user_info: ^USER_INFO_1, + username: wstring, + level: DWORD, + user_info: ^USER_INFO_1, ) -> NET_API_STATUS --- NetLocalGroupAddMembers :: proc( - servername: wstring, - groupname: wstring, - level: DWORD, + servername: wstring, + groupname: wstring, + level: DWORD, group_members_info: ^LOCALGROUP_MEMBERS_INFO_0, // Actually a variably sized array of these. - totalentries: DWORD, + totalentries: DWORD, ) -> NET_API_STATUS --- NetLocalGroupDelMembers :: proc( - servername: wstring, - groupname: wstring, - level: DWORD, + servername: wstring, + groupname: wstring, + level: DWORD, group_members_info: ^LOCALGROUP_MEMBERS_INFO_0, // Actually a variably sized array of these. - totalentries: DWORD, + totalentries: DWORD, ) -> NET_API_STATUS --- } \ No newline at end of file diff --git a/core/sys/windows/ole32.odin b/core/sys/windows/ole32.odin index 32cb6fd60..12cf40b81 100644 --- a/core/sys/windows/ole32.odin +++ b/core/sys/windows/ole32.odin @@ -41,32 +41,32 @@ LPUNKNOWN :: ^IUnknown @(default_calling_convention="system") foreign Ole32 { - CoInitialize :: proc(reserved: rawptr = nil) -> HRESULT --- + CoInitialize :: proc(reserved: rawptr = nil) -> HRESULT --- CoInitializeEx :: proc(reserved: rawptr = nil, co_init: COINIT = .APARTMENTTHREADED) -> HRESULT --- CoUninitialize :: proc() --- CoCreateInstance :: proc( - rclsid: REFCLSID, - pUnkOuter: LPUNKNOWN, + rclsid: REFCLSID, + pUnkOuter: LPUNKNOWN, dwClsContext: DWORD, - riid: REFIID, - ppv: ^LPVOID, + riid: REFIID, + ppv: ^LPVOID, ) -> HRESULT --- - CoTaskMemAlloc :: proc(cb: SIZE_T) -> rawptr --- + CoTaskMemAlloc :: proc(cb: SIZE_T) -> rawptr --- CoTaskMemRealloc :: proc(pv: rawptr, cb: SIZE_T) -> rawptr --- - CoTaskMemFree :: proc(pv: rawptr) --- + CoTaskMemFree :: proc(pv: rawptr) --- - CLSIDFromProgID :: proc(lpszProgID: LPCOLESTR, lpclsid: LPCLSID) -> HRESULT --- + CLSIDFromProgID :: proc(lpszProgID: LPCOLESTR, lpclsid: LPCLSID) -> HRESULT --- CLSIDFromProgIDEx :: proc(lpszProgID: LPCOLESTR, lpclsid: LPCLSID) -> HRESULT --- - CLSIDFromString :: proc(lpsz: LPOLESTR, pclsid: LPCLSID) -> HRESULT --- - IIDFromString :: proc(lpsz: LPOLESTR, lpiid: LPIID) -> HRESULT --- - ProgIDFromCLSID :: proc(clsid: REFCLSID, lplpszProgID: ^LPOLESTR) -> HRESULT --- - StringFromCLSID :: proc(rclsid: REFCLSID, lplpsz: ^LPOLESTR) -> HRESULT --- - StringFromGUID2 :: proc(rclsid: REFCLSID, lplpsz: LPOLESTR, cchMax: INT) -> INT --- - StringFromIID :: proc(rclsid: REFIID, lplpsz: ^LPOLESTR) -> HRESULT --- + CLSIDFromString :: proc(lpsz: LPOLESTR, pclsid: LPCLSID) -> HRESULT --- + IIDFromString :: proc(lpsz: LPOLESTR, lpiid: LPIID) -> HRESULT --- + ProgIDFromCLSID :: proc(clsid: REFCLSID, lplpszProgID: ^LPOLESTR) -> HRESULT --- + StringFromCLSID :: proc(rclsid: REFCLSID, lplpsz: ^LPOLESTR) -> HRESULT --- + StringFromGUID2 :: proc(rclsid: REFCLSID, lplpsz: LPOLESTR, cchMax: INT) -> INT --- + StringFromIID :: proc(rclsid: REFIID, lplpsz: ^LPOLESTR) -> HRESULT --- - PropVariantClear :: proc(pvar: ^PROPVARIANT) -> HRESULT --- - PropVariantCopy :: proc(pvarDest: ^PROPVARIANT, pvarSrc: ^PROPVARIANT) -> HRESULT --- + PropVariantClear :: proc(pvar: ^PROPVARIANT) -> HRESULT --- + PropVariantCopy :: proc(pvarDest: ^PROPVARIANT, pvarSrc: ^PROPVARIANT) -> HRESULT --- FreePropVariantArray :: proc(cVariants: ULONG, rgvars: ^PROPVARIANT) -> HRESULT --- } diff --git a/core/sys/windows/shcore.odin b/core/sys/windows/shcore.odin index 08a76ebe6..c7d784fe8 100644 --- a/core/sys/windows/shcore.odin +++ b/core/sys/windows/shcore.odin @@ -8,18 +8,18 @@ foreign import shcore "system:Shcore.lib" foreign shcore { GetProcessDpiAwareness :: proc(hprocess: HANDLE, value: ^PROCESS_DPI_AWARENESS) -> HRESULT --- SetProcessDpiAwareness :: proc(value: PROCESS_DPI_AWARENESS) -> HRESULT --- - GetDpiForMonitor :: proc(hmonitor: HMONITOR, dpiType: MONITOR_DPI_TYPE, dpiX: ^UINT, dpiY: ^UINT) -> HRESULT --- + GetDpiForMonitor :: proc(hmonitor: HMONITOR, dpiType: MONITOR_DPI_TYPE, dpiX: ^UINT, dpiY: ^UINT) -> HRESULT --- } PROCESS_DPI_AWARENESS :: enum DWORD { - PROCESS_DPI_UNAWARE = 0, - PROCESS_SYSTEM_DPI_AWARE = 1, + PROCESS_DPI_UNAWARE = 0, + PROCESS_SYSTEM_DPI_AWARE = 1, PROCESS_PER_MONITOR_DPI_AWARE = 2, } MONITOR_DPI_TYPE :: enum DWORD { MDT_EFFECTIVE_DPI = 0, - MDT_ANGULAR_DPI = 1, - MDT_RAW_DPI = 2, + MDT_ANGULAR_DPI = 1, + MDT_RAW_DPI = 2, MDT_DEFAULT, } diff --git a/core/sys/windows/shell32.odin b/core/sys/windows/shell32.odin index 54cee718c..c7d83f9f6 100644 --- a/core/sys/windows/shell32.odin +++ b/core/sys/windows/shell32.odin @@ -22,29 +22,29 @@ foreign shell32 { ) -> c_int --- SHFileOperationW :: proc(lpFileOp: LPSHFILEOPSTRUCTW) -> c_int --- SHGetFolderPathW :: proc(hwnd: HWND, csidl: c_int, hToken: HANDLE, dwFlags: DWORD, pszPath: LPWSTR) -> HRESULT --- - SHAppBarMessage :: proc(dwMessage: DWORD, pData: PAPPBARDATA) -> UINT_PTR --- + SHAppBarMessage :: proc(dwMessage: DWORD, pData: PAPPBARDATA) -> UINT_PTR --- Shell_NotifyIconW :: proc(dwMessage: DWORD, lpData: ^NOTIFYICONDATAW) -> BOOL --- - SHChangeNotify :: proc(wEventId: LONG, uFlags: UINT, dwItem1: LPCVOID, dwItem2: LPCVOID) --- + SHChangeNotify :: proc(wEventId: LONG, uFlags: UINT, dwItem1: LPCVOID, dwItem2: LPCVOID) --- SHGetKnownFolderIDList :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppidl: rawptr) -> HRESULT --- - SHSetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, pszPath: PCWSTR ) -> HRESULT --- - SHGetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppszPath: ^LPWSTR) -> HRESULT --- + SHSetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, pszPath: PCWSTR ) -> HRESULT --- + SHGetKnownFolderPath :: proc(rfid: REFKNOWNFOLDERID, dwFlags: /* KNOWN_FOLDER_FLAG */ DWORD, hToken: HANDLE, ppszPath: ^LPWSTR) -> HRESULT --- - ExtractIconExW :: proc(pszFile: LPCWSTR, nIconIndex: INT, phiconLarge: ^HICON, phiconSmall: ^HICON, nIcons: UINT) -> UINT --- + ExtractIconExW :: proc(pszFile: LPCWSTR, nIconIndex: INT, phiconLarge: ^HICON, phiconSmall: ^HICON, nIcons: UINT) -> UINT --- DragAcceptFiles :: proc(hWnd: HWND, fAccept: BOOL) --- - DragQueryPoint :: proc(hDrop: HDROP, ppt: ^POINT) -> BOOL --- - DragQueryFileW :: proc(hDrop: HDROP, iFile: UINT, lpszFile: LPWSTR, cch: UINT) -> UINT --- - DragFinish :: proc(hDrop: HDROP) --- // @New + DragQueryPoint :: proc(hDrop: HDROP, ppt: ^POINT) -> BOOL --- + DragQueryFileW :: proc(hDrop: HDROP, iFile: UINT, lpszFile: LPWSTR, cch: UINT) -> UINT --- + DragFinish :: proc(hDrop: HDROP) --- // @New } APPBARDATA :: struct { - cbSize: DWORD, - hWnd: HWND, + cbSize: DWORD, + hWnd: HWND, uCallbackMessage: UINT, - uEdge: UINT, - rc: RECT, - lParam: LPARAM, + uEdge: UINT, + rc: RECT, + lParam: LPARAM, } PAPPBARDATA :: ^APPBARDATA diff --git a/core/sys/windows/tlhelp.odin b/core/sys/windows/tlhelp.odin index 006c9c330..b23b4b06a 100644 --- a/core/sys/windows/tlhelp.odin +++ b/core/sys/windows/tlhelp.odin @@ -5,22 +5,22 @@ foreign import kernel32 "system:Kernel32.lib" @(default_calling_convention="system") foreign kernel32 { - CreateToolhelp32Snapshot :: proc (dwFlags: DWORD, th32ProcessID: DWORD) -> HANDLE --- - Process32FirstW :: proc (hSnapshot: HANDLE, lppe: LPPROCESSENTRY32W) -> BOOL --- - Process32NextW :: proc (hSnapshot: HANDLE, lppe: LPPROCESSENTRY32W) -> BOOL --- - Thread32First :: proc (hSnapshot: HANDLE, lpte: LPTHREADENTRY32) -> BOOL --- - Thread32Next :: proc (hSnapshot: HANDLE, lpte: LPTHREADENTRY32) -> BOOL --- - Module32FirstW :: proc (hSnapshot: HANDLE, lpme: LPMODULEENTRY32W) -> BOOL --- - Module32NextW :: proc (hSnapshot: HANDLE, lpme: LPMODULEENTRY32W) -> BOOL --- - Heap32ListFirst :: proc (hSnapshot: HANDLE, lphl: LPHEAPLIST32) -> BOOL --- - Heap32ListNext :: proc (hSnapshot: HANDLE, lphl: LPHEAPLIST32) -> BOOL --- - Heap32First :: proc (lphe: LPHEAPENTRY32, th32ProcessID: DWORD, th32HeapID: ULONG_PTR) -> BOOL --- - Heap32Next :: proc (lphe: LPHEAPENTRY32) -> BOOL --- - Toolhelp32ReadProcessMemory :: proc ( - th32ProcessID: DWORD, - lpBaseAddress: LPCVOID, - lpBuffer: LPVOID, - cbRead: SIZE_T, + CreateToolhelp32Snapshot :: proc(dwFlags: DWORD, th32ProcessID: DWORD) -> HANDLE --- + Process32FirstW :: proc(hSnapshot: HANDLE, lppe: LPPROCESSENTRY32W) -> BOOL --- + Process32NextW :: proc(hSnapshot: HANDLE, lppe: LPPROCESSENTRY32W) -> BOOL --- + Thread32First :: proc(hSnapshot: HANDLE, lpte: LPTHREADENTRY32) -> BOOL --- + Thread32Next :: proc(hSnapshot: HANDLE, lpte: LPTHREADENTRY32) -> BOOL --- + Module32FirstW :: proc(hSnapshot: HANDLE, lpme: LPMODULEENTRY32W) -> BOOL --- + Module32NextW :: proc(hSnapshot: HANDLE, lpme: LPMODULEENTRY32W) -> BOOL --- + Heap32ListFirst :: proc(hSnapshot: HANDLE, lphl: LPHEAPLIST32) -> BOOL --- + Heap32ListNext :: proc(hSnapshot: HANDLE, lphl: LPHEAPLIST32) -> BOOL --- + Heap32First :: proc(lphe: LPHEAPENTRY32, th32ProcessID: DWORD, th32HeapID: ULONG_PTR) -> BOOL --- + Heap32Next :: proc(lphe: LPHEAPENTRY32) -> BOOL --- + Toolhelp32ReadProcessMemory :: proc( + th32ProcessID: DWORD, + lpBaseAddress: LPCVOID, + lpBuffer: LPVOID, + cbRead: SIZE_T, lpNumberOfBytesRead: ^SIZE_T, ) -> BOOL --- } @@ -36,66 +36,66 @@ TH32CS_SNAPMODULE32 :: 0x00000010 TH32CS_SNAPALL :: TH32CS_SNAPHEAPLIST | TH32CS_SNAPPROCESS | TH32CS_SNAPTHREAD | TH32CS_SNAPMODULE PROCESSENTRY32W :: struct { - dwSize: DWORD, - cntUsage: DWORD, - th32ProcessID: DWORD, - th32DefaultHeapID: ULONG_PTR, - th32ModuleID: DWORD, - cntThreads: DWORD, + dwSize: DWORD, + cntUsage: DWORD, + th32ProcessID: DWORD, + th32DefaultHeapID: ULONG_PTR, + th32ModuleID: DWORD, + cntThreads: DWORD, th32ParentProcessID: DWORD, - pcPriClassBase: LONG, - dwFlags: DWORD, - szExeFile: [MAX_PATH]WCHAR, + pcPriClassBase: LONG, + dwFlags: DWORD, + szExeFile: [MAX_PATH]WCHAR, } LPPROCESSENTRY32W :: ^PROCESSENTRY32W THREADENTRY32 :: struct { - dwSize: DWORD, - cntUsage: DWORD, - th32ThreadID: DWORD, + dwSize: DWORD, + cntUsage: DWORD, + th32ThreadID: DWORD, th32OwnerProcessID: DWORD, - tpBasePri: LONG, - tpDeltaPri: LONG, - dwFlags: DWORD, + tpBasePri: LONG, + tpDeltaPri: LONG, + dwFlags: DWORD, } LPTHREADENTRY32 :: ^THREADENTRY32 MODULEENTRY32W :: struct { - dwSize: DWORD, - th32ModuleID: DWORD, + dwSize: DWORD, + th32ModuleID: DWORD, th32ProcessID: DWORD, - GlblcntUsage: DWORD, - ProccntUsage: DWORD, - modBaseAddr: ^BYTE, - modBaseSize: DWORD, - hModule: HMODULE, - szModule: [MAX_MODULE_NAME32 + 1]WCHAR, - szExePath: [MAX_PATH]WCHAR, + GlblcntUsage: DWORD, + ProccntUsage: DWORD, + modBaseAddr: ^BYTE, + modBaseSize: DWORD, + hModule: HMODULE, + szModule: [MAX_MODULE_NAME32 + 1]WCHAR, + szExePath: [MAX_PATH]WCHAR, } LPMODULEENTRY32W :: ^MODULEENTRY32W HEAPLIST32 :: struct { - dwSize: SIZE_T, + dwSize: SIZE_T, th32ProcessID: DWORD, - th32HeapID: ULONG_PTR, - dwFlags: DWORD, + th32HeapID: ULONG_PTR, + dwFlags: DWORD, } LPHEAPLIST32 :: ^HEAPLIST32 HEAPENTRY32 :: struct { - dwSize: SIZE_T, - hHandle: HANDLE, - dwAddress: ULONG_PTR, - dwBlockSize: SIZE_T, - dwFlags: DWORD, - dwLockCount: DWORD, - dwResvd: DWORD, + dwSize: SIZE_T, + hHandle: HANDLE, + dwAddress: ULONG_PTR, + dwBlockSize: SIZE_T, + dwFlags: DWORD, + dwLockCount: DWORD, + dwResvd: DWORD, th32ProcessID: DWORD, - th32HeapID: ULONG_PTR, + th32HeapID: ULONG_PTR, } LPHEAPENTRY32 :: ^HEAPENTRY32 diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 75e9fc695..21bb2c5c1 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -15,75 +15,75 @@ c_ushort :: c.ushort size_t :: c.size_t wchar_t :: c.wchar_t -DWORD :: c_ulong -DWORDLONG :: c.ulonglong -QWORD :: c.ulonglong -HANDLE :: distinct LPVOID -PHANDLE :: ^HANDLE -HINSTANCE :: HANDLE -HMODULE :: distinct HINSTANCE -HRESULT :: distinct LONG -HWND :: distinct HANDLE -HDC :: distinct HANDLE -HMONITOR :: distinct HANDLE -HICON :: distinct HANDLE -HCURSOR :: distinct HANDLE -HMENU :: distinct HANDLE -HBRUSH :: distinct HANDLE -HPEN :: distinct HANDLE -HGDIOBJ :: distinct HANDLE -HBITMAP :: distinct HANDLE -HPALETTE :: distinct HANDLE -HGLOBAL :: distinct HANDLE -HHOOK :: distinct HANDLE -HWINEVENTHOOK :: distinct HANDLE -HKEY :: distinct HANDLE -HDESK :: distinct HANDLE -HFONT :: distinct HANDLE -HRGN :: distinct HANDLE -HRSRC :: distinct HANDLE -HWINSTA :: distinct HANDLE -HACCEL :: distinct HANDLE -BOOL :: distinct b32 -BYTE :: distinct u8 -BOOLEAN :: distinct b8 -GROUP :: distinct c_uint -LARGE_INTEGER :: distinct c_longlong -ULARGE_INTEGER :: distinct c_ulonglong +DWORD :: c_ulong +DWORDLONG :: c.ulonglong +QWORD :: c.ulonglong +HANDLE :: distinct LPVOID +PHANDLE :: ^HANDLE +HINSTANCE :: HANDLE +HMODULE :: distinct HINSTANCE +HRESULT :: distinct LONG +HWND :: distinct HANDLE +HDC :: distinct HANDLE +HMONITOR :: distinct HANDLE +HICON :: distinct HANDLE +HCURSOR :: distinct HANDLE +HMENU :: distinct HANDLE +HBRUSH :: distinct HANDLE +HPEN :: distinct HANDLE +HGDIOBJ :: distinct HANDLE +HBITMAP :: distinct HANDLE +HPALETTE :: distinct HANDLE +HGLOBAL :: distinct HANDLE +HHOOK :: distinct HANDLE +HWINEVENTHOOK :: distinct HANDLE +HKEY :: distinct HANDLE +HDESK :: distinct HANDLE +HFONT :: distinct HANDLE +HRGN :: distinct HANDLE +HRSRC :: distinct HANDLE +HWINSTA :: distinct HANDLE +HACCEL :: distinct HANDLE +BOOL :: distinct b32 +BYTE :: distinct u8 +BOOLEAN :: distinct b8 +GROUP :: distinct c_uint +LARGE_INTEGER :: distinct c_longlong +ULARGE_INTEGER :: distinct c_ulonglong PULARGE_INTEGER :: ^ULARGE_INTEGER -LONG :: c_long -UINT :: c_uint -INT :: c_int -SHORT :: c_short -USHORT :: c_ushort -WCHAR :: wchar_t -SIZE_T :: uint -PSIZE_T :: ^SIZE_T -WORD :: u16 -CHAR :: c_char -ULONG_PTR :: uint -PULONG_PTR :: ^ULONG_PTR -LPULONG_PTR :: ^ULONG_PTR -DWORD_PTR :: ULONG_PTR -LONG_PTR :: int -INT_PTR :: int -UINT_PTR :: uintptr -ULONG :: c_ulong -ULONGLONG :: c_ulonglong -LONGLONG :: c_longlong -UCHAR :: BYTE -NTSTATUS :: c.long -COLORREF :: DWORD -LPCOLORREF :: ^COLORREF -LPARAM :: LONG_PTR -WPARAM :: UINT_PTR -LRESULT :: LONG_PTR -LPRECT :: ^RECT -LPPOINT :: ^POINT -LSTATUS :: LONG -PHKEY :: ^HKEY -PUSHORT :: ^USHORT -PCHAR :: ^CHAR +LONG :: c_long +UINT :: c_uint +INT :: c_int +SHORT :: c_short +USHORT :: c_ushort +WCHAR :: wchar_t +SIZE_T :: uint +PSIZE_T :: ^SIZE_T +WORD :: u16 +CHAR :: c_char +ULONG_PTR :: uint +PULONG_PTR :: ^ULONG_PTR +LPULONG_PTR :: ^ULONG_PTR +DWORD_PTR :: ULONG_PTR +LONG_PTR :: int +INT_PTR :: int +UINT_PTR :: uintptr +ULONG :: c_ulong +ULONGLONG :: c_ulonglong +LONGLONG :: c_longlong +UCHAR :: BYTE +NTSTATUS :: c.long +COLORREF :: DWORD +LPCOLORREF :: ^COLORREF +LPARAM :: LONG_PTR +WPARAM :: UINT_PTR +LRESULT :: LONG_PTR +LPRECT :: ^RECT +LPPOINT :: ^POINT +LSTATUS :: LONG +PHKEY :: ^HKEY +PUSHORT :: ^USHORT +PCHAR :: ^CHAR UINT8 :: u8 UINT16 :: u16 @@ -101,68 +101,71 @@ LONG32 :: i32 ULONG64 :: u64 LONG64 :: i64 -DWORD64 :: u64 +DWORD64 :: u64 PDWORD64 :: ^DWORD64 PDWORD_PTR :: ^DWORD_PTR -ATOM :: distinct WORD +ATOM :: distinct WORD wstring :: cstring16 PWSTR :: cstring16 -PBYTE :: ^BYTE -LPBYTE :: ^BYTE -PBOOL :: ^BOOL -LPBOOL :: ^BOOL -LPCSTR :: cstring -LPCWSTR :: wstring -LPCTSTR :: wstring -LPDWORD :: ^DWORD -PCSTR :: cstring -PCWSTR :: wstring -PDWORD :: ^DWORD -LPHANDLE :: ^HANDLE -LPOVERLAPPED :: ^OVERLAPPED +PBYTE :: ^BYTE +LPBYTE :: ^BYTE +PBOOL :: ^BOOL +LPBOOL :: ^BOOL +LPCSTR :: cstring +LPCWSTR :: wstring +LPCTSTR :: wstring +LPDWORD :: ^DWORD +PCSTR :: cstring +PCWSTR :: wstring +PDWORD :: ^DWORD +LPHANDLE :: ^HANDLE +LPOVERLAPPED :: ^OVERLAPPED LPPROCESS_INFORMATION :: ^PROCESS_INFORMATION -PSECURITY_ATTRIBUTES :: ^SECURITY_ATTRIBUTES +PSECURITY_ATTRIBUTES :: ^SECURITY_ATTRIBUTES LPSECURITY_ATTRIBUTES :: ^SECURITY_ATTRIBUTES -LPSTARTUPINFOW :: ^STARTUPINFOW -LPTRACKMOUSEEVENT :: ^TRACKMOUSEEVENT -VOID :: rawptr -PVOID :: rawptr -LPVOID :: rawptr -PINT :: ^INT -LPINT :: ^INT -PUINT :: ^UINT -LPUINT :: ^UINT -LPWCH :: ^WCHAR -LPWORD :: ^WORD -PULONG :: ^ULONG -LPWIN32_FIND_DATAW :: ^WIN32_FIND_DATAW -LPWSADATA :: ^WSADATA -LPWSAPROTOCOL_INFO :: ^WSAPROTOCOL_INFO -LPSTR :: ^CHAR -LPWSTR :: ^WCHAR -OLECHAR :: WCHAR -BSTR :: ^OLECHAR -LPOLESTR :: cstring16 -LPCOLESTR :: LPCSTR +LPSTARTUPINFOW :: ^STARTUPINFOW +LPTRACKMOUSEEVENT :: ^TRACKMOUSEEVENT +VOID :: rawptr +PVOID :: rawptr +LPVOID :: rawptr +PINT :: ^INT +LPINT :: ^INT +PUINT :: ^UINT +LPUINT :: ^UINT +LPWCH :: ^WCHAR +LPWORD :: ^WORD +PULONG :: ^ULONG +LPWIN32_FIND_DATAW :: ^WIN32_FIND_DATAW +LPWSADATA :: ^WSADATA +LPWSAPROTOCOL_INFO :: ^WSAPROTOCOL_INFO +LPSTR :: ^CHAR +LPWSTR :: ^WCHAR +OLECHAR :: WCHAR +BSTR :: ^OLECHAR + +LPOLESTR :: cstring16 +LPCOLESTR :: LPCSTR LPFILETIME :: ^FILETIME -LPWSABUF :: ^WSABUF +LPWSABUF :: ^WSABUF + LPWSAOVERLAPPED :: distinct rawptr LPWSAOVERLAPPED_COMPLETION_ROUTINE :: distinct rawptr -LPCVOID :: rawptr -SCODE :: LONG -PSCODE :: ^SCODE -PACCESS_TOKEN :: PVOID +LPCVOID :: rawptr +SCODE :: LONG +PSCODE :: ^SCODE + +PACCESS_TOKEN :: PVOID PSECURITY_DESCRIPTOR :: PVOID -PSID :: PVOID -PCLAIMS_BLOB :: PVOID +PSID :: PVOID +PCLAIMS_BLOB :: PVOID PCONDITION_VARIABLE :: ^CONDITION_VARIABLE -PLARGE_INTEGER :: ^LARGE_INTEGER -PSRWLOCK :: ^SRWLOCK +PLARGE_INTEGER :: ^LARGE_INTEGER +PSRWLOCK :: ^SRWLOCK CREATE_WAITABLE_TIMER_MANUAL_RESET :: 0x00000001 CREATE_WAITABLE_TIMER_HIGH_RESOLUTION :: 0x00000002 @@ -183,28 +186,28 @@ LPSIZE :: ^SIZE MAXLONG :: 0x7fffffff -FILE_ATTRIBUTE_READONLY: DWORD : 0x00000001 -FILE_ATTRIBUTE_HIDDEN: DWORD : 0x00000002 -FILE_ATTRIBUTE_SYSTEM: DWORD : 0x00000004 -FILE_ATTRIBUTE_DIRECTORY: DWORD : 0x00000010 -FILE_ATTRIBUTE_ARCHIVE: DWORD : 0x00000020 -FILE_ATTRIBUTE_DEVICE: DWORD : 0x00000040 -FILE_ATTRIBUTE_NORMAL: DWORD : 0x00000080 -FILE_ATTRIBUTE_TEMPORARY: DWORD : 0x00000100 -FILE_ATTRIBUTE_SPARSE_FILE: DWORD : 0x00000200 -FILE_ATTRIBUTE_REPARSE_Point: DWORD : 0x00000400 -FILE_ATTRIBUTE_REPARSE_POINT: DWORD : 0x00000400 -FILE_ATTRIBUTE_COMPRESSED: DWORD : 0x00000800 -FILE_ATTRIBUTE_OFFLINE: DWORD : 0x00001000 -FILE_ATTRIBUTE_NOT_CONTENT_INDEXED: DWORD : 0x00002000 -FILE_ATTRIBUTE_ENCRYPTED: DWORD : 0x00004000 +FILE_ATTRIBUTE_READONLY : DWORD : 0x00000001 +FILE_ATTRIBUTE_HIDDEN : DWORD : 0x00000002 +FILE_ATTRIBUTE_SYSTEM : DWORD : 0x00000004 +FILE_ATTRIBUTE_DIRECTORY : DWORD : 0x00000010 +FILE_ATTRIBUTE_ARCHIVE : DWORD : 0x00000020 +FILE_ATTRIBUTE_DEVICE : DWORD : 0x00000040 +FILE_ATTRIBUTE_NORMAL : DWORD : 0x00000080 +FILE_ATTRIBUTE_TEMPORARY : DWORD : 0x00000100 +FILE_ATTRIBUTE_SPARSE_FILE : DWORD : 0x00000200 +FILE_ATTRIBUTE_REPARSE_Point : DWORD : 0x00000400 +FILE_ATTRIBUTE_REPARSE_POINT : DWORD : 0x00000400 +FILE_ATTRIBUTE_COMPRESSED : DWORD : 0x00000800 +FILE_ATTRIBUTE_OFFLINE : DWORD : 0x00001000 +FILE_ATTRIBUTE_NOT_CONTENT_INDEXED : DWORD : 0x00002000 +FILE_ATTRIBUTE_ENCRYPTED : DWORD : 0x00004000 -FILE_SHARE_READ: DWORD : 0x00000001 -FILE_SHARE_WRITE: DWORD : 0x00000002 -FILE_SHARE_DELETE: DWORD : 0x00000004 -FILE_GENERIC_ALL: DWORD : 0x10000000 -FILE_GENERIC_EXECUTE: DWORD : 0x20000000 -FILE_GENERIC_READ: DWORD : 0x80000000 +FILE_SHARE_READ : DWORD : 0x00000001 +FILE_SHARE_WRITE : DWORD : 0x00000002 +FILE_SHARE_DELETE : DWORD : 0x00000004 +FILE_GENERIC_ALL : DWORD : 0x10000000 +FILE_GENERIC_EXECUTE : DWORD : 0x20000000 +FILE_GENERIC_READ : DWORD : 0x80000000 FILE_ALL_ACCESS :: STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF FILE_ACTION_ADDED :: 0x00000001 @@ -222,11 +225,11 @@ FILE_NOTIFY_CHANGE_LAST_ACCESS :: 0x00000020 FILE_NOTIFY_CHANGE_CREATION :: 0x00000040 FILE_NOTIFY_CHANGE_SECURITY :: 0x00000100 -CREATE_NEW: DWORD : 1 -CREATE_ALWAYS: DWORD : 2 -OPEN_ALWAYS: DWORD : 4 -OPEN_EXISTING: DWORD : 3 -TRUNCATE_EXISTING: DWORD : 5 +CREATE_NEW : DWORD : 1 +CREATE_ALWAYS : DWORD : 2 +OPEN_ALWAYS : DWORD : 4 +OPEN_EXISTING : DWORD : 3 +TRUNCATE_EXISTING : DWORD : 5 FILE_READ_DATA : DWORD : 0x00000001 FILE_LIST_DIRECTORY : DWORD : 0x00000001 @@ -248,11 +251,12 @@ GENERIC_WRITE : DWORD : 0x40000000 GENERIC_EXECUTE : DWORD : 0x20000000 GENERIC_ALL : DWORD : 0x10000000 -FILE_GENERIC_WRITE: DWORD : STANDARD_RIGHTS_WRITE | - FILE_WRITE_DATA | +FILE_GENERIC_WRITE : DWORD : \ + STANDARD_RIGHTS_WRITE | + FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | - FILE_WRITE_EA | - FILE_APPEND_DATA | + FILE_WRITE_EA | + FILE_APPEND_DATA | SYNCHRONIZE SECURITY_SQOS_PRESENT: DWORD : 0x00100000 @@ -297,13 +301,13 @@ POWER_REQUEST_CONTEXT_DETAILED_STRING :: DIAGNOSTIC_REASON_DETAILED_STRING REASON_CONTEXT :: struct { Version: ULONG, - Flags: DWORD, + Flags: DWORD, Reason: struct #raw_union { Detailed: struct { LocalizedReasonModule: HMODULE, - LocalizedReasonId: ULONG, - ReasonStringCount: ULONG, - ReasonStrings: ^LPWSTR, + LocalizedReasonId: ULONG, + ReasonStringCount: ULONG, + ReasonStrings: [^]LPWSTR `fmt:"v,ReasonStringCount"`, }, SimpleReasonString: LPWSTR, }, @@ -324,9 +328,9 @@ RRF_RT_ANY :: 0x0000ffff RRF_NOEXPAND :: 0x10000000 RRF_ZEROONFAILURE :: 0x20000000 -ACCESS_MASK :: DWORD +ACCESS_MASK :: DWORD PACCESS_MASK :: ^ACCESS_MASK -REGSAM :: ACCESS_MASK +REGSAM :: ACCESS_MASK // Reserved Key Handles. HKEY_CLASSES_ROOT :: HKEY(uintptr(0x80000000)) @@ -368,12 +372,13 @@ KEY_WOW64_RES :: 0x0300 KEY_READ :: (STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & (~SYNCHRONIZE) KEY_WRITE :: (STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE) KEY_EXECUTE :: (KEY_READ) & (~SYNCHRONIZE) -KEY_ALL_ACCESS :: (STANDARD_RIGHTS_ALL | - KEY_QUERY_VALUE | - KEY_SET_VALUE | - KEY_CREATE_SUB_KEY | +KEY_ALL_ACCESS :: ( + STANDARD_RIGHTS_ALL | + KEY_QUERY_VALUE | + KEY_SET_VALUE | + KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS | - KEY_NOTIFY | + KEY_NOTIFY | KEY_CREATE_LINK) & (~SYNCHRONIZE) // Open/Create Options @@ -385,17 +390,19 @@ REG_OPTION_BACKUP_RESTORE :: 0x00000004 REG_OPTION_OPEN_LINK :: 0x00000008 REG_OPTION_DONT_VIRTUALIZE :: 0x00000010 -REG_LEGAL_OPTION :: REG_OPTION_RESERVED | - REG_OPTION_NON_VOLATILE | - REG_OPTION_VOLATILE | - REG_OPTION_CREATE_LINK | +REG_LEGAL_OPTION :: \ + REG_OPTION_RESERVED | + REG_OPTION_NON_VOLATILE | + REG_OPTION_VOLATILE | + REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE | - REG_OPTION_OPEN_LINK | + REG_OPTION_OPEN_LINK | REG_OPTION_DONT_VIRTUALIZE -REG_OPEN_LEGAL_OPTION :: REG_OPTION_RESERVED | +REG_OPEN_LEGAL_OPTION :: \ + REG_OPTION_RESERVED | REG_OPTION_BACKUP_RESTORE | - REG_OPTION_OPEN_LINK | + REG_OPTION_OPEN_LINK | REG_OPTION_DONT_VIRTUALIZE // Key creation/open disposition @@ -437,10 +444,11 @@ REG_NOTIFY_CHANGE_LAST_SET :: 0x00000004 REG_NOTIFY_CHANGE_SECURITY :: 0x00000008 REG_NOTIFY_THREAD_AGNOSTIC :: 0x10000000 -REG_LEGAL_CHANGE_FILTER :: REG_NOTIFY_CHANGE_NAME | +REG_LEGAL_CHANGE_FILTER :: \ + REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | - REG_NOTIFY_CHANGE_LAST_SET | - REG_NOTIFY_CHANGE_SECURITY | + REG_NOTIFY_CHANGE_LAST_SET | + REG_NOTIFY_CHANGE_SECURITY | REG_NOTIFY_THREAD_AGNOSTIC // Predefined Value Types. @@ -461,9 +469,9 @@ REG_QWORD_LITTLE_ENDIAN :: 11 BSMINFO :: struct { cbSize: UINT, - hdesk: HDESK, - hwnd: HWND, - luid: LUID, + hdesk: HDESK, + hwnd: HWND, + luid: LUID, } PBSMINFO :: ^BSMINFO @@ -545,37 +553,37 @@ COLOR_BTNHILIGHT :: COLOR_BTNHIGHLIGHT // Common Control Notification Code Ranges NM_FIRST :: 0 -NM_LAST :: ~DWORD(99 - 1) -LVN_FIRST :: ~DWORD(100 - 1) -LVN_LAST :: ~DWORD(199 - 1) -HDN_FIRST :: ~DWORD(300 - 1) -HDN_LAST :: ~DWORD(399 - 1) -TVN_FIRST :: ~DWORD(400 - 1) -TVN_LAST :: ~DWORD(499 - 1) -TTN_FIRST :: ~DWORD(520 - 1) -TTN_LAST :: ~DWORD(549 - 1) -TCN_FIRST :: ~DWORD(550 - 1) -TCN_LAST :: ~DWORD(580 - 1) -CDN_FIRST :: ~DWORD(601 - 1) -CDN_LAST :: ~DWORD(699 - 1) -TBN_FIRST :: ~DWORD(700 - 1) -TBN_LAST :: ~DWORD(720 - 1) -UDN_FIRST :: ~DWORD(721 - 1) -UDN_LAST :: ~DWORD(740 - 1) -MCN_FIRST :: ~DWORD(750 - 1) -MCN_LAST :: ~DWORD(759 - 1) -DTN_FIRST :: ~DWORD(760 - 1) -DTN_LAST :: ~DWORD(799 - 1) -CBEN_FIRST :: ~DWORD(800 - 1) -CBEN_LAST :: ~DWORD(830 - 1) -RBN_FIRST :: ~DWORD(831 - 1) -RBN_LAST :: ~DWORD(859 - 1) -IPN_FIRST :: ~DWORD(860 - 1) -IPN_LAST :: ~DWORD(879 - 1) -SBN_FIRST :: ~DWORD(880 - 1) -SBN_LAST :: ~DWORD(899 - 1) -PGN_FIRST :: ~DWORD(900 - 1) -PGN_LAST :: ~DWORD(950 - 1) +NM_LAST :: ~DWORD( 99 - 1) +LVN_FIRST :: ~DWORD( 100 - 1) +LVN_LAST :: ~DWORD( 199 - 1) +HDN_FIRST :: ~DWORD( 300 - 1) +HDN_LAST :: ~DWORD( 399 - 1) +TVN_FIRST :: ~DWORD( 400 - 1) +TVN_LAST :: ~DWORD( 499 - 1) +TTN_FIRST :: ~DWORD( 520 - 1) +TTN_LAST :: ~DWORD( 549 - 1) +TCN_FIRST :: ~DWORD( 550 - 1) +TCN_LAST :: ~DWORD( 580 - 1) +CDN_FIRST :: ~DWORD( 601 - 1) +CDN_LAST :: ~DWORD( 699 - 1) +TBN_FIRST :: ~DWORD( 700 - 1) +TBN_LAST :: ~DWORD( 720 - 1) +UDN_FIRST :: ~DWORD( 721 - 1) +UDN_LAST :: ~DWORD( 740 - 1) +MCN_FIRST :: ~DWORD( 750 - 1) +MCN_LAST :: ~DWORD( 759 - 1) +DTN_FIRST :: ~DWORD( 760 - 1) +DTN_LAST :: ~DWORD( 799 - 1) +CBEN_FIRST :: ~DWORD( 800 - 1) +CBEN_LAST :: ~DWORD( 830 - 1) +RBN_FIRST :: ~DWORD( 831 - 1) +RBN_LAST :: ~DWORD( 859 - 1) +IPN_FIRST :: ~DWORD( 860 - 1) +IPN_LAST :: ~DWORD( 879 - 1) +SBN_FIRST :: ~DWORD( 880 - 1) +SBN_LAST :: ~DWORD( 899 - 1) +PGN_FIRST :: ~DWORD( 900 - 1) +PGN_LAST :: ~DWORD( 950 - 1) WMN_FIRST :: ~DWORD(1000 - 1) WMN_LAST :: ~DWORD(1200 - 1) BCN_FIRST :: ~DWORD(1250 - 1) @@ -1255,61 +1263,61 @@ HOOKPROC :: #type proc "system" (code: c_int, wParam: WPARAM, lParam: LPARAM) -> WINEVENTPROC :: #type proc "system" ( hWinEventHook: HWINEVENTHOOK, - event: DWORD, - hwnd: HWND, - idObject, idChild: LONG, + event: DWORD, + hwnd: HWND, + idObject, idChild: LONG, idEventThread, dwmsEventTime: DWORD, ) CWPRETSTRUCT :: struct { lResult: LRESULT, - lParam: LPARAM, - wParam: WPARAM, + lParam: LPARAM, + wParam: WPARAM, message: UINT, - hwnd: HWND, + hwnd: HWND, } MSLLHOOKSTRUCT :: struct { - pt: POINT, - mouseData: DWORD, - flags: DWORD, - time: DWORD, + pt: POINT, + mouseData: DWORD, + flags: DWORD, + time: DWORD, dwExtraInfo: ULONG_PTR, } KBDLLHOOKSTRUCT :: struct { - vkCode: DWORD, - scanCode: DWORD, - flags: DWORD, - time: DWORD, + vkCode: DWORD, + scanCode: DWORD, + flags: DWORD, + time: DWORD, dwExtraInfo: ULONG_PTR, } MOUSEINPUT :: struct { - dx: LONG, - dy: LONG, - mouseData: DWORD, - dwFlags: DWORD, - time: DWORD, + dx: LONG, + dy: LONG, + mouseData: DWORD, + dwFlags: DWORD, + time: DWORD, dwExtraInfo: ULONG_PTR, } KEYBDINPUT :: struct { - wVk: WORD, - wScan: WORD, - dwFlags: DWORD, - time: DWORD, + wVk: WORD, + wScan: WORD, + dwFlags: DWORD, + time: DWORD, dwExtraInfo: ULONG_PTR, } HARDWAREINPUT :: struct { - uMsg: DWORD, + uMsg: DWORD, wParamL: WORD, wParamH: WORD, } INPUT_TYPE :: enum DWORD { - MOUSE = 0, + MOUSE = 0, KEYBOARD = 1, HARDWARE = 2, } @@ -1317,128 +1325,128 @@ INPUT_TYPE :: enum DWORD { INPUT :: struct { type: INPUT_TYPE, using _: struct #raw_union { - mi: MOUSEINPUT, - ki: KEYBDINPUT, - hi: HARDWAREINPUT, + mi: MOUSEINPUT `raw_union_tag:"type=MOUSE"`, + ki: KEYBDINPUT `raw_union_tag:"type=KEYBOARD"`, + hi: HARDWAREINPUT `raw_union_tag:"type=HARDWARE"`, }, } -MOUSEEVENTF_MOVE :: 0x0001 -MOUSEEVENTF_LEFTDOWN :: 0x0002 -MOUSEEVENTF_LEFTUP :: 0x0004 -MOUSEEVENTF_RIGHTDOWN :: 0x0008 -MOUSEEVENTF_RIGHTUP :: 0x0010 -MOUSEEVENTF_MIDDLEDOWN :: 0x0020 -MOUSEEVENTF_MIDDLEUP :: 0x0040 -MOUSEEVENTF_XDOWN :: 0x0080 -MOUSEEVENTF_XUP :: 0x0100 -MOUSEEVENTF_WHEEL :: 0x0800 -MOUSEEVENTF_HWHEEL :: 0x1000 +MOUSEEVENTF_MOVE :: 0x0001 +MOUSEEVENTF_LEFTDOWN :: 0x0002 +MOUSEEVENTF_LEFTUP :: 0x0004 +MOUSEEVENTF_RIGHTDOWN :: 0x0008 +MOUSEEVENTF_RIGHTUP :: 0x0010 +MOUSEEVENTF_MIDDLEDOWN :: 0x0020 +MOUSEEVENTF_MIDDLEUP :: 0x0040 +MOUSEEVENTF_XDOWN :: 0x0080 +MOUSEEVENTF_XUP :: 0x0100 +MOUSEEVENTF_WHEEL :: 0x0800 +MOUSEEVENTF_HWHEEL :: 0x1000 MOUSEEVENTF_MOVE_NOCOALESCE :: 0x2000 -MOUSEEVENTF_VIRTUALDESK :: 0x4000 -MOUSEEVENTF_ABSOLUTE :: 0x8000 +MOUSEEVENTF_VIRTUALDESK :: 0x4000 +MOUSEEVENTF_ABSOLUTE :: 0x8000 WNDCLASSA :: struct { - style: UINT, - lpfnWndProc: WNDPROC, - cbClsExtra: c_int, - cbWndExtra: c_int, - hInstance: HINSTANCE, - hIcon: HICON, - hCursor: HCURSOR, + style: UINT, + lpfnWndProc: WNDPROC, + cbClsExtra: c_int, + cbWndExtra: c_int, + hInstance: HINSTANCE, + hIcon: HICON, + hCursor: HCURSOR, hbrBackground: HBRUSH, - lpszMenuName: LPCSTR, + lpszMenuName: LPCSTR, lpszClassName: LPCSTR, } WNDCLASSW :: struct { - style: UINT, - lpfnWndProc: WNDPROC, - cbClsExtra: c_int, - cbWndExtra: c_int, - hInstance: HINSTANCE, - hIcon: HICON, - hCursor: HCURSOR, + style: UINT, + lpfnWndProc: WNDPROC, + cbClsExtra: c_int, + cbWndExtra: c_int, + hInstance: HINSTANCE, + hIcon: HICON, + hCursor: HCURSOR, hbrBackground: HBRUSH, - lpszMenuName: LPCWSTR, + lpszMenuName: LPCWSTR, lpszClassName: LPCWSTR, } WNDCLASSEXA :: struct { - cbSize: UINT, - style: UINT, - lpfnWndProc: WNDPROC, - cbClsExtra: c_int, - cbWndExtra: c_int, - hInstance: HINSTANCE, - hIcon: HICON, - hCursor: HCURSOR, + cbSize: UINT, + style: UINT, + lpfnWndProc: WNDPROC, + cbClsExtra: c_int, + cbWndExtra: c_int, + hInstance: HINSTANCE, + hIcon: HICON, + hCursor: HCURSOR, hbrBackground: HBRUSH, - lpszMenuName: LPCSTR, + lpszMenuName: LPCSTR, lpszClassName: LPCSTR, - hIconSm: HICON, + hIconSm: HICON, } WNDCLASSEXW :: struct { - cbSize: UINT, - style: UINT, - lpfnWndProc: WNDPROC, - cbClsExtra: c_int, - cbWndExtra: c_int, - hInstance: HINSTANCE, - hIcon: HICON, - hCursor: HCURSOR, + cbSize: UINT, + style: UINT, + lpfnWndProc: WNDPROC, + cbClsExtra: c_int, + cbWndExtra: c_int, + hInstance: HINSTANCE, + hIcon: HICON, + hCursor: HCURSOR, hbrBackground: HBRUSH, - lpszMenuName: LPCWSTR, + lpszMenuName: LPCWSTR, lpszClassName: LPCWSTR, - hIconSm: HICON, + hIconSm: HICON, } MSG :: struct { - hwnd: HWND, + hwnd: HWND, message: UINT, - wParam: WPARAM, - lParam: LPARAM, - time: DWORD, - pt: POINT, + wParam: WPARAM, + lParam: LPARAM, + time: DWORD, + pt: POINT, } LPMSG :: ^MSG NOTIFYICONDATAW :: struct { - cbSize: DWORD, - hWnd: HWND, - uID: UINT, - uFlags: UINT, + cbSize: DWORD, + hWnd: HWND, + uID: UINT, + uFlags: UINT, uCallbackMessage: UINT, - hIcon: HICON, - szTip: [128]WCHAR, - dwState: DWORD, - dwStateMask: DWORD, - szInfo: [256]WCHAR, + hIcon: HICON, + szTip: [128]WCHAR, + dwState: DWORD, + dwStateMask: DWORD, + szInfo: [256]WCHAR, using _: struct #raw_union { uTimeout: UINT, uVersion: UINT, }, - szInfoTitle: [64]WCHAR, - dwInfoFlags: DWORD, - guidItem: GUID, + szInfoTitle: [64]WCHAR, + dwInfoFlags: DWORD, + guidItem: GUID, hBalloonIcon: HICON, } -NIF_MESSAGE :: 0x00000001 -NIF_ICON :: 0x00000002 -NIF_TIP :: 0x00000004 -NIF_STATE :: 0x00000008 -NIF_INFO :: 0x00000010 -NIF_GUID :: 0x00000020 +NIF_MESSAGE :: 0x00000001 +NIF_ICON :: 0x00000002 +NIF_TIP :: 0x00000004 +NIF_STATE :: 0x00000008 +NIF_INFO :: 0x00000010 +NIF_GUID :: 0x00000020 NIF_REALTIME :: 0x00000040 -NIF_SHOWTIP :: 0x00000080 +NIF_SHOWTIP :: 0x00000080 -NIM_ADD :: 0x00000000 -NIM_MODIFY :: 0x00000001 -NIM_DELETE :: 0x00000002 -NIM_SETFOCUS :: 0x00000003 +NIM_ADD :: 0x00000000 +NIM_MODIFY :: 0x00000001 +NIM_DELETE :: 0x00000002 +NIM_SETFOCUS :: 0x00000003 NIM_SETVERSION :: 0x00000004 // Menu flags for Add/Check/EnableMenuItem() @@ -1448,37 +1456,37 @@ MF_APPEND :: 0x00000100 MF_DELETE :: 0x00000200 MF_REMOVE :: 0x00001000 -MF_BYCOMMAND :: 0x00000000 +MF_BYCOMMAND :: 0x00000000 MF_BYPOSITION :: 0x00000400 MF_SEPARATOR :: 0x00000800 -MF_ENABLED :: 0x00000000 -MF_GRAYED :: 0x00000001 +MF_ENABLED :: 0x00000000 +MF_GRAYED :: 0x00000001 MF_DISABLED :: 0x00000002 -MF_UNCHECKED :: 0x00000000 -MF_CHECKED :: 0x00000008 +MF_UNCHECKED :: 0x00000000 +MF_CHECKED :: 0x00000008 MF_USECHECKBITMAPS :: 0x00000200 -MF_STRING :: 0x00000000 -MF_BITMAP :: 0x00000004 +MF_STRING :: 0x00000000 +MF_BITMAP :: 0x00000004 MF_OWNERDRAW :: 0x00000100 -MF_POPUP :: 0x00000010 +MF_POPUP :: 0x00000010 MF_MENUBARBREAK :: 0x00000020 -MF_MENUBREAK :: 0x00000040 +MF_MENUBREAK :: 0x00000040 MF_UNHILITE :: 0x00000000 -MF_HILITE :: 0x00000080 +MF_HILITE :: 0x00000080 -MF_DEFAULT :: 0x00001000 -MF_SYSMENU :: 0x00002000 -MF_HELP :: 0x00004000 +MF_DEFAULT :: 0x00001000 +MF_SYSMENU :: 0x00002000 +MF_HELP :: 0x00004000 MF_RIGHTJUSTIFY :: 0x00004000 MF_MOUSESELECT :: 0x00008000 -MF_END :: 0x00000080 // Obsolete -- only used by old RES files +MF_END :: 0x00000080 // Obsolete -- only used by old RES files // Menu flags for Add/Check/EnableMenuItem() MFS_GRAYED :: 0x00000003 @@ -1491,27 +1499,27 @@ MFS_UNHILITE :: MF_UNHILITE MFS_DEFAULT :: MF_DEFAULT // Flags for TrackPopupMenu -TPM_LEFTBUTTON :: 0x0000 -TPM_RIGHTBUTTON :: 0x0002 -TPM_LEFTALIGN :: 0x0000 -TPM_CENTERALIGN :: 0x0004 -TPM_RIGHTALIGN :: 0x0008 -TPM_TOPALIGN :: 0x0000 +TPM_LEFTBUTTON :: 0x0000 +TPM_RIGHTBUTTON :: 0x0002 +TPM_LEFTALIGN :: 0x0000 +TPM_CENTERALIGN :: 0x0004 +TPM_RIGHTALIGN :: 0x0008 +TPM_TOPALIGN :: 0x0000 TPM_VCENTERALIGN :: 0x0010 -TPM_BOTTOMALIGN :: 0x0020 +TPM_BOTTOMALIGN :: 0x0020 -TPM_HORIZONTAL :: 0x0000 /* Horz alignment matters more */ -TPM_VERTICAL :: 0x0040 /* Vert alignment matters more */ -TPM_NONOTIFY :: 0x0080 /* Don't send any notification msgs */ -TPM_RETURNCMD :: 0x0100 -TPM_RECURSE :: 0x0001 +TPM_HORIZONTAL :: 0x0000 /* Horz alignment matters more */ +TPM_VERTICAL :: 0x0040 /* Vert alignment matters more */ +TPM_NONOTIFY :: 0x0080 /* Don't send any notification msgs */ +TPM_RETURNCMD :: 0x0100 +TPM_RECURSE :: 0x0001 TPM_HORPOSANIMATION :: 0x0400 TPM_HORNEGANIMATION :: 0x0800 TPM_VERPOSANIMATION :: 0x1000 TPM_VERNEGANIMATION :: 0x2000 -TPM_NOANIMATION :: 0x4000 -TPM_LAYOUTRTL :: 0x8000 -TPM_WORKAREA :: 0x10000 +TPM_NOANIMATION :: 0x4000 +TPM_LAYOUTRTL :: 0x8000 +TPM_WORKAREA :: 0x10000 // WM_NCHITTEST and MOUSEHOOKSTRUCT Mouse Position Codes HTERROR :: -2 @@ -1545,42 +1553,42 @@ HTCLOSE :: 20 HTHELP :: 21 TEXTMETRICW :: struct { - tmHeight: LONG, - tmAscent: LONG, - tmDescent: LONG, - tmInternalLeading: LONG, - tmExternalLeading: LONG, - tmAveCharWidth: LONG, - tmMaxCharWidth: LONG, - tmWeight: LONG, - tmOverhang: LONG, + tmHeight: LONG, + tmAscent: LONG, + tmDescent: LONG, + tmInternalLeading: LONG, + tmExternalLeading: LONG, + tmAveCharWidth: LONG, + tmMaxCharWidth: LONG, + tmWeight: LONG, + tmOverhang: LONG, tmDigitizedAspectX: LONG, tmDigitizedAspectY: LONG, - tmFirstChar: WCHAR, - tmLastChar: WCHAR, - tmDefaultChar: WCHAR, - tmBreakChar: WCHAR, - tmItalic: BYTE, - tmUnderlined: BYTE, - tmStruckOut: BYTE, - tmPitchAndFamily: BYTE, - tmCharSet: BYTE, + tmFirstChar: WCHAR, + tmLastChar: WCHAR, + tmDefaultChar: WCHAR, + tmBreakChar: WCHAR, + tmItalic: BYTE, + tmUnderlined: BYTE, + tmStruckOut: BYTE, + tmPitchAndFamily: BYTE, + tmCharSet: BYTE, } LPTEXTMETRICW :: ^TEXTMETRICW PAINTSTRUCT :: struct { - hdc: HDC, - fErase: BOOL, - rcPaint: RECT, - fRestore: BOOL, - fIncUpdate: BOOL, + hdc: HDC, + fErase: BOOL, + rcPaint: RECT, + fRestore: BOOL, + fIncUpdate: BOOL, rgbReserved: [32]BYTE, } TRACKMOUSEEVENT :: struct { - cbSize: DWORD, - dwFlags: DWORD, - hwndTrack: HWND, + cbSize: DWORD, + dwFlags: DWORD, + hwndTrack: HWND, dwHoverTime: DWORD, } @@ -1640,16 +1648,16 @@ MAX_LINKID_TEXT :: 48 L_MAX_URL_LENGTH :: 2048 + 32 + len("://") LITEM :: struct { - mask: UINT, - iLink: c_int, - state: UINT, + mask: UINT, + iLink: c_int, + state: UINT, stateMask: UINT, - szID: [MAX_LINKID_TEXT]WCHAR, - szUrl: [L_MAX_URL_LENGTH]WCHAR, + szID: [MAX_LINKID_TEXT]WCHAR, + szUrl: [L_MAX_URL_LENGTH]WCHAR, } NMLINK :: struct { - hdr: NMHDR, + hdr: NMHDR, item: LITEM, } @@ -1660,12 +1668,12 @@ NMHDR :: struct { } NMCUSTOMDRAW :: struct { - hdr: NMHDR, + hdr: NMHDR, dwDrawStage: DWORD, - hdc: HDC, - rc: RECT, - dwItemSpec: DWORD_PTR, - uItemState: UINT, + hdc: HDC, + rc: RECT, + dwItemSpec: DWORD_PTR, + uItemState: UINT, lItemlParam: LPARAM, } @@ -1701,14 +1709,14 @@ NM_TVSTATEIMAGECHANGING :: NM_OUTOFMEMORY-23 // uses NMTVSTATEIMAGECHANGING stru PCZZWSTR :: cstring16 SHFILEOPSTRUCTW :: struct { - hwnd: HWND, - wFunc: UINT, - pFrom: PCZZWSTR, - pTo: PCZZWSTR, - fFlags: FILEOP_FLAGS, + hwnd: HWND, + wFunc: UINT, + pFrom: PCZZWSTR, + pTo: PCZZWSTR, + fFlags: FILEOP_FLAGS, fAnyOperationsAborted: BOOL, - hNameMappings: LPVOID, - lpszProgressTitle: PCWSTR, // only used if FOF_SIMPLEPROGRESS + hNameMappings: LPVOID, + lpszProgressTitle: PCWSTR, // only used if FOF_SIMPLEPROGRESS } LPSHFILEOPSTRUCTW :: ^SHFILEOPSTRUCTW @@ -1741,7 +1749,7 @@ FOF_NO_UI :: (FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FILEOP_FLAGS :: WORD DEVMODEW :: struct { - dmDeviceName: [32]wchar_t, + dmDeviceName: [32]wchar_t, dmSpecVersion: WORD, dmDriverVersion: WORD, dmSize: WORD, @@ -1887,7 +1895,7 @@ WS_MINIMIZE : UINT : 0x2000_0000 WS_MINIMIZEBOX : UINT : 0x0002_0000 WS_OVERLAPPED : UINT : 0x0000_0000 WS_OVERLAPPEDWINDOW : UINT : WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX -WS_POPUP : UINT : 0x8000_0000 +WS_POPUP : UINT : 0x8000_0000 WS_POPUPWINDOW : UINT : WS_POPUP | WS_BORDER | WS_SYSMENU WS_SIZEBOX : UINT : 0x0004_0000 WS_SYSMENU : UINT : 0x0008_0000 @@ -2227,24 +2235,24 @@ SEE_MASK_FLAG_LOG_USAGE :: 0x04000000 SEE_MASK_FLAG_HINST_IS_SITE :: 0x08000000 SHELLEXECUTEINFOW :: struct { - cbSize: DWORD, // in, required, sizeof of this structure - fMask: ULONG, // in, SEE_MASK_XXX values - hwnd: HWND, // in, optional - lpVerb: LPCWSTR, // in, optional when unspecified the default verb is choosen - lpFile: LPCWSTR, // in, either this value or lpIDList must be specified - lpParameters: LPCWSTR, // in, optional - lpDirectory: LPCWSTR, // in, optional - nShow: c_int, // in, required - hInstApp: HINSTANCE, // out when SEE_MASK_NOCLOSEPROCESS is specified - lpIDList: rawptr, // in, valid when SEE_MASK_IDLIST is specified, PCIDLIST_ABSOLUTE, for use with SEE_MASK_IDLIST & SEE_MASK_INVOKEIDLIST - lpClass: LPCWSTR, // in, valid when SEE_MASK_CLASSNAME is specified - hkeyClass: HKEY, // in, valid when SEE_MASK_CLASSKEY is specified - dwHotKey: DWORD, // in, valid when SEE_MASK_HOTKEY is specified - DUMMYUNIONNAME: struct #raw_union { - hIcon: HANDLE, // not used - hMonitor: HANDLE, // in, valid when SEE_MASK_HMONITOR specified + cbSize: DWORD, // in, required, sizeof of this structure + fMask: ULONG, // in, SEE_MASK_XXX values + hwnd: HWND, // in, optional + lpVerb: LPCWSTR, // in, optional when unspecified the default verb is choosen + lpFile: LPCWSTR, // in, either this value or lpIDList must be specified + lpParameters: LPCWSTR, // in, optional + lpDirectory: LPCWSTR, // in, optional + nShow: c_int, // in, required + hInstApp: HINSTANCE, // out when SEE_MASK_NOCLOSEPROCESS is specified + lpIDList: rawptr, // in, valid when SEE_MASK_IDLIST is specified, PCIDLIST_ABSOLUTE, for use with SEE_MASK_IDLIST & SEE_MASK_INVOKEIDLIST + lpClass: LPCWSTR, // in, valid when SEE_MASK_CLASSNAME is specified + hkeyClass: HKEY, // in, valid when SEE_MASK_CLASSKEY is specified + dwHotKey: DWORD, // in, valid when SEE_MASK_HOTKEY is specified + using DUMMYUNIONNAME: struct #raw_union { + hIcon: HANDLE, // not used + hMonitor: HANDLE, // in, valid when SEE_MASK_HMONITOR specified }, - hProcess: HANDLE, // out, valid when SEE_MASK_NOCLOSEPROCESS specified + hProcess: HANDLE, // out, valid when SEE_MASK_NOCLOSEPROCESS specified } LPSHELLEXECUTEINFOW :: ^SHELLEXECUTEINFOW @@ -2291,9 +2299,9 @@ WA_CLICKACTIVE :: 2 // Struct pointed to by WM_GETMINMAXINFO lParam MINMAXINFO :: struct { - ptReserved: POINT, - ptMaxSize: POINT, - ptMaxPosition: POINT, + ptReserved: POINT, + ptMaxSize: POINT, + ptMaxPosition: POINT, ptMinTrackSize: POINT, ptMaxTrackSize: POINT, } @@ -2514,53 +2522,53 @@ STOCK_LAST :: 19 CLR_INVALID :: 0xFFFFFFFF RGBQUAD :: struct { - rgbBlue: BYTE, - rgbGreen: BYTE, - rgbRed: BYTE, + rgbBlue: BYTE, + rgbGreen: BYTE, + rgbRed: BYTE, rgbReserved: BYTE, } PIXELFORMATDESCRIPTOR :: struct { - nSize: WORD, - nVersion: WORD, - dwFlags: DWORD, - iPixelType: BYTE, - cColorBits: BYTE, - cRedBits: BYTE, - cRedShift: BYTE, - cGreenBits: BYTE, - cGreenShift: BYTE, - cBlueBits: BYTE, - cBlueShift: BYTE, - cAlphaBits: BYTE, - cAlphaShift: BYTE, - cAccumBits: BYTE, - cAccumRedBits: BYTE, + nSize: WORD, + nVersion: WORD, + dwFlags: DWORD, + iPixelType: BYTE, + cColorBits: BYTE, + cRedBits: BYTE, + cRedShift: BYTE, + cGreenBits: BYTE, + cGreenShift: BYTE, + cBlueBits: BYTE, + cBlueShift: BYTE, + cAlphaBits: BYTE, + cAlphaShift: BYTE, + cAccumBits: BYTE, + cAccumRedBits: BYTE, cAccumGreenBits: BYTE, - cAccumBlueBits: BYTE, + cAccumBlueBits: BYTE, cAccumAlphaBits: BYTE, - cDepthBits: BYTE, - cStencilBits: BYTE, - cAuxBuffers: BYTE, - iLayerType: BYTE, - bReserved: BYTE, - dwLayerMask: DWORD, - dwVisibleMask: DWORD, - dwDamageMask: DWORD, + cDepthBits: BYTE, + cStencilBits: BYTE, + cAuxBuffers: BYTE, + iLayerType: BYTE, + bReserved: BYTE, + dwLayerMask: DWORD, + dwVisibleMask: DWORD, + dwDamageMask: DWORD, } BITMAPINFOHEADER :: struct { - biSize: DWORD, - biWidth: LONG, - biHeight: LONG, - biPlanes: WORD, - biBitCount: WORD, - biCompression: DWORD, - biSizeImage: DWORD, + biSize: DWORD, + biWidth: LONG, + biHeight: LONG, + biPlanes: WORD, + biBitCount: WORD, + biCompression: DWORD, + biSizeImage: DWORD, biXPelsPerMeter: LONG, biYPelsPerMeter: LONG, - biClrUsed: DWORD, - biClrImportant: DWORD, + biClrUsed: DWORD, + biClrImportant: DWORD, } BITMAPINFO :: struct { @@ -2668,64 +2676,64 @@ CONDITION_VARIABLE_INIT :: CONDITION_VARIABLE{} SRWLOCK_INIT :: SRWLOCK{} // Flags in STARTUPINFOW.dwFlags. -STARTF_USESHOWWINDOW: DWORD : 0x00000001 -STARTF_USESIZE: DWORD : 0x00000002 -STARTF_USEPOSITION: DWORD : 0x00000004 -STARTF_USECOUNTCHARS: DWORD : 0x00000008 -STARTF_USEFILLATTRIBUTE: DWORD : 0x00000010 -STARTF_RUNFULLSCREEN: DWORD : 0x00000020 // ignored for non-x86 platforms -STARTF_FORCEONFEEDBACK: DWORD : 0x00000040 -STARTF_FORCEOFFFEEDBACK: DWORD : 0x00000080 -STARTF_USESTDHANDLES: DWORD : 0x00000100 +STARTF_USESHOWWINDOW : DWORD : 0x00000001 +STARTF_USESIZE : DWORD : 0x00000002 +STARTF_USEPOSITION : DWORD : 0x00000004 +STARTF_USECOUNTCHARS : DWORD : 0x00000008 +STARTF_USEFILLATTRIBUTE : DWORD : 0x00000010 +STARTF_RUNFULLSCREEN : DWORD : 0x00000020 // ignored for non-x86 platforms +STARTF_FORCEONFEEDBACK : DWORD : 0x00000040 +STARTF_FORCEOFFFEEDBACK : DWORD : 0x00000080 +STARTF_USESTDHANDLES : DWORD : 0x00000100 // WINVER >= 0x400 -STARTF_USEHOTKEY: DWORD : 0x00000200 -STARTF_TITLEISLINKNAME: DWORD : 0x00000800 -STARTF_TITLEISAPPID: DWORD : 0x00001000 -STARTF_PREVENTPINNING: DWORD : 0x00002000 +STARTF_USEHOTKEY : DWORD : 0x00000200 +STARTF_TITLEISLINKNAME : DWORD : 0x00000800 +STARTF_TITLEISAPPID : DWORD : 0x00001000 +STARTF_PREVENTPINNING : DWORD : 0x00002000 // WINVER >= 0x600 -STARTF_UNTRUSTEDSOURCE: DWORD : 0x00008000 +STARTF_UNTRUSTEDSOURCE : DWORD : 0x00008000 VOLUME_NAME_DOS: DWORD : 0x0 -MOVEFILE_COPY_ALLOWED: DWORD: 0x2 -MOVEFILE_CREATE_HARDLINK: DWORD: 0x10 -MOVEFILE_DELAY_UNTIL_REBOOT: DWORD: 0x4 -MOVEFILE_FAIL_IF_NOT_TRACKABLE: DWORD: 0x20 -MOVEFILE_REPLACE_EXISTING: DWORD : 0x1 -MOVEFILE_WRITE_THROUGH: DWORD: 0x8 +MOVEFILE_COPY_ALLOWED : DWORD : 0x2 +MOVEFILE_CREATE_HARDLINK : DWORD : 0x10 +MOVEFILE_DELAY_UNTIL_REBOOT : DWORD : 0x4 +MOVEFILE_FAIL_IF_NOT_TRACKABLE : DWORD : 0x20 +MOVEFILE_REPLACE_EXISTING : DWORD : 0x1 +MOVEFILE_WRITE_THROUGH : DWORD : 0x8 -FILE_BEGIN: DWORD : 0 -FILE_CURRENT: DWORD : 1 -FILE_END: DWORD : 2 +FILE_BEGIN : DWORD : 0 +FILE_CURRENT : DWORD : 1 +FILE_END : DWORD : 2 -WAIT_OBJECT_0: DWORD : 0x00000000 -WAIT_TIMEOUT: DWORD : 258 -WAIT_FAILED: DWORD : 0xFFFFFFFF +WAIT_OBJECT_0 : DWORD : 0x00000000 +WAIT_TIMEOUT : DWORD : 258 +WAIT_FAILED : DWORD : 0xFFFFFFFF -FILE_FLAG_WRITE_THROUGH: DWORD : 0x80000000 -FILE_FLAG_OVERLAPPED: DWORD : 0x40000000 -FILE_FLAG_NO_BUFFERING: DWORD : 0x20000000 -FILE_FLAG_RANDOM_ACCESS: DWORD : 0x10000000 -FILE_FLAG_SEQUENTIAL_SCAN: DWORD : 0x08000000 -FILE_FLAG_DELETE_ON_CLOSE: DWORD : 0x04000000 -FILE_FLAG_BACKUP_SEMANTICS: DWORD : 0x02000000 -FILE_FLAG_POSIX_SEMANTICS: DWORD : 0x01000000 -FILE_FLAG_SESSION_AWARE: DWORD : 0x00800000 -FILE_FLAG_OPEN_REPARSE_POINT: DWORD : 0x00200000 -FILE_FLAG_OPEN_NO_RECALL: DWORD : 0x00100000 -FILE_FLAG_FIRST_PIPE_INSTANCE: DWORD : 0x00080000 +FILE_FLAG_WRITE_THROUGH : DWORD : 0x80000000 +FILE_FLAG_OVERLAPPED : DWORD : 0x40000000 +FILE_FLAG_NO_BUFFERING : DWORD : 0x20000000 +FILE_FLAG_RANDOM_ACCESS : DWORD : 0x10000000 +FILE_FLAG_SEQUENTIAL_SCAN : DWORD : 0x08000000 +FILE_FLAG_DELETE_ON_CLOSE : DWORD : 0x04000000 +FILE_FLAG_BACKUP_SEMANTICS : DWORD : 0x02000000 +FILE_FLAG_POSIX_SEMANTICS : DWORD : 0x01000000 +FILE_FLAG_SESSION_AWARE : DWORD : 0x00800000 +FILE_FLAG_OPEN_REPARSE_POINT : DWORD : 0x00200000 +FILE_FLAG_OPEN_NO_RECALL : DWORD : 0x00100000 +FILE_FLAG_FIRST_PIPE_INSTANCE : DWORD : 0x00080000 -PIPE_ACCESS_INBOUND: DWORD : 0x00000001 -PIPE_ACCESS_OUTBOUND: DWORD : 0x00000002 -PIPE_ACCESS_DUPLEX: DWORD : 0x00000003 -PIPE_WAIT: DWORD : 0x00000000 -PIPE_TYPE_BYTE: DWORD : 0x00000000 -PIPE_TYPE_MESSAGE: DWORD : 0x00000004 -PIPE_REJECT_REMOTE_CLIENTS: DWORD : 0x00000008 -PIPE_READMODE_BYTE: DWORD : 0x00000000 -PIPE_READMODE_MESSAGE: DWORD : 0x00000002 -PIPE_ACCEPT_REMOTE_CLIENTS: DWORD : 0x00000000 +PIPE_ACCESS_INBOUND : DWORD : 0x00000001 +PIPE_ACCESS_OUTBOUND : DWORD : 0x00000002 +PIPE_ACCESS_DUPLEX : DWORD : 0x00000003 +PIPE_WAIT : DWORD : 0x00000000 +PIPE_TYPE_BYTE : DWORD : 0x00000000 +PIPE_TYPE_MESSAGE : DWORD : 0x00000004 +PIPE_REJECT_REMOTE_CLIENTS : DWORD : 0x00000008 +PIPE_READMODE_BYTE : DWORD : 0x00000000 +PIPE_READMODE_MESSAGE : DWORD : 0x00000002 +PIPE_ACCEPT_REMOTE_CLIENTS : DWORD : 0x00000000 FD_SETSIZE :: 64 @@ -2739,10 +2747,10 @@ HANDLE_FLAG_INHERIT: DWORD : 0x00000001 HANDLE_FLAG_PROTECT_FROM_CLOSE :: 0x00000002 GENERIC_MAPPING :: struct { - GenericRead: ACCESS_MASK, - GenericWrite: ACCESS_MASK, + GenericRead: ACCESS_MASK, + GenericWrite: ACCESS_MASK, GenericExecute: ACCESS_MASK, - GenericAll: ACCESS_MASK, + GenericAll: ACCESS_MASK, } PGENERIC_MAPPING :: ^GENERIC_MAPPING @@ -2758,14 +2766,14 @@ ANYSIZE_ARRAY :: 1 PLUID_AND_ATTRIBUTES :: ^LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES :: struct { - Luid: LUID, + Luid: LUID, Attributes: DWORD, } PRIVILEGE_SET :: struct { PrivilegeCount: DWORD, - Control: DWORD, - Privilege: [ANYSIZE_ARRAY]LUID_AND_ATTRIBUTES, + Control: DWORD, + Privilege: [ANYSIZE_ARRAY]LUID_AND_ATTRIBUTES `fmt:"v,PrivilegeCount"`, } PPRIVILEGE_SET :: ^PRIVILEGE_SET @@ -2780,7 +2788,8 @@ TOKEN_ADJUST_GROUPS :: 0x0040 TOKEN_ADJUST_DEFAULT :: 0x0080 TOKEN_ADJUST_SESSIONID :: 0x0100 -TOKEN_ALL_ACCESS_P :: STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY |\ +TOKEN_ALL_ACCESS_P :: \ + STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT TOKEN_ALL_ACCESS :: TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID @@ -2803,8 +2812,8 @@ CP_UTF8 :: 65001 // UTF-8 translation LCID :: DWORD LANGID :: WORD -LANG_NEUTRAL :: 0x00 -LANG_INVARIANT :: 0x7f +LANG_NEUTRAL :: 0x00 +LANG_INVARIANT :: 0x7f SUBLANG_NEUTRAL :: 0x00 // language neutral SUBLANG_DEFAULT :: 0x01 // user default @@ -2815,7 +2824,7 @@ WC_ERR_INVALID_CHARS :: 128 MAX_PATH :: 0x00000104 MAX_PATH_WIDE :: 0x8000 -INVALID_FILE_ATTRIBUTES :: DWORD(0xffff_ffff) +INVALID_FILE_ATTRIBUTES :: DWORD(0xffff_ffff) FILE_TYPE_DISK :: 0x0001 FILE_TYPE_CHAR :: 0x0002 @@ -2826,33 +2835,33 @@ POINT :: struct {x, y: LONG} PWINDOWPOS :: ^WINDOWPOS WINDOWPOS :: struct { - hwnd: HWND, + hwnd: HWND, hwndInsertAfter: HWND, - x: c_int, - y: c_int, - cx: c_int, - cy: c_int, + x: c_int, + y: c_int, + cx: c_int, + cy: c_int, flags: UINT, } when size_of(uintptr) == 4 { WSADATA :: struct { - wVersion: WORD, - wHighVersion: WORD, - szDescription: [WSADESCRIPTION_LEN + 1]u8, + wVersion: WORD, + wHighVersion: WORD, + szDescription: [WSADESCRIPTION_LEN + 1]u8, szSystemStatus: [WSASYS_STATUS_LEN + 1]u8, - iMaxSockets: u16, - iMaxUdpDg: u16, - lpVendorInfo: ^u8, + iMaxSockets: u16, + iMaxUdpDg: u16, + lpVendorInfo: [^]u8, } } else when size_of(uintptr) == 8 { WSADATA :: struct { - wVersion: WORD, - wHighVersion: WORD, - iMaxSockets: u16, - iMaxUdpDg: u16, - lpVendorInfo: ^u8, - szDescription: [WSADESCRIPTION_LEN + 1]u8, + wVersion: WORD, + wHighVersion: WORD, + iMaxSockets: u16, + iMaxUdpDg: u16, + lpVendorInfo: ^u8, + szDescription: [WSADESCRIPTION_LEN + 1]u8, szSystemStatus: [WSASYS_STATUS_LEN + 1]u8, } } else { @@ -2861,71 +2870,71 @@ when size_of(uintptr) == 4 { WSABUF :: struct { len: ULONG, - buf: ^CHAR, + buf: [^]CHAR `fmt"q,len"`, } WSAPROTOCOL_INFO :: struct { - dwServiceFlags1: DWORD, - dwServiceFlags2: DWORD, - dwServiceFlags3: DWORD, - dwServiceFlags4: DWORD, - dwProviderFlags: DWORD, - ProviderId: GUID, - dwCatalogEntryId: DWORD, - ProtocolChain: WSAPROTOCOLCHAIN, - iVersion: c_int, - iAddressFamily: c_int, - iMaxSockAddr: c_int, - iMinSockAddr: c_int, - iSocketType: c_int, - iProtocol: c_int, + dwServiceFlags1: DWORD, + dwServiceFlags2: DWORD, + dwServiceFlags3: DWORD, + dwServiceFlags4: DWORD, + dwProviderFlags: DWORD, + ProviderId: GUID, + dwCatalogEntryId: DWORD, + ProtocolChain: WSAPROTOCOLCHAIN, + iVersion: c_int, + iAddressFamily: c_int, + iMaxSockAddr: c_int, + iMinSockAddr: c_int, + iSocketType: c_int, + iProtocol: c_int, iProtocolMaxOffset: c_int, - iNetworkByteOrder: c_int, - iSecurityScheme: c_int, - dwMessageSize: DWORD, + iNetworkByteOrder: c_int, + iSecurityScheme: c_int, + dwMessageSize: DWORD, dwProviderReserved: DWORD, - szProtocol: [WSAPROTOCOL_LEN + 1]u16, + szProtocol: [WSAPROTOCOL_LEN + 1]u16, } WIN32_FILE_ATTRIBUTE_DATA :: struct { dwFileAttributes: DWORD, - ftCreationTime: FILETIME, + ftCreationTime: FILETIME, ftLastAccessTime: FILETIME, - ftLastWriteTime: FILETIME, - nFileSizeHigh: DWORD, - nFileSizeLow: DWORD, + ftLastWriteTime: FILETIME, + nFileSizeHigh: DWORD, + nFileSizeLow: DWORD, } FILE_INFO_BY_HANDLE_CLASS :: enum c_int { - FileBasicInfo = 0, - FileStandardInfo = 1, - FileNameInfo = 2, - FileRenameInfo = 3, - FileDispositionInfo = 4, - FileAllocationInfo = 5, - FileEndOfFileInfo = 6, - FileStreamInfo = 7, - FileCompressionInfo = 8, - FileAttributeTagInfo = 9, - FileIdBothDirectoryInfo = 10, // 0xA + FileBasicInfo = 0, + FileStandardInfo = 1, + FileNameInfo = 2, + FileRenameInfo = 3, + FileDispositionInfo = 4, + FileAllocationInfo = 5, + FileEndOfFileInfo = 6, + FileStreamInfo = 7, + FileCompressionInfo = 8, + FileAttributeTagInfo = 9, + FileIdBothDirectoryInfo = 10, // 0xA FileIdBothDirectoryRestartInfo = 11, // 0xB - FileIoPriorityHintInfo = 12, // 0xC - FileRemoteProtocolInfo = 13, // 0xD - FileFullDirectoryInfo = 14, // 0xE - FileFullDirectoryRestartInfo = 15, // 0xF - FileStorageInfo = 16, // 0x10 - FileAlignmentInfo = 17, // 0x11 - FileIdInfo = 18, // 0x12 - FileIdExtdDirectoryInfo = 19, // 0x13 + FileIoPriorityHintInfo = 12, // 0xC + FileRemoteProtocolInfo = 13, // 0xD + FileFullDirectoryInfo = 14, // 0xE + FileFullDirectoryRestartInfo = 15, // 0xF + FileStorageInfo = 16, // 0x10 + FileAlignmentInfo = 17, // 0x11 + FileIdInfo = 18, // 0x12 + FileIdExtdDirectoryInfo = 19, // 0x13 FileIdExtdDirectoryRestartInfo = 20, // 0x14 MaximumFileInfoByHandlesClass, } FILE_BASIC_INFO :: struct { - CreationTime: LARGE_INTEGER, + CreationTime: LARGE_INTEGER, LastAccessTime: LARGE_INTEGER, - LastWriteTime: LARGE_INTEGER, - ChangeTime: LARGE_INTEGER, + LastWriteTime: LARGE_INTEGER, + ChangeTime: LARGE_INTEGER, FileAttributes: DWORD, } @@ -2941,39 +2950,39 @@ FILE_NOTIFY_INFORMATION :: struct { } REPARSE_DATA_BUFFER :: struct { - ReparseTag: c_uint, + ReparseTag: c_uint, ReparseDataLength: c_ushort, - Reserved: c_ushort, - rest: [0]byte, + Reserved: c_ushort, + rest: [0]byte, } SYMBOLIC_LINK_REPARSE_BUFFER :: struct { SubstituteNameOffset: c_ushort, SubstituteNameLength: c_ushort, - PrintNameOffset: c_ushort, - PrintNameLength: c_ushort, - Flags: c_ulong, - PathBuffer: WCHAR, + PrintNameOffset: c_ushort, + PrintNameLength: c_ushort, + Flags: c_ulong, + PathBuffer: WCHAR, } MOUNT_POINT_REPARSE_BUFFER :: struct { SubstituteNameOffset: c_ushort, SubstituteNameLength: c_ushort, - PrintNameOffset: c_ushort, - PrintNameLength: c_ushort, - PathBuffer: WCHAR, + PrintNameOffset: c_ushort, + PrintNameLength: c_ushort, + PathBuffer: WCHAR, } LPPROGRESS_ROUTINE :: #type proc "system" ( - TotalFileSize: LARGE_INTEGER, - TotalBytesTransferred: LARGE_INTEGER, - StreamSize: LARGE_INTEGER, + TotalFileSize: LARGE_INTEGER, + TotalBytesTransferred: LARGE_INTEGER, + StreamSize: LARGE_INTEGER, StreamBytesTransferred: LARGE_INTEGER, - dwStreamNumber: DWORD, - dwCallbackReason: DWORD, - hSourceFile: HANDLE, - hDestinationFile: HANDLE, - lpData: LPVOID, + dwStreamNumber: DWORD, + dwCallbackReason: DWORD, + hSourceFile: HANDLE, + hDestinationFile: HANDLE, + lpData: LPVOID, ) -> DWORD CONDITION_VARIABLE :: struct { @@ -2984,21 +2993,21 @@ SRWLOCK :: struct { } CRITICAL_SECTION :: struct { CriticalSectionDebug: LPVOID, - LockCount: LONG, - RecursionCount: LONG, - OwningThread: HANDLE, - LockSemaphore: HANDLE, - SpinCount: ULONG_PTR, + LockCount: LONG, + RecursionCount: LONG, + OwningThread: HANDLE, + LockSemaphore: HANDLE, + SpinCount: ULONG_PTR, } REPARSE_MOUNTPOINT_DATA_BUFFER :: struct { - ReparseTag: DWORD, - ReparseDataLength: DWORD, - Reserved: WORD, - ReparseTargetLength: WORD, + ReparseTag: DWORD, + ReparseDataLength: DWORD, + Reserved: WORD, + ReparseTargetLength: WORD, ReparseTargetMaximumLength: WORD, - Reserved1: WORD, - ReparseTarget: WCHAR, + Reserved1: WORD, + ReparseTarget: WCHAR, } GUID :: struct { @@ -3021,12 +3030,12 @@ LPGUID :: ^GUID LPCGUID :: ^GUID REFIID :: ^GUID -REFGUID :: GUID -IID :: GUID -LPIID :: ^IID -CLSID :: GUID +REFGUID :: GUID +IID :: GUID +LPIID :: ^IID +CLSID :: GUID REFCLSID :: ^CLSID -LPCLSID :: ^CLSID +LPCLSID :: ^CLSID CLSCTX_INPROC_SERVER :: 0x1 CLSCTX_INPROC_HANDLER :: 0x2 @@ -3059,46 +3068,46 @@ CLSCTX_PS_DLL :: 0x80000000 CLSCTX_ALL :: CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER WSAPROTOCOLCHAIN :: struct { - ChainLen: c_int, - ChainEntries: [MAX_PROTOCOL_CHAIN]DWORD, + ChainLen: c_int, + ChainEntries: [MAX_PROTOCOL_CHAIN]DWORD `fmt:"v,ChainLen"`, } SECURITY_ATTRIBUTES :: struct { - nLength: DWORD, + nLength: DWORD, lpSecurityDescriptor: LPVOID, - bInheritHandle: BOOL, + bInheritHandle: BOOL, } PROCESS_INFORMATION :: struct { - hProcess: HANDLE, - hThread: HANDLE, + hProcess: HANDLE, + hThread: HANDLE, dwProcessId: DWORD, - dwThreadId: DWORD, + dwThreadId: DWORD, } STARTUPINFOW :: struct { - cb: DWORD, - lpReserved: LPWSTR, - lpDesktop: LPWSTR, - lpTitle: LPWSTR, - dwX: DWORD, - dwY: DWORD, - dwXSize: DWORD, - dwYSize: DWORD, - dwXCountChars: DWORD, - dwYCountChars: DWORD, + cb: DWORD, + lpReserved: LPWSTR, + lpDesktop: LPWSTR, + lpTitle: LPWSTR, + dwX: DWORD, + dwY: DWORD, + dwXSize: DWORD, + dwYSize: DWORD, + dwXCountChars: DWORD, + dwYCountChars: DWORD, dwFillAttribute: DWORD, - dwFlags: DWORD, - wShowWindow: WORD, - cbReserved2: WORD, - lpReserved2: LPBYTE, - hStdInput: HANDLE, - hStdOutput: HANDLE, - hStdError: HANDLE, + dwFlags: DWORD, + wShowWindow: WORD, + cbReserved2: WORD, + lpReserved2: LPBYTE, + hStdInput: HANDLE, + hStdOutput: HANDLE, + hStdError: HANDLE, } FILETIME :: struct { - dwLowDateTime: DWORD, + dwLowDateTime: DWORD, dwHighDateTime: DWORD, } @@ -3124,11 +3133,11 @@ UNICODE_STRING :: struct { } OVERLAPPED :: struct { - Internal: ^c_ulong, + Internal: ^c_ulong, InternalHigh: ^c_ulong, - Offset: DWORD, - OffsetHigh: DWORD, - hEvent: HANDLE, + Offset: DWORD, + OffsetHigh: DWORD, + hEvent: HANDLE, } OVERLAPPED_ENTRY :: struct { @@ -3139,9 +3148,9 @@ OVERLAPPED_ENTRY :: struct { } LPOVERLAPPED_COMPLETION_ROUTINE :: #type proc "system" ( - dwErrorCode: DWORD, + dwErrorCode: DWORD, dwNumberOfBytesTransfered: DWORD, - lpOverlapped: LPOVERLAPPED, + lpOverlapped: LPOVERLAPPED, ) ADDRESS_MODE :: enum c_int { @@ -3164,7 +3173,7 @@ fd_set :: struct { } timeval :: struct { - tv_sec: c_long, + tv_sec: c_long, tv_usec: c_long, } @@ -3199,145 +3208,145 @@ STATUS_PRIVILEGED_INSTRUCTION :: 0xC0000096 EXCEPTION_RECORD :: struct { - ExceptionCode: DWORD, - ExceptionFlags: DWORD, - ExceptionRecord: ^EXCEPTION_RECORD, - ExceptionAddress: LPVOID, - NumberParameters: DWORD, - ExceptionInformation: [EXCEPTION_MAXIMUM_PARAMETERS]LPVOID, + ExceptionCode: DWORD, + ExceptionFlags: DWORD, + ExceptionRecord: ^EXCEPTION_RECORD, + ExceptionAddress: LPVOID, + NumberParameters: DWORD, + ExceptionInformation: [EXCEPTION_MAXIMUM_PARAMETERS]LPVOID `fmt:"v,NumberParameters"`, } CONTEXT :: struct { - P1Home: DWORD64, - P2Home: DWORD64, - P3Home: DWORD64, - P4Home: DWORD64, - P5Home: DWORD64, - P6Home: DWORD64, + P1Home: DWORD64, + P2Home: DWORD64, + P3Home: DWORD64, + P4Home: DWORD64, + P5Home: DWORD64, + P6Home: DWORD64, ContextFlags: DWORD, - MxCsr: DWORD, - SegCs: WORD, - SegDs: WORD, - SegEs: WORD, - SegFs: WORD, - SegGs: WORD, - SegSs: WORD, - EFlags: DWORD, - Dr0: DWORD64, - Dr1: DWORD64, - Dr2: DWORD64, - Dr3: DWORD64, - Dr6: DWORD64, - Dr7: DWORD64, - Rax: DWORD64, - Rcx: DWORD64, - Rdx: DWORD64, - Rbx: DWORD64, - Rsp: DWORD64, - Rbp: DWORD64, - Rsi: DWORD64, - Rdi: DWORD64, - R8: DWORD64, - R9: DWORD64, - R10: DWORD64, - R11: DWORD64, - R12: DWORD64, - R13: DWORD64, - R14: DWORD64, - R15: DWORD64, - Rip: DWORD64, - _: struct #raw_union { + MxCsr: DWORD, + SegCs: WORD, + SegDs: WORD, + SegEs: WORD, + SegFs: WORD, + SegGs: WORD, + SegSs: WORD, + EFlags: DWORD, + Dr0: DWORD64, + Dr1: DWORD64, + Dr2: DWORD64, + Dr3: DWORD64, + Dr6: DWORD64, + Dr7: DWORD64, + Rax: DWORD64, + Rcx: DWORD64, + Rdx: DWORD64, + Rbx: DWORD64, + Rsp: DWORD64, + Rbp: DWORD64, + Rsi: DWORD64, + Rdi: DWORD64, + R8: DWORD64, + R9: DWORD64, + R10: DWORD64, + R11: DWORD64, + R12: DWORD64, + R13: DWORD64, + R14: DWORD64, + R15: DWORD64, + Rip: DWORD64, + using _: struct #raw_union { FltSave: XMM_SAVE_AREA32, - Q: [16]NEON128, - D: [32]ULONGLONG, - _: struct { + Q: [16]NEON128, + D: [32]ULONGLONG, + using _: struct { Header: [2]M128A, Legacy: [8]M128A, - Xmm0: M128A, - Xmm1: M128A, - Xmm2: M128A, - Xmm3: M128A, - Xmm4: M128A, - Xmm5: M128A, - Xmm6: M128A, - Xmm7: M128A, - Xmm8: M128A, - Xmm9: M128A, - Xmm10: M128A, - Xmm11: M128A, - Xmm12: M128A, - Xmm13: M128A, - Xmm14: M128A, - Xmm15: M128A, + Xmm0: M128A, + Xmm1: M128A, + Xmm2: M128A, + Xmm3: M128A, + Xmm4: M128A, + Xmm5: M128A, + Xmm6: M128A, + Xmm7: M128A, + Xmm8: M128A, + Xmm9: M128A, + Xmm10: M128A, + Xmm11: M128A, + Xmm12: M128A, + Xmm13: M128A, + Xmm14: M128A, + Xmm15: M128A, }, S: [32]DWORD, }, - VectorRegister: [26]M128A, - VectorControl: DWORD64, - DebugControl: DWORD64, - LastBranchToRip: DWORD64, - LastBranchFromRip: DWORD64, - LastExceptionToRip: DWORD64, + VectorRegister: [26]M128A, + VectorControl: DWORD64, + DebugControl: DWORD64, + LastBranchToRip: DWORD64, + LastBranchFromRip: DWORD64, + LastExceptionToRip: DWORD64, LastExceptionFromRip: DWORD64, } -PCONTEXT :: ^CONTEXT +PCONTEXT :: ^CONTEXT LPCONTEXT :: ^CONTEXT when size_of(uintptr) == 32 { XSAVE_FORMAT :: struct #align(16) { - ControlWord: WORD, - StatusWord: WORD, - TagWord: BYTE, - Reserved1: BYTE, - ErrorOpcode: WORD, - ErrorOffset: DWORD, - ErrorSelector: WORD, - Reserved2: WORD, - DataOffset: DWORD, - DataSelector: WORD, - Reserved3: WORD, - MxCsr: DWORD, - MxCsr_Mask: DWORD, + ControlWord: WORD, + StatusWord: WORD, + TagWord: BYTE, + Reserved1: BYTE, + ErrorOpcode: WORD, + ErrorOffset: DWORD, + ErrorSelector: WORD, + Reserved2: WORD, + DataOffset: DWORD, + DataSelector: WORD, + Reserved3: WORD, + MxCsr: DWORD, + MxCsr_Mask: DWORD, FloatRegisters: [8]M128A, // 32-bit specific - XmmRegisters: [8]M128A, - Reserved4: [192]BYTE, - StackControl: [7]DWORD, - Cr0NpxState: DWORD, + XmmRegisters: [8]M128A, + Reserved4: [192]BYTE, + StackControl: [7]DWORD, + Cr0NpxState: DWORD, } } else { XSAVE_FORMAT :: struct #align(16) { - ControlWord: WORD, - StatusWord: WORD, - TagWord: BYTE, - Reserved1: BYTE, - ErrorOpcode: WORD, - ErrorOffset: DWORD, - ErrorSelector: WORD, - Reserved2: WORD, - DataOffset: DWORD, - DataSelector: WORD, - Reserved3: WORD, - MxCsr: DWORD, - MxCsr_Mask: DWORD, + ControlWord: WORD, + StatusWord: WORD, + TagWord: BYTE, + Reserved1: BYTE, + ErrorOpcode: WORD, + ErrorOffset: DWORD, + ErrorSelector: WORD, + Reserved2: WORD, + DataOffset: DWORD, + DataSelector: WORD, + Reserved3: WORD, + MxCsr: DWORD, + MxCsr_Mask: DWORD, FloatRegisters: [8]M128A, // 64-bit specific - XmmRegisters: [16]M128A, - Reserved4: [96]BYTE, + XmmRegisters: [16]M128A, + Reserved4: [96]BYTE, } } XMM_SAVE_AREA32 :: XSAVE_FORMAT M128A :: struct { - Low: ULONGLONG, + Low: ULONGLONG, High: LONGLONG, } NEON128 :: struct { - Low: ULONGLONG, + Low: ULONGLONG, High: LONGLONG, } @@ -3386,17 +3395,17 @@ FILE_ATTRIBUTE_TAG_INFO :: struct { } // getaddrinfo flags https://learn.microsoft.com/en-us/windows/win32/api/ws2def/ns-ws2def-addrinfoa -AI_PASSIVE :: 0x01 -AI_CANONNAME :: 0x02 -AI_NUMERICHOST :: 0x04 -AI_ALL :: 0x0100 -AI_ADDRCONFIG :: 0x0400 -AI_V4MAPPED :: 0x0800 -AI_NON_AUTHORITATIVE :: 0x04000 -AI_SECURE :: 0x08000 +AI_PASSIVE :: 0x01 +AI_CANONNAME :: 0x02 +AI_NUMERICHOST :: 0x04 +AI_ALL :: 0x0100 +AI_ADDRCONFIG :: 0x0400 +AI_V4MAPPED :: 0x0800 +AI_NON_AUTHORITATIVE :: 0x04000 +AI_SECURE :: 0x08000 AI_RETURN_PREFERRED_NAMES :: 0x010000 -AI_FQDN :: 0x00020000 -AI_FILESERVER :: 0x00040000 +AI_FQDN :: 0x00020000 +AI_FILESERVER :: 0x00040000 PADDRINFOEXW :: ^ADDRINFOEXW LPADDRINFOEXW :: ^ADDRINFOEXW @@ -3415,9 +3424,9 @@ ADDRINFOEXW :: struct { } LPLOOKUPSERVICE_COMPLETION_ROUTINE :: #type proc "system" ( - dwErrorCode: DWORD, + dwErrorCode: DWORD, dwNumberOfBytesTransfered: DWORD, - lpOverlapped: LPOVERLAPPED, + lpOverlapped: LPOVERLAPPED, ) @@ -3427,18 +3436,18 @@ SYSTEM_INFO :: struct { dwOemID: DWORD, using _: struct #raw_union { wProcessorArchitecture: WORD, - wReserved: WORD, // reserved + wReserved: WORD, // reserved }, }, - dwPageSize: DWORD, + dwPageSize: DWORD, lpMinimumApplicationAddress: LPVOID, lpMaximumApplicationAddress: LPVOID, - dwActiveProcessorMask: DWORD_PTR, - dwNumberOfProcessors: DWORD, - dwProcessorType: DWORD, - dwAllocationGranularity: DWORD, - wProcessorLevel: WORD, - wProcessorRevision: WORD, + dwActiveProcessorMask: DWORD_PTR, + dwNumberOfProcessors: DWORD, + dwProcessorType: DWORD, + dwAllocationGranularity: DWORD, + wProcessorLevel: WORD, + wProcessorRevision: WORD, } // https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ns-wdm-_osversioninfoexw @@ -3475,12 +3484,12 @@ LoadLibraryEx_Flags :: distinct bit_set[LoadLibraryEx_Flag] // https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-quota_limits // Used in LogonUserExW PQUOTA_LIMITS :: struct { - PagedPoolLimit: SIZE_T, - NonPagedPoolLimit: SIZE_T, + PagedPoolLimit: SIZE_T, + NonPagedPoolLimit: SIZE_T, MinimumWorkingSetSize: SIZE_T, MaximumWorkingSetSize: SIZE_T, - PagefileLimit: SIZE_T, - TimeLimit: LARGE_INTEGER, + PagefileLimit: SIZE_T, + TimeLimit: LARGE_INTEGER, } Logon32_Type :: enum DWORD { @@ -3505,14 +3514,14 @@ Logon32_Provider :: enum DWORD { // Used in LoadUserProfileW PROFILEINFOW :: struct { - dwSize: DWORD, - dwFlags: DWORD, - lpUserName: LPWSTR, + dwSize: DWORD, + dwFlags: DWORD, + lpUserName: LPWSTR, lpProfilePath: LPWSTR, lpDefaultPath: LPWSTR, - lpServerName: LPWSTR, - lpPolicyPath: LPWSTR, - hProfile: HANDLE, + lpServerName: LPWSTR, + lpPolicyPath: LPWSTR, + hProfile: HANDLE, } SECURITY_MAX_SID_SIZE :: 68 @@ -3569,14 +3578,14 @@ USER_INFO_FLAG :: enum DWORD { USER_INFO_FLAGS :: distinct bit_set[USER_INFO_FLAG] USER_INFO_1 :: struct #packed { - name: LPWSTR, - password: LPWSTR, // Max password length is defined in LM20_PWLEN. + name: LPWSTR, + password: LPWSTR, // Max password length is defined in LM20_PWLEN. password_age: DWORD, - priv: USER_PRIV, - home_dir: LPWSTR, - comment: LPWSTR, - flags: USER_INFO_FLAGS, - script_path: LPWSTR, + priv: USER_PRIV, + home_dir: LPWSTR, + comment: LPWSTR, + flags: USER_INFO_FLAGS, + script_path: LPWSTR, } // #assert(size_of(USER_INFO_1) == 50) @@ -3585,320 +3594,320 @@ LOCALGROUP_MEMBERS_INFO_0 :: struct #packed { } NET_API_STATUS :: enum DWORD { - Success = 0, - ERROR_ACCESS_DENIED = 5, - MemberInAlias = 1378, - NetNotStarted = 2102, - UnknownServer = 2103, - ShareMem = 2104, - NoNetworkResource = 2105, - RemoteOnly = 2106, - DevNotRedirected = 2107, - ServerNotStarted = 2114, - ItemNotFound = 2115, - UnknownDevDir = 2116, - RedirectedPath = 2117, - DuplicateShare = 2118, - NoRoom = 2119, - TooManyItems = 2121, - InvalidMaxUsers = 2122, - BufTooSmall = 2123, - RemoteErr = 2127, - LanmanIniError = 2131, - NetworkError = 2136, - WkstaInconsistentState = 2137, - WkstaNotStarted = 2138, - BrowserNotStarted = 2139, - InternalError = 2140, - BadTransactConfig = 2141, - InvalidAPI = 2142, - BadEventName = 2143, - DupNameReboot = 2144, - CfgCompNotFound = 2146, - CfgParamNotFound = 2147, - LineTooLong = 2149, - QNotFound = 2150, - JobNotFound = 2151, - DestNotFound = 2152, - DestExists = 2153, - QExists = 2154, - QNoRoom = 2155, - JobNoRoom = 2156, - DestNoRoom = 2157, - DestIdle = 2158, - DestInvalidOp = 2159, - ProcNoRespond = 2160, - SpoolerNotLoaded = 2161, - DestInvalidState = 2162, - QInvalidState = 2163, - JobInvalidState = 2164, - SpoolNoMemory = 2165, - DriverNotFound = 2166, - DataTypeInvalid = 2167, - ProcNotFound = 2168, - ServiceTableLocked = 2180, - ServiceTableFull = 2181, - ServiceInstalled = 2182, - ServiceEntryLocked = 2183, - ServiceNotInstalled = 2184, - BadServiceName = 2185, - ServiceCtlTimeout = 2186, - ServiceCtlBusy = 2187, - BadServiceProgName = 2188, - ServiceNotCtrl = 2189, - ServiceKillProc = 2190, - ServiceCtlNotValid = 2191, - NotInDispatchTbl = 2192, - BadControlRecv = 2193, - ServiceNotStarting = 2194, - AlreadyLoggedOn = 2200, - NotLoggedOn = 2201, - BadUsername = 2202, - BadPassword = 2203, - UnableToAddName_W = 2204, - UnableToAddName_F = 2205, - UnableToDelName_W = 2206, - UnableToDelName_F = 2207, - LogonsPaused = 2209, - LogonServerConflict = 2210, - LogonNoUserPath = 2211, - LogonScriptError = 2212, - StandaloneLogon = 2214, - LogonServerNotFound = 2215, - LogonDomainExists = 2216, - NonValidatedLogon = 2217, - ACFNotFound = 2219, - GroupNotFound = 2220, - UserNotFound = 2221, - ResourceNotFound = 2222, - GroupExists = 2223, - UserExists = 2224, - ResourceExists = 2225, - NotPrimary = 2226, - ACFNotLoaded = 2227, - ACFNoRoom = 2228, - ACFFileIOFail = 2229, - ACFTooManyLists = 2230, - UserLogon = 2231, - ACFNoParent = 2232, - CanNotGrowSegment = 2233, - SpeGroupOp = 2234, - NotInCache = 2235, - UserInGroup = 2236, - UserNotInGroup = 2237, - AccountUndefined = 2238, - AccountExpired = 2239, - InvalidWorkstation = 2240, - InvalidLogonHours = 2241, - PasswordExpired = 2242, - PasswordCantChange = 2243, - PasswordHistConflict = 2244, - PasswordTooShort = 2245, - PasswordTooRecent = 2246, - InvalidDatabase = 2247, - DatabaseUpToDate = 2248, - SyncRequired = 2249, - UseNotFound = 2250, - BadAsgType = 2251, - DeviceIsShared = 2252, - SameAsComputerName = 2253, - NoComputerName = 2270, - MsgAlreadyStarted = 2271, - MsgInitFailed = 2272, - NameNotFound = 2273, - AlreadyForwarded = 2274, - AddForwarded = 2275, - AlreadyExists = 2276, - TooManyNames = 2277, - DelComputerName = 2278, - LocalForward = 2279, - GrpMsgProcessor = 2280, - PausedRemote = 2281, - BadReceive = 2282, - NameInUse = 2283, - MsgNotStarted = 2284, - NotLocalName = 2285, - NoForwardName = 2286, - RemoteFull = 2287, - NameNotForwarded = 2288, - TruncatedBroadcast = 2289, - InvalidDevice = 2294, - WriteFault = 2295, - DuplicateName = 2297, - DeleteLater = 2298, - IncompleteDel = 2299, - MultipleNets = 2300, - NetNameNotFound = 2310, - DeviceNotShared = 2311, - ClientNameNotFound = 2312, - FileIdNotFound = 2314, - ExecFailure = 2315, - TmpFile = 2316, - TooMuchData = 2317, - DeviceShareConflict = 2318, - BrowserTableIncomplete = 2319, - NotLocalDomain = 2320, - IsDfsShare = 2321, - DevInvalidOpCode = 2331, - DevNotFound = 2332, - DevNotOpen = 2333, - BadQueueDevString = 2334, - BadQueuePriority = 2335, - NoCommDevs = 2337, - QueueNotFound = 2338, - BadDevString = 2340, - BadDev = 2341, - InUseBySpooler = 2342, - CommDevInUse = 2343, - InvalidComputer = 2351, - MaxLenExceeded = 2354, - BadComponent = 2356, - CantType = 2357, - TooManyEntries = 2362, - ProfileFileTooBig = 2370, - ProfileOffset = 2371, - ProfileCleanup = 2372, - ProfileUnknownCmd = 2373, - ProfileLoadErr = 2374, - ProfileSaveErr = 2375, - LogOverflow = 2377, - LogFileChanged = 2378, - LogFileCorrupt = 2379, - SourceIsDir = 2380, - BadSource = 2381, - BadDest = 2382, - DifferentServers = 2383, - RunSrvPaused = 2385, - ErrCommRunSrv = 2389, - ErrorExecingGhost = 2391, - ShareNotFound = 2392, - InvalidLana = 2400, - OpenFiles = 2401, - ActiveConns = 2402, - BadPasswordCore = 2403, - DevInUse = 2404, - LocalDrive = 2405, - AlertExists = 2430, - TooManyAlerts = 2431, - NoSuchAlert = 2432, - BadRecipient = 2433, - AcctLimitExceeded = 2434, - InvalidLogSeek = 2440, - BadUasConfig = 2450, - InvalidUASOp = 2451, - LastAdmin = 2452, - DCNotFound = 2453, - LogonTrackingError = 2454, - NetlogonNotStarted = 2455, - CanNotGrowUASFile = 2456, - TimeDiffAtDC = 2457, - PasswordMismatch = 2458, - NoSuchServer = 2460, - NoSuchSession = 2461, - NoSuchConnection = 2462, - TooManyServers = 2463, - TooManySessions = 2464, - TooManyConnections = 2465, - TooManyFiles = 2466, - NoAlternateServers = 2467, - TryDownLevel = 2470, - UPSDriverNotStarted = 2480, - UPSInvalidConfig = 2481, - UPSInvalidCommPort = 2482, - UPSSignalAsserted = 2483, - UPSShutdownFailed = 2484, - BadDosRetCode = 2500, - ProgNeedsExtraMem = 2501, - BadDosFunction = 2502, - RemoteBootFailed = 2503, - BadFileCheckSum = 2504, - NoRplBootSystem = 2505, - RplLoadrNetBiosErr = 2506, - RplLoadrDiskErr = 2507, - ImageParamErr = 2508, - TooManyImageParams = 2509, - NonDosFloppyUsed = 2510, - RplBootRestart = 2511, - RplSrvrCallFailed = 2512, - CantConnectRplSrvr = 2513, - CantOpenImageFile = 2514, - CallingRplSrvr = 2515, - StartingRplBoot = 2516, - RplBootServiceTerm = 2517, - RplBootStartFailed = 2518, - RPL_CONNECTED = 2519, - BrowserConfiguredToNotRun = 2550, - RplNoAdaptersStarted = 2610, - RplBadRegistry = 2611, - RplBadDatabase = 2612, - RplRplfilesShare = 2613, - RplNotRplServer = 2614, - RplCannotEnum = 2615, - RplWkstaInfoCorrupted = 2616, - RplWkstaNotFound = 2617, - RplWkstaNameUnavailable = 2618, - RplProfileInfoCorrupted = 2619, - RplProfileNotFound = 2620, - RplProfileNameUnavailable = 2621, - RplProfileNotEmpty = 2622, - RplConfigInfoCorrupted = 2623, - RplConfigNotFound = 2624, - RplAdapterInfoCorrupted = 2625, - RplInternal = 2626, - RplVendorInfoCorrupted = 2627, - RplBootInfoCorrupted = 2628, - RplWkstaNeedsUserAcct = 2629, - RplNeedsRPLUSERAcct = 2630, - RplBootNotFound = 2631, - RplIncompatibleProfile = 2632, - RplAdapterNameUnavailable = 2633, - RplConfigNotEmpty = 2634, - RplBootInUse = 2635, - RplBackupDatabase = 2636, - RplAdapterNotFound = 2637, - RplVendorNotFound = 2638, - RplVendorNameUnavailable = 2639, - RplBootNameUnavailable = 2640, - RplConfigNameUnavailable = 2641, - DfsInternalCorruption = 2660, - DfsVolumeDataCorrupt = 2661, - DfsNoSuchVolume = 2662, - DfsVolumeAlreadyExists = 2663, - DfsAlreadyShared = 2664, - DfsNoSuchShare = 2665, - DfsNotALeafVolume = 2666, - DfsLeafVolume = 2667, - DfsVolumeHasMultipleServers = 2668, - DfsCantCreateJunctionPoint = 2669, - DfsServerNotDfsAware = 2670, - DfsBadRenamePath = 2671, - DfsVolumeIsOffline = 2672, - DfsNoSuchServer = 2673, - DfsCyclicalName = 2674, - DfsNotSupportedInServerDfs = 2675, - DfsDuplicateService = 2676, + Success = 0, + ERROR_ACCESS_DENIED = 5, + MemberInAlias = 1378, + NetNotStarted = 2102, + UnknownServer = 2103, + ShareMem = 2104, + NoNetworkResource = 2105, + RemoteOnly = 2106, + DevNotRedirected = 2107, + ServerNotStarted = 2114, + ItemNotFound = 2115, + UnknownDevDir = 2116, + RedirectedPath = 2117, + DuplicateShare = 2118, + NoRoom = 2119, + TooManyItems = 2121, + InvalidMaxUsers = 2122, + BufTooSmall = 2123, + RemoteErr = 2127, + LanmanIniError = 2131, + NetworkError = 2136, + WkstaInconsistentState = 2137, + WkstaNotStarted = 2138, + BrowserNotStarted = 2139, + InternalError = 2140, + BadTransactConfig = 2141, + InvalidAPI = 2142, + BadEventName = 2143, + DupNameReboot = 2144, + CfgCompNotFound = 2146, + CfgParamNotFound = 2147, + LineTooLong = 2149, + QNotFound = 2150, + JobNotFound = 2151, + DestNotFound = 2152, + DestExists = 2153, + QExists = 2154, + QNoRoom = 2155, + JobNoRoom = 2156, + DestNoRoom = 2157, + DestIdle = 2158, + DestInvalidOp = 2159, + ProcNoRespond = 2160, + SpoolerNotLoaded = 2161, + DestInvalidState = 2162, + QInvalidState = 2163, + JobInvalidState = 2164, + SpoolNoMemory = 2165, + DriverNotFound = 2166, + DataTypeInvalid = 2167, + ProcNotFound = 2168, + ServiceTableLocked = 2180, + ServiceTableFull = 2181, + ServiceInstalled = 2182, + ServiceEntryLocked = 2183, + ServiceNotInstalled = 2184, + BadServiceName = 2185, + ServiceCtlTimeout = 2186, + ServiceCtlBusy = 2187, + BadServiceProgName = 2188, + ServiceNotCtrl = 2189, + ServiceKillProc = 2190, + ServiceCtlNotValid = 2191, + NotInDispatchTbl = 2192, + BadControlRecv = 2193, + ServiceNotStarting = 2194, + AlreadyLoggedOn = 2200, + NotLoggedOn = 2201, + BadUsername = 2202, + BadPassword = 2203, + UnableToAddName_W = 2204, + UnableToAddName_F = 2205, + UnableToDelName_W = 2206, + UnableToDelName_F = 2207, + LogonsPaused = 2209, + LogonServerConflict = 2210, + LogonNoUserPath = 2211, + LogonScriptError = 2212, + StandaloneLogon = 2214, + LogonServerNotFound = 2215, + LogonDomainExists = 2216, + NonValidatedLogon = 2217, + ACFNotFound = 2219, + GroupNotFound = 2220, + UserNotFound = 2221, + ResourceNotFound = 2222, + GroupExists = 2223, + UserExists = 2224, + ResourceExists = 2225, + NotPrimary = 2226, + ACFNotLoaded = 2227, + ACFNoRoom = 2228, + ACFFileIOFail = 2229, + ACFTooManyLists = 2230, + UserLogon = 2231, + ACFNoParent = 2232, + CanNotGrowSegment = 2233, + SpeGroupOp = 2234, + NotInCache = 2235, + UserInGroup = 2236, + UserNotInGroup = 2237, + AccountUndefined = 2238, + AccountExpired = 2239, + InvalidWorkstation = 2240, + InvalidLogonHours = 2241, + PasswordExpired = 2242, + PasswordCantChange = 2243, + PasswordHistConflict = 2244, + PasswordTooShort = 2245, + PasswordTooRecent = 2246, + InvalidDatabase = 2247, + DatabaseUpToDate = 2248, + SyncRequired = 2249, + UseNotFound = 2250, + BadAsgType = 2251, + DeviceIsShared = 2252, + SameAsComputerName = 2253, + NoComputerName = 2270, + MsgAlreadyStarted = 2271, + MsgInitFailed = 2272, + NameNotFound = 2273, + AlreadyForwarded = 2274, + AddForwarded = 2275, + AlreadyExists = 2276, + TooManyNames = 2277, + DelComputerName = 2278, + LocalForward = 2279, + GrpMsgProcessor = 2280, + PausedRemote = 2281, + BadReceive = 2282, + NameInUse = 2283, + MsgNotStarted = 2284, + NotLocalName = 2285, + NoForwardName = 2286, + RemoteFull = 2287, + NameNotForwarded = 2288, + TruncatedBroadcast = 2289, + InvalidDevice = 2294, + WriteFault = 2295, + DuplicateName = 2297, + DeleteLater = 2298, + IncompleteDel = 2299, + MultipleNets = 2300, + NetNameNotFound = 2310, + DeviceNotShared = 2311, + ClientNameNotFound = 2312, + FileIdNotFound = 2314, + ExecFailure = 2315, + TmpFile = 2316, + TooMuchData = 2317, + DeviceShareConflict = 2318, + BrowserTableIncomplete = 2319, + NotLocalDomain = 2320, + IsDfsShare = 2321, + DevInvalidOpCode = 2331, + DevNotFound = 2332, + DevNotOpen = 2333, + BadQueueDevString = 2334, + BadQueuePriority = 2335, + NoCommDevs = 2337, + QueueNotFound = 2338, + BadDevString = 2340, + BadDev = 2341, + InUseBySpooler = 2342, + CommDevInUse = 2343, + InvalidComputer = 2351, + MaxLenExceeded = 2354, + BadComponent = 2356, + CantType = 2357, + TooManyEntries = 2362, + ProfileFileTooBig = 2370, + ProfileOffset = 2371, + ProfileCleanup = 2372, + ProfileUnknownCmd = 2373, + ProfileLoadErr = 2374, + ProfileSaveErr = 2375, + LogOverflow = 2377, + LogFileChanged = 2378, + LogFileCorrupt = 2379, + SourceIsDir = 2380, + BadSource = 2381, + BadDest = 2382, + DifferentServers = 2383, + RunSrvPaused = 2385, + ErrCommRunSrv = 2389, + ErrorExecingGhost = 2391, + ShareNotFound = 2392, + InvalidLana = 2400, + OpenFiles = 2401, + ActiveConns = 2402, + BadPasswordCore = 2403, + DevInUse = 2404, + LocalDrive = 2405, + AlertExists = 2430, + TooManyAlerts = 2431, + NoSuchAlert = 2432, + BadRecipient = 2433, + AcctLimitExceeded = 2434, + InvalidLogSeek = 2440, + BadUasConfig = 2450, + InvalidUASOp = 2451, + LastAdmin = 2452, + DCNotFound = 2453, + LogonTrackingError = 2454, + NetlogonNotStarted = 2455, + CanNotGrowUASFile = 2456, + TimeDiffAtDC = 2457, + PasswordMismatch = 2458, + NoSuchServer = 2460, + NoSuchSession = 2461, + NoSuchConnection = 2462, + TooManyServers = 2463, + TooManySessions = 2464, + TooManyConnections = 2465, + TooManyFiles = 2466, + NoAlternateServers = 2467, + TryDownLevel = 2470, + UPSDriverNotStarted = 2480, + UPSInvalidConfig = 2481, + UPSInvalidCommPort = 2482, + UPSSignalAsserted = 2483, + UPSShutdownFailed = 2484, + BadDosRetCode = 2500, + ProgNeedsExtraMem = 2501, + BadDosFunction = 2502, + RemoteBootFailed = 2503, + BadFileCheckSum = 2504, + NoRplBootSystem = 2505, + RplLoadrNetBiosErr = 2506, + RplLoadrDiskErr = 2507, + ImageParamErr = 2508, + TooManyImageParams = 2509, + NonDosFloppyUsed = 2510, + RplBootRestart = 2511, + RplSrvrCallFailed = 2512, + CantConnectRplSrvr = 2513, + CantOpenImageFile = 2514, + CallingRplSrvr = 2515, + StartingRplBoot = 2516, + RplBootServiceTerm = 2517, + RplBootStartFailed = 2518, + RPL_CONNECTED = 2519, + BrowserConfiguredToNotRun = 2550, + RplNoAdaptersStarted = 2610, + RplBadRegistry = 2611, + RplBadDatabase = 2612, + RplRplfilesShare = 2613, + RplNotRplServer = 2614, + RplCannotEnum = 2615, + RplWkstaInfoCorrupted = 2616, + RplWkstaNotFound = 2617, + RplWkstaNameUnavailable = 2618, + RplProfileInfoCorrupted = 2619, + RplProfileNotFound = 2620, + RplProfileNameUnavailable = 2621, + RplProfileNotEmpty = 2622, + RplConfigInfoCorrupted = 2623, + RplConfigNotFound = 2624, + RplAdapterInfoCorrupted = 2625, + RplInternal = 2626, + RplVendorInfoCorrupted = 2627, + RplBootInfoCorrupted = 2628, + RplWkstaNeedsUserAcct = 2629, + RplNeedsRPLUSERAcct = 2630, + RplBootNotFound = 2631, + RplIncompatibleProfile = 2632, + RplAdapterNameUnavailable = 2633, + RplConfigNotEmpty = 2634, + RplBootInUse = 2635, + RplBackupDatabase = 2636, + RplAdapterNotFound = 2637, + RplVendorNotFound = 2638, + RplVendorNameUnavailable = 2639, + RplBootNameUnavailable = 2640, + RplConfigNameUnavailable = 2641, + DfsInternalCorruption = 2660, + DfsVolumeDataCorrupt = 2661, + DfsNoSuchVolume = 2662, + DfsVolumeAlreadyExists = 2663, + DfsAlreadyShared = 2664, + DfsNoSuchShare = 2665, + DfsNotALeafVolume = 2666, + DfsLeafVolume = 2667, + DfsVolumeHasMultipleServers = 2668, + DfsCantCreateJunctionPoint = 2669, + DfsServerNotDfsAware = 2670, + DfsBadRenamePath = 2671, + DfsVolumeIsOffline = 2672, + DfsNoSuchServer = 2673, + DfsCyclicalName = 2674, + DfsNotSupportedInServerDfs = 2675, + DfsDuplicateService = 2676, DfsCantRemoveLastServerShare = 2677, - DfsVolumeIsInterDfs = 2678, - DfsInconsistent = 2679, - DfsServerUpgraded = 2680, - DfsDataIsIdentical = 2681, - DfsCantRemoveDfsRoot = 2682, - DfsChildOrParentInDfs = 2683, - DfsInternalError = 2690, - SetupAlreadyJoined = 2691, - SetupNotJoined = 2692, - SetupDomainController = 2693, - DefaultJoinRequired = 2694, - InvalidWorkgroupName = 2695, + DfsVolumeIsInterDfs = 2678, + DfsInconsistent = 2679, + DfsServerUpgraded = 2680, + DfsDataIsIdentical = 2681, + DfsCantRemoveDfsRoot = 2682, + DfsChildOrParentInDfs = 2683, + DfsInternalError = 2690, + SetupAlreadyJoined = 2691, + SetupNotJoined = 2692, + SetupDomainController = 2693, + DefaultJoinRequired = 2694, + InvalidWorkgroupName = 2695, NameUsesIncompatibleCodePage = 2696, - ComputerAccountNotFound = 2697, - PersonalSku = 2698, - SetupCheckDNSConfig = 2699, - PasswordMustChange = 2701, - AccountLockedOut = 2702, - PasswordTooLong = 2703, - PasswordNotComplexEnough = 2704, - PasswordFilterError = 2705, + ComputerAccountNotFound = 2697, + PersonalSku = 2698, + SetupCheckDNSConfig = 2699, + PasswordMustChange = 2701, + AccountLockedOut = 2702, + PasswordTooLong = 2703, + PasswordNotComplexEnough = 2704, + PasswordFilterError = 2705, } @@ -4053,12 +4062,12 @@ IMAGE_DEBUG_DIRECTORY :: struct { IMAGE_DEBUG_TYPE_CODEVIEW :: 2 -SICHINTF :: DWORD -SHCONTF :: DWORD -SFGAOF :: ULONG +SICHINTF :: DWORD +SHCONTF :: DWORD +SFGAOF :: ULONG FILEOPENDIALOGOPTIONS :: DWORD -REFPROPERTYKEY :: ^PROPERTYKEY -REFPROPVARIANT :: ^PROPVARIANT +REFPROPERTYKEY :: ^PROPERTYKEY +REFPROPVARIANT :: ^PROPVARIANT SIGDN :: enum c_int { NORMALDISPLAY = 0, @@ -4083,57 +4092,57 @@ SIATTRIBFLAGS :: enum c_int { FDAP :: enum c_int { BOTTOM = 0, - TOP = 1, + TOP = 1, } FDE_SHAREVIOLATION_RESPONSE :: enum c_int { DEFAULT = 0, - ACCEPT = 1, - REFUSE = 2, + ACCEPT = 1, + REFUSE = 2, } GETPROPERTYSTOREFLAGS :: enum c_int { - DEFAULT = 0, - HANDLERPROPERTIESONLY = 0x1, - READWRITE = 0x2, - TEMPORARY = 0x4, - FASTPROPERTIESONLY = 0x8, - OPENSLOWITEM = 0x10, - DELAYCREATION = 0x20, - BESTEFFORT = 0x40, - NO_OPLOCK = 0x80, - PREFERQUERYPROPERTIES = 0x100, - EXTRINSICPROPERTIES = 0x200, - EXTRINSICPROPERTIESONLY = 0x400, - VOLATILEPROPERTIES = 0x800, - VOLATILEPROPERTIESONLY = 0x1000, - MASK_VALID = 0x1fff, + DEFAULT = 0, + HANDLERPROPERTIESONLY = 0x1, + READWRITE = 0x2, + TEMPORARY = 0x4, + FASTPROPERTIESONLY = 0x8, + OPENSLOWITEM = 0x10, + DELAYCREATION = 0x20, + BESTEFFORT = 0x40, + NO_OPLOCK = 0x80, + PREFERQUERYPROPERTIES = 0x100, + EXTRINSICPROPERTIES = 0x200, + EXTRINSICPROPERTIESONLY = 0x400, + VOLATILEPROPERTIES = 0x800, + VOLATILEPROPERTIESONLY = 0x1000, + MASK_VALID = 0x1fff, } PROPERTYKEY :: struct { fmtid: GUID, - pid: DWORD, + pid: DWORD, } BIND_OPTS :: struct { - cbStruct: DWORD, - grfFlags: DWORD, - grfMode: DWORD, + cbStruct: DWORD, + grfFlags: DWORD, + grfMode: DWORD, dwTickCountDeadline: DWORD, } STATSTG :: struct { - pwcsName: LPOLESTR, - type: DWORD, - cbSize: ULARGE_INTEGER, - mtime: FILETIME, - ctime: FILETIME, - atime: FILETIME, - grfMode: DWORD, + pwcsName: LPOLESTR, + type: DWORD, + cbSize: ULARGE_INTEGER, + mtime: FILETIME, + ctime: FILETIME, + atime: FILETIME, + grfMode: DWORD, grfLocksSupported: DWORD, - clsid: CLSID, - grfStateBits: DWORD, - reserved: DWORD, + clsid: CLSID, + grfStateBits: DWORD, + reserved: DWORD, } COMDLG_FILTERSPEC :: struct { @@ -4142,15 +4151,15 @@ COMDLG_FILTERSPEC :: struct { DECIMAL :: struct { wReserved: USHORT, - _: struct #raw_union { - _: struct { + using _: struct #raw_union { + using _: struct { scale, sign: BYTE, }, signscale: USHORT, }, Hi32: ULONG, - _: struct #raw_union { - _: struct { + using _: struct #raw_union { + using _: struct { Lo32, Mid32: ULONG, }, Lo64: ULONGLONG, @@ -4223,14 +4232,14 @@ LWSTDAPI :: HRESULT CLSID_FileOpenDialog := &GUID{0xDC1C5A9C, 0xE88A, 0x4DDE, {0xA5, 0xA1, 0x60, 0xF8, 0x2A, 0x20, 0xAE, 0xF7}} CLSID_FileSaveDialog := &GUID{0xC0B4E2F3, 0xBA21, 0x4773, {0x8D, 0xBA, 0x33, 0x5E, 0xC9, 0x46, 0xEB, 0x8B}} -CLSID_TaskbarList := &GUID{0x56FDF344, 0xFD6D, 0x11d0, {0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90}} +CLSID_TaskbarList := &GUID{0x56FDF344, 0xFD6D, 0x11d0, {0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90}} -IID_IFileDialog := &GUID{0x42F85136, 0xDB7E, 0x439C, {0x85, 0xF1, 0xE4, 0x07, 0x5D, 0x13, 0x5F, 0xC8}} -IID_IFileSaveDialog := &GUID{0x84BCCD23, 0x5FDE, 0x4CDB, {0xAE, 0xA4, 0xAF, 0x64, 0xB8, 0x3D, 0x78, 0xAB}} -IID_IFileOpenDialog := &GUID{0xD57C7288, 0xD4AD, 0x4768, {0xBE, 0x02, 0x9D, 0x96, 0x95, 0x32, 0xD9, 0x60}} -IID_ITaskbarList := &GUID{0x56FDF342, 0xFD6D, 0x11d0, {0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90}} -IID_ITaskbarList2 := &GUID{0x602D4995, 0xB13A, 0x429b, {0xA6, 0x6E, 0x19, 0x35, 0xE4, 0x4F, 0x43, 0x17}} -IID_ITaskbarList3 := &GUID{0xea1afb91, 0x9e28, 0x4b86, {0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf}} +IID_IFileDialog := &GUID{0x42F85136, 0xDB7E, 0x439C, {0x85, 0xF1, 0xE4, 0x07, 0x5D, 0x13, 0x5F, 0xC8}} +IID_IFileSaveDialog := &GUID{0x84BCCD23, 0x5FDE, 0x4CDB, {0xAE, 0xA4, 0xAF, 0x64, 0xB8, 0x3D, 0x78, 0xAB}} +IID_IFileOpenDialog := &GUID{0xD57C7288, 0xD4AD, 0x4768, {0xBE, 0x02, 0x9D, 0x96, 0x95, 0x32, 0xD9, 0x60}} +IID_ITaskbarList := &GUID{0x56FDF342, 0xFD6D, 0x11d0, {0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90}} +IID_ITaskbarList2 := &GUID{0x602D4995, 0xB13A, 0x429b, {0xA6, 0x6E, 0x19, 0x35, 0xE4, 0x4F, 0x43, 0x17}} +IID_ITaskbarList3 := &GUID{0xea1afb91, 0x9e28, 0x4b86, {0x90, 0xe9, 0x9e, 0x9f, 0x8a, 0x5e, 0xef, 0xaf}} IModalWindow :: struct #raw_union { #subtype IUnknown: IUnknown, @@ -4726,24 +4735,24 @@ Windows_Product_Type :: enum DWORD { WEB_SERVER_CORE = 0x0000001D, // Web Server (core installation) } -ENABLE_ECHO_INPUT : DWORD : 0x0004 -ENABLE_INSERT_MODE : DWORD : 0x0020 -ENABLE_LINE_INPUT : DWORD : 0x0002 -ENABLE_MOUSE_INPUT : DWORD : 0x0010 -ENABLE_PROCESSED_INPUT : DWORD : 0x0001 -ENABLE_QUICK_EDIT_MODE : DWORD : 0x0040 -ENABLE_WINDOW_INPUT : DWORD : 0x0008 -ENABLE_VIRTUAL_TERMINAL_INPUT : DWORD : 0x0200 -ENABLE_PROCESSED_OUTPUT : DWORD : 0x0001 -ENABLE_WRAP_AT_EOL_OUTPUT : DWORD : 0x0002 +ENABLE_ECHO_INPUT : DWORD : 0x0004 +ENABLE_INSERT_MODE : DWORD : 0x0020 +ENABLE_LINE_INPUT : DWORD : 0x0002 +ENABLE_MOUSE_INPUT : DWORD : 0x0010 +ENABLE_PROCESSED_INPUT : DWORD : 0x0001 +ENABLE_QUICK_EDIT_MODE : DWORD : 0x0040 +ENABLE_WINDOW_INPUT : DWORD : 0x0008 +ENABLE_VIRTUAL_TERMINAL_INPUT : DWORD : 0x0200 +ENABLE_PROCESSED_OUTPUT : DWORD : 0x0001 +ENABLE_WRAP_AT_EOL_OUTPUT : DWORD : 0x0002 ENABLE_VIRTUAL_TERMINAL_PROCESSING : DWORD : 0x0004 -DISABLE_NEWLINE_AUTO_RETURN : DWORD : 0x0008 -ENABLE_LVB_GRID_WORLDWIDE : DWORD : 0x0010 +DISABLE_NEWLINE_AUTO_RETURN : DWORD : 0x0008 +ENABLE_LVB_GRID_WORLDWIDE : DWORD : 0x0010 -CTRL_C_EVENT : DWORD : 0 -CTRL_BREAK_EVENT : DWORD : 1 -CTRL_CLOSE_EVENT : DWORD : 2 -CTRL_LOGOFF_EVENT : DWORD : 5 +CTRL_C_EVENT : DWORD : 0 +CTRL_BREAK_EVENT : DWORD : 1 +CTRL_CLOSE_EVENT : DWORD : 2 +CTRL_LOGOFF_EVENT : DWORD : 5 CTRL_SHUTDOWN_EVENT : DWORD : 6 COORD :: struct { @@ -4752,45 +4761,45 @@ COORD :: struct { } SMALL_RECT :: struct { - Left: SHORT, - Top: SHORT, - Right: SHORT, + Left: SHORT, + Top: SHORT, + Right: SHORT, Bottom: SHORT, } CONSOLE_SCREEN_BUFFER_INFO :: struct { - dwSize: COORD, - dwCursorPosition: COORD, - wAttributes: WORD, - srWindow: SMALL_RECT, + dwSize: COORD, + dwCursorPosition: COORD, + wAttributes: WORD, + srWindow: SMALL_RECT, dwMaximumWindowSize: COORD, } CONSOLE_CURSOR_INFO :: struct { - dwSize: DWORD, + dwSize: DWORD, bVisible: BOOL, } PCONSOLE_SCREEN_BUFFER_INFO :: ^CONSOLE_SCREEN_BUFFER_INFO -PCONSOLE_CURSOR_INFO :: ^CONSOLE_CURSOR_INFO +PCONSOLE_CURSOR_INFO :: ^CONSOLE_CURSOR_INFO Event_Type :: enum WORD { - KEY_EVENT = 0x0001, - MOUSE_EVENT = 0x0002, + KEY_EVENT = 0x0001, + MOUSE_EVENT = 0x0002, WINDOW_BUFFER_SIZE_EVENT = 0x0004, - MENU_EVENT = 0x0008, - FOCUS_EVENT = 0x0010, + MENU_EVENT = 0x0008, + FOCUS_EVENT = 0x0010, } INPUT_RECORD :: struct { EventType: Event_Type, Event: struct #raw_union { - KeyEvent: KEY_EVENT_RECORD, - MouseEvent: MOUSE_EVENT_RECORD, - WindowBufferSizeEvent: WINDOW_BUFFER_SIZE_RECORD, - MenuEvent: MENU_EVENT_RECORD, - FocusEvent: FOCUS_EVENT_RECORD, + KeyEvent: KEY_EVENT_RECORD `raw_union_tag:"EventType=KEY_EVENT"`, + MouseEvent: MOUSE_EVENT_RECORD `raw_union_tag:"EventType=MOUSE_EVENT"`, + WindowBufferSizeEvent: WINDOW_BUFFER_SIZE_RECORD `raw_union_tag:"EventType=WINDOW_BUFFER_SIZE_EVENT"`, + MenuEvent: MENU_EVENT_RECORD `raw_union_tag:"EventType=MENU_EVENT"`, + FocusEvent: FOCUS_EVENT_RECORD `raw_union_tag:"EventType=FOCUS_EVENT"`, }, } @@ -4820,10 +4829,10 @@ KEY_EVENT_RECORD :: struct { } MOUSE_EVENT_RECORD :: struct { - dwMousePosition: COORD, - dwButtonState: DWORD, + dwMousePosition: COORD, + dwButtonState: DWORD, dwControlKeyState: DWORD, - dwEventFlags: DWORD, + dwEventFlags: DWORD, } WINDOW_BUFFER_SIZE_RECORD :: struct { @@ -4949,16 +4958,16 @@ SO_SNDBUF : c_int : 0x1001 SO_ERROR : c_int : 0x1007 SO_BROADCAST : c_int : 0x0020 -TCP_NODELAY: c_int : 0x0001 -IP_TTL: c_int : 4 -IPV6_V6ONLY: c_int : 27 -IP_MULTICAST_LOOP: c_int : 11 -IPV6_MULTICAST_LOOP: c_int : 11 -IP_MULTICAST_TTL: c_int : 10 -IP_ADD_MEMBERSHIP: c_int : 12 +TCP_NODELAY : c_int : 0x0001 +IP_TTL : c_int : 4 +IPV6_V6ONLY : c_int : 27 +IP_MULTICAST_LOOP : c_int : 11 +IPV6_MULTICAST_LOOP : c_int : 11 +IP_MULTICAST_TTL : c_int : 10 +IP_ADD_MEMBERSHIP : c_int : 12 -IPV6_ADD_MEMBERSHIP: c_int : 12 -IPV6_DROP_MEMBERSHIP: c_int : 13 +IPV6_ADD_MEMBERSHIP : c_int : 12 +IPV6_DROP_MEMBERSHIP : c_int : 13 MAX_PROTOCOL_CHAIN: DWORD : 7 @@ -4972,8 +4981,8 @@ MSG_OOB : c_int : 1 // `send`/`recv` should process out-of-band data. MSG_PEEK : c_int : 2 // `recv` should not remove the data from the buffer. Only valid for non-overlapped operations. -SOCKET :: distinct uintptr // TODO -socklen_t :: c_int +SOCKET :: distinct uintptr // TODO +socklen_t :: c_int ADDRESS_FAMILY :: USHORT ip_mreq :: struct { @@ -4999,7 +5008,7 @@ ADDRINFOA :: struct { ai_socktype: c_int, ai_protocol: c_int, ai_addrlen: size_t, - ai_canonname: ^c_char, + ai_canonname: [^]c_char `fmt:"q,ai_addrlen"`, ai_addr: ^SOCKADDR, ai_next: ^ADDRINFOA, } @@ -5032,18 +5041,18 @@ in6_addr :: struct { } -DNS_STATUS :: distinct DWORD // zero is success -DNS_INFO_NO_RECORDS :: 9501 +DNS_STATUS :: distinct DWORD // zero is success +DNS_INFO_NO_RECORDS :: 9501 DNS_QUERY_NO_RECURSION :: 0x00000004 DNS_RECORD :: struct { // aka DNS_RECORDA - pNext: ^DNS_RECORD, - pName: cstring, - wType: WORD, + pNext: ^DNS_RECORD, + pName: cstring, + wType: WORD, wDataLength: USHORT, - Flags: DWORD, - dwTtl: DWORD, - _: DWORD, + Flags: DWORD, + dwTtl: DWORD, + _: DWORD, Data: struct #raw_union #align(4) { CNAME: DNS_PTR_DATAA, A: u32be, // Ipv4 Address @@ -5064,8 +5073,8 @@ DNS_PTR_DATAA :: cstring DNS_MX_DATAA :: struct { pNameExchange: cstring, // the hostname - wPreference: WORD, // lower values preferred - _: WORD, // padding. + wPreference: WORD, // lower values preferred + _: WORD, // padding. } DNS_SRV_DATAA :: struct { pNameTarget: cstring, @@ -5110,8 +5119,8 @@ ENUMRESTYPEPROCW :: #type proc (hModule: HMODULE, lpType: LPCWSTR, lParam: LONG_ ENUMRESLANGPROCW :: #type proc (hModule: HMODULE, lpType: LPCWSTR, lpName: LPWSTR, wIDLanguage: LANGID, lParam: LONG_PTR)-> BOOL DTR_Control :: enum byte { - Disable = 0, - Enable = 1, + Disable = 0, + Enable = 1, Handshake = 2, } RTS_Control :: enum byte { @@ -5128,9 +5137,9 @@ Parity :: enum byte { Space = 4, } Stop_Bits :: enum byte { - One = 0, + One = 0, One_And_A_Half = 1, - Two = 2, + Two = 2, } DCB :: struct { @@ -5166,34 +5175,34 @@ DCB :: struct { } COMMTIMEOUTS :: struct { - ReadIntervalTimeout: DWORD, - ReadTotalTimeoutMultiplier: DWORD, - ReadTotalTimeoutConstant: DWORD, + ReadIntervalTimeout: DWORD, + ReadTotalTimeoutMultiplier: DWORD, + ReadTotalTimeoutConstant: DWORD, WriteTotalTimeoutMultiplier: DWORD, - WriteTotalTimeoutConstant: DWORD, + WriteTotalTimeoutConstant: DWORD, } -Com_Stat_Bits :: enum { - fCtsHold, - fDsrHold, - fRlsdHold, - fXoffHold, - fXoffSent, - fEof, - fTxim, -} COMSTAT :: struct { - bits: bit_set[Com_Stat_Bits; DWORD], - cbInQue: DWORD, + using _: bit_field DWORD { + fCtsHold: BOOL | 1, + fDsrHold: BOOL | 1, + fRlsdHol: BOOL | 1, + fXoffHol: BOOL | 1, + fXoffSen: BOOL | 1, + fEof: BOOL | 1, + fTxim: BOOL | 1, + fReserved: DWORD | 25, + }, + cbInQue: DWORD, cbOutQue: DWORD, } -Com_Error_Bits :: enum { +Com_Error_Bits :: enum DWORD { RXOVER, OVERRUN, RXPARITY, FRAME, BREAK, } -Com_Error :: bit_set[Com_Error_Bits; DWORD] +Com_Error :: distinct bit_set[Com_Error_Bits; DWORD] From 274e7e7e5848ec63d6c817151591b02281e2aa66 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 11:25:53 +0000 Subject: [PATCH 061/212] Improve the formatting of user32.odin --- core/sys/windows/user32.odin | 637 ++++++++++++++++++----------------- 1 file changed, 322 insertions(+), 315 deletions(-) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index 287ed59e7..cd3efdeb7 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -6,7 +6,7 @@ foreign import user32 "system:User32.lib" @(default_calling_convention="system") foreign user32 { - GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassName: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL --- + GetClassInfoW :: proc(hInstance: HINSTANCE, lpClassName: LPCWSTR, lpWndClass: ^WNDCLASSW) -> BOOL --- GetClassInfoExW :: proc(hInstance: HINSTANCE, lpszClass: LPCWSTR, lpwcx: ^WNDCLASSEXW) -> BOOL --- GetClassLongW :: proc(hWnd: HWND, nIndex: INT) -> DWORD --- @@ -19,67 +19,67 @@ foreign user32 { GetParent :: proc(hWnd: HWND) -> HWND --- SetWinEventHook :: proc( - eventMin, eventMax: DWORD, - hmodWinEventProc: HMODULE, - pfnWinEvenProc: WINEVENTPROC, + eventMin, eventMax: DWORD, + hmodWinEventProc: HMODULE, + pfnWinEvenProc: WINEVENTPROC, idProcess, idThread: DWORD, - dwFlags: WinEventFlags, + dwFlags: WinEventFlags, ) -> HWINEVENTHOOK --- IsChild :: proc(hWndParent, hWnd: HWND) -> BOOL --- - RegisterClassW :: proc(lpWndClass: ^WNDCLASSW) -> ATOM --- + RegisterClassW :: proc(lpWndClass: ^WNDCLASSW) -> ATOM --- RegisterClassExW :: proc(^WNDCLASSEXW) -> ATOM --- UnregisterClassW :: proc(lpClassName: LPCWSTR, hInstance: HINSTANCE) -> BOOL --- RegisterHotKey :: proc(hnwd: HWND, id: c_int, fsModifiers: UINT, vk: UINT) -> BOOL --- CreateWindowExW :: proc( - dwExStyle: DWORD, - lpClassName: LPCWSTR, - lpWindowName: LPCWSTR, - dwStyle: DWORD, + dwExStyle: DWORD, + lpClassName: LPCWSTR, + lpWindowName: LPCWSTR, + dwStyle: DWORD, X, Y, nWidth, nHeight: INT, - hWndParent: HWND, - hMenu: HMENU, - hInstance: HINSTANCE, - lpParam: LPVOID, + hWndParent: HWND, + hMenu: HMENU, + hInstance: HINSTANCE, + lpParam: LPVOID, ) -> HWND --- GetWindowThreadProcessId :: proc(hwnd: HWND, lpdwProcessId: LPDWORD) -> DWORD --- DestroyWindow :: proc(hWnd: HWND) -> BOOL --- - ShowWindow :: proc(hWnd: HWND, nCmdShow: INT) -> BOOL --- - IsWindow :: proc(hWnd: HWND) -> BOOL --- - IsWindowVisible :: proc(hwnd: HWND) -> BOOL --- - IsWindowEnabled :: proc(hwnd: HWND) -> BOOL --- - IsIconic :: proc(hwnd: HWND) -> BOOL --- - IsZoomed :: proc(hwnd: HWND) -> BOOL --- - BringWindowToTop :: proc(hWnd: HWND) -> BOOL --- - GetTopWindow :: proc(hWnd: HWND) -> HWND --- + ShowWindow :: proc(hWnd: HWND, nCmdShow: INT) -> BOOL --- + IsWindow :: proc(hWnd: HWND) -> BOOL --- + IsWindowVisible :: proc(hwnd: HWND) -> BOOL --- + IsWindowEnabled :: proc(hwnd: HWND) -> BOOL --- + IsIconic :: proc(hwnd: HWND) -> BOOL --- + IsZoomed :: proc(hwnd: HWND) -> BOOL --- + BringWindowToTop :: proc(hWnd: HWND) -> BOOL --- + GetTopWindow :: proc(hWnd: HWND) -> HWND --- SetForegroundWindow :: proc(hWnd: HWND) -> BOOL --- GetForegroundWindow :: proc() -> HWND --- - GetDesktopWindow :: proc() -> HWND --- - UpdateWindow :: proc(hWnd: HWND) -> BOOL --- - SetActiveWindow :: proc(hWnd: HWND) -> HWND --- - GetActiveWindow :: proc() -> HWND --- - SetFocus :: proc(hWnd: HWND) -> HWND --- - GetFocus :: proc() -> HWND --- - RedrawWindow :: proc(hwnd: HWND, lprcUpdate: LPRECT, hrgnUpdate: HRGN, flags: RedrawWindowFlags) -> BOOL --- - SetParent :: proc(hWndChild: HWND, hWndNewParent: HWND) -> HWND --- - SetPropW :: proc(hWnd: HWND, lpString: LPCWSTR, hData: HANDLE) -> BOOL --- - GetPropW :: proc(hWnd: HWND, lpString: LPCWSTR) -> HANDLE --- - RemovePropW :: proc(hWnd: HWND, lpString: LPCWSTR) -> HANDLE --- - EnumPropsW :: proc(hWnd: HWND, lpEnumFunc: PROPENUMPROCW) -> INT --- - EnumPropsExW :: proc(hWnd: HWND, lpEnumFunc: PROPENUMPROCW, lParam: LPARAM) -> INT --- - GetMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> INT --- + GetDesktopWindow :: proc() -> HWND --- + UpdateWindow :: proc(hWnd: HWND) -> BOOL --- + SetActiveWindow :: proc(hWnd: HWND) -> HWND --- + GetActiveWindow :: proc() -> HWND --- + SetFocus :: proc(hWnd: HWND) -> HWND --- + GetFocus :: proc() -> HWND --- + RedrawWindow :: proc(hwnd: HWND, lprcUpdate: LPRECT, hrgnUpdate: HRGN, flags: RedrawWindowFlags) -> BOOL --- + SetParent :: proc(hWndChild: HWND, hWndNewParent: HWND) -> HWND --- + SetPropW :: proc(hWnd: HWND, lpString: LPCWSTR, hData: HANDLE) -> BOOL --- + GetPropW :: proc(hWnd: HWND, lpString: LPCWSTR) -> HANDLE --- + RemovePropW :: proc(hWnd: HWND, lpString: LPCWSTR) -> HANDLE --- + EnumPropsW :: proc(hWnd: HWND, lpEnumFunc: PROPENUMPROCW) -> INT --- + EnumPropsExW :: proc(hWnd: HWND, lpEnumFunc: PROPENUMPROCW, lParam: LPARAM) -> INT --- + GetMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT) -> INT --- TranslateMessage :: proc(lpMsg: ^MSG) -> BOOL --- DispatchMessageW :: proc(lpMsg: ^MSG) -> LRESULT --- - WaitMessage :: proc() -> BOOL --- - MsgWaitForMultipleObjects :: proc(nCount: DWORD, pHandles: ^HANDLE, fWaitAll: BOOL, dwMilliseconds: DWORD, dwWakeMask: DWORD) -> DWORD --- + WaitMessage :: proc() -> BOOL --- + MsgWaitForMultipleObjects :: proc(nCount: DWORD, pHandles: [^]HANDLE, fWaitAll: BOOL, dwMilliseconds: DWORD, dwWakeMask: DWORD) -> DWORD --- PeekMessageA :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL --- PeekMessageW :: proc(lpMsg: ^MSG, hWnd: HWND, wMsgFilterMin: UINT, wMsgFilterMax: UINT, wRemoveMsg: UINT) -> BOOL --- @@ -99,97 +99,97 @@ foreign user32 { DefWindowProcA :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- DefWindowProcW :: proc(hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- - FindWindowA :: proc(lpClassName: LPCSTR, lpWindowName: LPCSTR) -> HWND --- - FindWindowW :: proc(lpClassName: LPCWSTR, lpWindowName: LPCWSTR) -> HWND --- + FindWindowA :: proc(lpClassName: LPCSTR, lpWindowName: LPCSTR) -> HWND --- + FindWindowW :: proc(lpClassName: LPCWSTR, lpWindowName: LPCWSTR) -> HWND --- FindWindowExA :: proc(hWndParent: HWND, hWndChildAfter: HWND, lpszClass: LPCSTR, lpszWindow: LPCSTR) -> HWND --- FindWindowExW :: proc(hWndParent: HWND, hWndChildAfter: HWND, lpszClass: LPCWSTR, lpszWindow: LPCWSTR) -> HWND --- - LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON --- - LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON --- + LoadIconA :: proc(hInstance: HINSTANCE, lpIconName: LPCSTR) -> HICON --- + LoadIconW :: proc(hInstance: HINSTANCE, lpIconName: LPCWSTR) -> HICON --- GetIconInfoExW :: proc(hIcon: HICON, piconinfo: PICONINFOEXW) -> BOOL --- - LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR --- - LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR --- - LoadImageW :: proc(hInst: HINSTANCE, name: LPCWSTR, type: UINT, cx, cy: INT, fuLoad: UINT) -> HANDLE --- + LoadCursorA :: proc(hInstance: HINSTANCE, lpCursorName: LPCSTR) -> HCURSOR --- + LoadCursorW :: proc(hInstance: HINSTANCE, lpCursorName: LPCWSTR) -> HCURSOR --- + LoadImageW :: proc(hInst: HINSTANCE, name: LPCWSTR, type: UINT, cx, cy: INT, fuLoad: UINT) -> HANDLE --- - CreateIcon :: proc(hInstance: HINSTANCE, nWidth, nHeight: INT, cPlanes: BYTE, cBitsPixel: BYTE, lpbANDbits: PBYTE, lpbXORbits: PBYTE) -> HICON --- + CreateIcon :: proc(hInstance: HINSTANCE, nWidth, nHeight: INT, cPlanes: BYTE, cBitsPixel: BYTE, lpbANDbits: PBYTE, lpbXORbits: PBYTE) -> HICON --- CreateIconFromResource :: proc(presbits: PBYTE, dwResSize: DWORD, fIcon: BOOL, dwVer: DWORD) -> HICON --- - DestroyIcon :: proc(hIcon: HICON) -> BOOL --- - DrawIcon :: proc(hDC: HDC, X, Y: INT, hIcon: HICON) -> BOOL --- + DestroyIcon :: proc(hIcon: HICON) -> BOOL --- + DrawIcon :: proc(hDC: HDC, X, Y: INT, hIcon: HICON) -> BOOL --- - CreateCursor :: proc(hInst: HINSTANCE, xHotSpot, yHotSpot, nWidth, nHeight: INT, pvANDPlane: PVOID, pvXORPlane: PVOID) -> HCURSOR --- + CreateCursor :: proc(hInst: HINSTANCE, xHotSpot, yHotSpot, nWidth, nHeight: INT, pvANDPlane: PVOID, pvXORPlane: PVOID) -> HCURSOR --- DestroyCursor :: proc(hCursor: HCURSOR) -> BOOL --- - GetWindowRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL --- - GetClientRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL --- - ClientToScreen :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL --- - ScreenToClient :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL --- - SetWindowPos :: proc(hWnd: HWND, hWndInsertAfter: HWND, X, Y, cx, cy: INT, uFlags: UINT) -> BOOL --- - MoveWindow :: proc(hWnd: HWND, X, Y, hWidth, hHeight: INT, bRepaint: BOOL) -> BOOL --- - GetSystemMetrics :: proc(nIndex: INT) -> INT --- - AdjustWindowRect :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL) -> BOOL --- - AdjustWindowRectEx :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD) -> BOOL --- + GetWindowRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL --- + GetClientRect :: proc(hWnd: HWND, lpRect: LPRECT) -> BOOL --- + ClientToScreen :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL --- + ScreenToClient :: proc(hWnd: HWND, lpPoint: LPPOINT) -> BOOL --- + SetWindowPos :: proc(hWnd: HWND, hWndInsertAfter: HWND, X, Y, cx, cy: INT, uFlags: UINT) -> BOOL --- + MoveWindow :: proc(hWnd: HWND, X, Y, hWidth, hHeight: INT, bRepaint: BOOL) -> BOOL --- + GetSystemMetrics :: proc(nIndex: INT) -> INT --- + AdjustWindowRect :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL) -> BOOL --- + AdjustWindowRectEx :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD) -> BOOL --- AdjustWindowRectExForDpi :: proc(lpRect: LPRECT, dwStyle: DWORD, bMenu: BOOL, dwExStyle: DWORD, dpi: UINT) -> BOOL --- SystemParametersInfoW :: proc(uiAction, uiParam: UINT, pvParam: PVOID, fWinIni: UINT) -> BOOL --- - GetMonitorInfoW :: proc(hMonitor: HMONITOR, lpmi: LPMONITORINFO) -> BOOL --- + GetMonitorInfoW :: proc(hMonitor: HMONITOR, lpmi: LPMONITORINFO) -> BOOL --- GetWindowDC :: proc(hWnd: HWND) -> HDC --- - GetDC :: proc(hWnd: HWND) -> HDC --- - GetDCEx :: proc(hWnd: HWND, hrgnClip: HRGN, flags: DWORD) -> HDC --- - ReleaseDC :: proc(hWnd: HWND, hDC: HDC) -> INT --- + GetDC :: proc(hWnd: HWND) -> HDC --- + GetDCEx :: proc(hWnd: HWND, hrgnClip: HRGN, flags: DWORD) -> HDC --- + ReleaseDC :: proc(hWnd: HWND, hDC: HDC) -> INT --- GetDlgCtrlID :: proc(hWnd: HWND) -> INT --- - GetDlgItem :: proc(hDlg: HWND, nIDDlgItem: INT) -> HWND --- + GetDlgItem :: proc(hDlg: HWND, nIDDlgItem: INT) -> HWND --- - CreateMenu :: proc() -> HMENU --- - CreatePopupMenu :: proc() -> HMENU --- - DeleteMenu :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT) -> BOOL --- - DestroyMenu :: proc(hMenu: HMENU) -> BOOL --- - InsertMenuW :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL --- - AppendMenuW :: proc(hMenu: HMENU, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL --- - GetMenu :: proc(hWnd: HWND) -> HMENU --- - SetMenu :: proc(hWnd: HWND, hMenu: HMENU) -> BOOL --- - TrackPopupMenu :: proc(hMenu: HMENU, uFlags: UINT, x, y: INT, nReserved: INT, hWnd: HWND, prcRect: ^RECT) -> INT --- + CreateMenu :: proc() -> HMENU --- + CreatePopupMenu :: proc() -> HMENU --- + DeleteMenu :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT) -> BOOL --- + DestroyMenu :: proc(hMenu: HMENU) -> BOOL --- + InsertMenuW :: proc(hMenu: HMENU, uPosition: UINT, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL --- + AppendMenuW :: proc(hMenu: HMENU, uFlags: UINT, uIDNewItem: UINT_PTR, lpNewItem: LPCWSTR) -> BOOL --- + GetMenu :: proc(hWnd: HWND) -> HMENU --- + SetMenu :: proc(hWnd: HWND, hMenu: HMENU) -> BOOL --- + TrackPopupMenu :: proc(hMenu: HMENU, uFlags: UINT, x, y: INT, nReserved: INT, hWnd: HWND, prcRect: ^RECT) -> INT --- RegisterWindowMessageW :: proc(lpString: LPCWSTR) -> UINT --- CreateAcceleratorTableW :: proc(paccel: LPACCEL, cAccel: INT) -> HACCEL --- DestroyAcceleratorTable :: proc(hAccel: HACCEL) -> BOOL --- - LoadAcceleratorsW :: proc(hInstance: HINSTANCE, lpTableName: LPCWSTR) -> HACCEL --- - TranslateAcceleratorW :: proc(hWnd: HWND, hAccTable: HACCEL, lpMsg: LPMSG) -> INT --- - CopyAcceleratorTableW :: proc(hAccelSrc: HACCEL, lpAccelDst: LPACCEL, cAccelEntries: INT) -> INT --- + LoadAcceleratorsW :: proc(hInstance: HINSTANCE, lpTableName: LPCWSTR) -> HACCEL --- + TranslateAcceleratorW :: proc(hWnd: HWND, hAccTable: HACCEL, lpMsg: LPMSG) -> INT --- + CopyAcceleratorTableW :: proc(hAccelSrc: HACCEL, lpAccelDst: LPACCEL, cAccelEntries: INT) -> INT --- - InsertMenuItemW :: proc(hmenu: HMENU, item: UINT, fByPosition: BOOL, lpmi: LPMENUITEMINFOW) -> BOOL --- - GetMenuItemInfoW :: proc(hmenu: HMENU, item: UINT, fByPosition: BOOL, lpmii: LPMENUITEMINFOW) -> BOOL --- - SetMenuItemInfoW :: proc(hmenu: HMENU, item: UINT, fByPositon: BOOL, lpmii: LPMENUITEMINFOW) -> BOOL --- + InsertMenuItemW :: proc(hmenu: HMENU, item: UINT, fByPosition: BOOL, lpmi: LPMENUITEMINFOW) -> BOOL --- + GetMenuItemInfoW :: proc(hmenu: HMENU, item: UINT, fByPosition: BOOL, lpmii: LPMENUITEMINFOW) -> BOOL --- + SetMenuItemInfoW :: proc(hmenu: HMENU, item: UINT, fByPositon: BOOL, lpmii: LPMENUITEMINFOW) -> BOOL --- GetMenuDefaultItem :: proc(hMenu: HMENU, fByPos: UINT, gmdiFlags: UINT) -> UINT --- SetMenuDefaultItem :: proc(hMenu: HMENU, uItem: UINT, fByPos: UINT) -> BOOL --- - GetMenuItemRect :: proc(hWnd: HWND, hMenu: HMENU, uItem: UINT, lprcItem: LPRECT) -> c_int --- + GetMenuItemRect :: proc(hWnd: HWND, hMenu: HMENU, uItem: UINT, lprcItem: LPRECT) -> c_int --- - GetUpdateRect :: proc(hWnd: HWND, lpRect: LPRECT, bErase: BOOL) -> BOOL --- - ValidateRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL --- + GetUpdateRect :: proc(hWnd: HWND, lpRect: LPRECT, bErase: BOOL) -> BOOL --- + ValidateRect :: proc(hWnd: HWND, lpRect: ^RECT) -> BOOL --- InvalidateRect :: proc(hWnd: HWND, lpRect: ^RECT, bErase: BOOL) -> BOOL --- BeginPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> HDC --- - EndPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> BOOL --- + EndPaint :: proc(hWnd: HWND, lpPaint: ^PAINTSTRUCT) -> BOOL --- - GetCapture :: proc() -> HWND --- - SetCapture :: proc(hWnd: HWND) -> HWND --- - ReleaseCapture :: proc() -> BOOL --- + GetCapture :: proc() -> HWND --- + SetCapture :: proc(hWnd: HWND) -> HWND --- + ReleaseCapture :: proc() -> BOOL --- TrackMouseEvent :: proc(lpEventTrack: LPTRACKMOUSEEVENT) -> BOOL --- - GetKeyState :: proc(nVirtKey: INT) -> SHORT --- + GetKeyState :: proc(nVirtKey: INT) -> SHORT --- GetAsyncKeyState :: proc(vKey: INT) -> SHORT --- GetKeyboardState :: proc(lpKeyState: PBYTE) -> BOOL --- MapVirtualKeyW :: proc(uCode: UINT, uMapType: UINT) -> UINT --- - ToUnicode :: proc(nVirtKey: UINT, wScanCode: UINT, lpKeyState: ^BYTE, pwszBuff: LPWSTR, cchBuff: INT, wFlags: UINT) -> INT --- + ToUnicode :: proc(nVirtKey: UINT, wScanCode: UINT, lpKeyState: ^BYTE, pwszBuff: LPWSTR, cchBuff: INT, wFlags: UINT) -> INT --- - SetWindowsHookExW :: proc(idHook: INT, lpfn: HOOKPROC, hmod: HINSTANCE, dwThreadId: DWORD) -> HHOOK --- + SetWindowsHookExW :: proc(idHook: INT, lpfn: HOOKPROC, hmod: HINSTANCE, dwThreadId: DWORD) -> HHOOK --- UnhookWindowsHookEx :: proc(hhk: HHOOK) -> BOOL --- - CallNextHookEx :: proc(hhk: HHOOK, nCode: INT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- + CallNextHookEx :: proc(hhk: HHOOK, nCode: INT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- - SetTimer :: proc(hWnd: HWND, nIDEvent: UINT_PTR, uElapse: UINT, lpTimerFunc: TIMERPROC) -> UINT_PTR --- + SetTimer :: proc(hWnd: HWND, nIDEvent: UINT_PTR, uElapse: UINT, lpTimerFunc: TIMERPROC) -> UINT_PTR --- KillTimer :: proc(hWnd: HWND, uIDEvent: UINT_PTR) -> BOOL --- // MessageBoxA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT) -> INT --- @@ -197,149 +197,149 @@ foreign user32 { // MessageBoxExA :: proc(hWnd: HWND, lpText: LPCSTR, lpCaption: LPCSTR, uType: UINT, wLanguageId: WORD) -> INT --- MessageBoxExW :: proc(hWnd: HWND, lpText: LPCWSTR, lpCaption: LPCWSTR, uType: UINT, wLanguageId: WORD) -> INT --- - ClipCursor :: proc(lpRect: LPRECT) -> BOOL --- + ClipCursor :: proc(lpRect: LPRECT) -> BOOL --- GetCursorPos :: proc(lpPoint: LPPOINT) -> BOOL --- SetCursorPos :: proc(X, Y: INT) -> BOOL --- - SetCursor :: proc(hCursor: HCURSOR) -> HCURSOR --- + SetCursor :: proc(hCursor: HCURSOR) -> HCURSOR --- when !intrinsics.is_package_imported("raylib") { ShowCursor :: proc(bShow: BOOL) -> INT --- } - EnumDisplayDevicesW :: proc (lpDevice: LPCWSTR, iDevNum: DWORD, lpDisplayDevice: PDISPLAY_DEVICEW, dwFlags: DWORD) -> BOOL --- + EnumDisplayDevicesW :: proc(lpDevice: LPCWSTR, iDevNum: DWORD, lpDisplayDevice: PDISPLAY_DEVICEW, dwFlags: DWORD) -> BOOL --- EnumDisplaySettingsW :: proc(lpszDeviceName: LPCWSTR, iModeNum: DWORD, lpDevMode: ^DEVMODEW) -> BOOL --- - MonitorFromPoint :: proc(pt: POINT, dwFlags: Monitor_From_Flags) -> HMONITOR --- - MonitorFromRect :: proc(lprc: LPRECT, dwFlags: Monitor_From_Flags) -> HMONITOR --- - MonitorFromWindow :: proc(hwnd: HWND, dwFlags: Monitor_From_Flags) -> HMONITOR --- + MonitorFromPoint :: proc(pt: POINT, dwFlags: Monitor_From_Flags) -> HMONITOR --- + MonitorFromRect :: proc(lprc: LPRECT, dwFlags: Monitor_From_Flags) -> HMONITOR --- + MonitorFromWindow :: proc(hwnd: HWND, dwFlags: Monitor_From_Flags) -> HMONITOR --- EnumDisplayMonitors :: proc(hdc: HDC, lprcClip: LPRECT, lpfnEnum: Monitor_Enum_Proc, dwData: LPARAM) -> BOOL --- - EnumWindows :: proc(lpEnumFunc: Window_Enum_Proc, lParam: LPARAM) -> BOOL --- + EnumWindows :: proc(lpEnumFunc: Window_Enum_Proc, lParam: LPARAM) -> BOOL --- EnumChildWindows :: proc(hWndParent: HWND, lpEnumFunc: Window_Enum_Proc, lParam: LPARAM) -> BOOL --- - IsProcessDPIAware :: proc() -> BOOL --- + IsProcessDPIAware :: proc() -> BOOL --- SetProcessDPIAware :: proc() -> BOOL --- - SetThreadDpiAwarenessContext :: proc(dpiContext: DPI_AWARENESS_CONTEXT) -> DPI_AWARENESS_CONTEXT --- - GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT --- - GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT --- + SetThreadDpiAwarenessContext :: proc(dpiContext: DPI_AWARENESS_CONTEXT) -> DPI_AWARENESS_CONTEXT --- + GetThreadDpiAwarenessContext :: proc() -> DPI_AWARENESS_CONTEXT --- + GetWindowDpiAwarenessContext :: proc(hwnd: HWND) -> DPI_AWARENESS_CONTEXT --- GetDpiFromDpiAwarenessContext :: proc(value: DPI_AWARENESS_CONTEXT) -> UINT --- - GetDpiForWindow :: proc(hwnd: HWND) -> UINT --- + GetDpiForWindow :: proc(hwnd: HWND) -> UINT --- SetProcessDpiAwarenessContext :: proc(value: DPI_AWARENESS_CONTEXT) -> BOOL --- BroadcastSystemMessageW :: proc( - flags: DWORD, + flags: DWORD, lpInfo: LPDWORD, - Msg: UINT, + Msg: UINT, wParam: WPARAM, lParam: LPARAM, ) -> c_long --- BroadcastSystemMessageExW :: proc( - flags: DWORD, - lpInfo: LPDWORD, - Msg: UINT, - wParam: WPARAM, - lParam: LPARAM, + flags: DWORD, + lpInfo: LPDWORD, + Msg: UINT, + wParam: WPARAM, + lParam: LPARAM, pbsmInfo: PBSMINFO, ) -> c_long --- SendMessageTimeoutW :: proc( - hWnd: HWND, - Msg: UINT, - wParam: WPARAM, - lParam: LPARAM, - fuFlags: UINT, - uTimeout: UINT, + hWnd: HWND, + Msg: UINT, + wParam: WPARAM, + lParam: LPARAM, + fuFlags: UINT, + uTimeout: UINT, lpdwResult: PDWORD_PTR, ) -> LRESULT --- - GetSysColor :: proc(nIndex: INT) -> DWORD --- + GetSysColor :: proc(nIndex: INT) -> DWORD --- GetSysColorBrush :: proc(nIndex: INT) -> HBRUSH --- - SetSysColors :: proc(cElements: INT, lpaElements: ^INT, lpaRgbValues: ^COLORREF) -> BOOL --- - MessageBeep :: proc(uType: UINT) -> BOOL --- + SetSysColors :: proc(cElements: INT, lpaElements: [^]INT, lpaRgbValues: ^COLORREF) -> BOOL --- + MessageBeep :: proc(uType: UINT) -> BOOL --- - IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL --- + IsDialogMessageW :: proc(hDlg: HWND, lpMsg: LPMSG) -> BOOL --- GetWindowTextLengthW :: proc(hWnd: HWND) -> INT --- - GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: INT) -> INT --- - SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL --- - CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- - EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL --- + GetWindowTextW :: proc(hWnd: HWND, lpString: LPWSTR, nMaxCount: INT) -> INT --- + SetWindowTextW :: proc(hWnd: HWND, lpString: LPCWSTR) -> BOOL --- + CallWindowProcW :: proc(lpPrevWndFunc: WNDPROC, hWnd: HWND, Msg: UINT, wParam: WPARAM, lParam: LPARAM) -> LRESULT --- + EnableWindow :: proc(hWnd: HWND, bEnable: BOOL) -> BOOL --- - DefRawInputProc :: proc(paRawInput: ^PRAWINPUT, nInput: INT, cbSizeHeader: UINT) -> LRESULT --- - GetRawInputBuffer :: proc(pRawInput: PRAWINPUT, pcbSize: PUINT, cbSizeHeader: UINT) -> UINT --- - GetRawInputData :: proc(hRawInput: HRAWINPUT, uiCommand: UINT, pData: LPVOID, pcbSize: PUINT, cbSizeHeader: UINT) -> UINT --- - GetRawInputDeviceInfoW :: proc(hDevice: HANDLE, uiCommand: UINT, pData: LPVOID, pcbSize: PUINT) -> UINT --- - GetRawInputDeviceList :: proc(pRawInputDeviceList: PRAWINPUTDEVICELIST, puiNumDevices: PUINT, cbSize: UINT) -> UINT --- + DefRawInputProc :: proc(paRawInput: ^PRAWINPUT, nInput: INT, cbSizeHeader: UINT) -> LRESULT --- + GetRawInputBuffer :: proc(pRawInput: PRAWINPUT, pcbSize: PUINT, cbSizeHeader: UINT) -> UINT --- + GetRawInputData :: proc(hRawInput: HRAWINPUT, uiCommand: UINT, pData: LPVOID, pcbSize: PUINT, cbSizeHeader: UINT) -> UINT --- + GetRawInputDeviceInfoW :: proc(hDevice: HANDLE, uiCommand: UINT, pData: LPVOID, pcbSize: PUINT) -> UINT --- + GetRawInputDeviceList :: proc(pRawInputDeviceList: PRAWINPUTDEVICELIST, puiNumDevices: PUINT, cbSize: UINT) -> UINT --- GetRegisteredRawInputDevices :: proc(pRawInputDevices: PRAWINPUTDEVICE, puiNumDevices: PUINT, cbSize: UINT) -> UINT --- - RegisterRawInputDevices :: proc(pRawInputDevices: PCRAWINPUTDEVICE, uiNumDevices: UINT, cbSize: UINT) -> BOOL --- + RegisterRawInputDevices :: proc(pRawInputDevices: PCRAWINPUTDEVICE, uiNumDevices: UINT, cbSize: UINT) -> BOOL --- SendInput :: proc(cInputs: UINT, pInputs: [^]INPUT, cbSize: INT) -> UINT --- SetLayeredWindowAttributes :: proc(hWnd: HWND, crKey: COLORREF, bAlpha: BYTE, dwFlags: DWORD) -> BOOL --- - FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- - FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- - EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL --- - OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- - InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- + FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- + FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- + EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL --- + OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- + InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- IntersectRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL --- - SubtractRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL --- - UnionRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL --- - IsRectEmpty :: proc(lprc: ^RECT) -> BOOL --- - SetRectEmpty :: proc(lprc: ^RECT) -> BOOL --- - CopyRect :: proc(lprcDst, lprcSrc: ^RECT) -> BOOL --- + SubtractRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL --- + UnionRect :: proc(lprcDst, lprcSrc1, lprcSrc2: ^RECT) -> BOOL --- + IsRectEmpty :: proc(lprc: ^RECT) -> BOOL --- + SetRectEmpty :: proc(lprc: ^RECT) -> BOOL --- + CopyRect :: proc(lprcDst, lprcSrc: ^RECT) -> BOOL --- - GetWindowInfo :: proc(hwnd: HWND, pwi: PWINDOWINFO) -> BOOL --- - GetWindowPlacement :: proc(hWnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- - SetWindowPlacement :: proc(hwnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- - SetWindowRgn :: proc(hWnd: HWND, hRgn: HRGN, bRedraw: BOOL) -> c_int --- - CreateRectRgnIndirect :: proc(lprect: ^RECT) -> HRGN --- + GetWindowInfo :: proc(hwnd: HWND, pwi: PWINDOWINFO) -> BOOL --- + GetWindowPlacement :: proc(hWnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- + SetWindowPlacement :: proc(hwnd: HWND, lpwndpl: ^WINDOWPLACEMENT) -> BOOL --- + SetWindowRgn :: proc(hWnd: HWND, hRgn: HRGN, bRedraw: BOOL) -> c_int --- + CreateRectRgnIndirect :: proc(lprect: ^RECT) -> HRGN --- GetSystemMetricsForDpi :: proc(nIndex: c_int, dpi: UINT) -> c_int --- GetCursorInfo :: proc(pci: PCURSORINFO) -> BOOL --- - GetSystemMenu :: proc(hWnd: HWND, bRevert: BOOL) -> HMENU --- - EnableMenuItem :: proc(hMenu: HMENU, uIDEnableItem: UINT, uEnable: UINT) -> BOOL --- + GetSystemMenu :: proc(hWnd: HWND, bRevert: BOOL) -> HMENU --- + EnableMenuItem :: proc(hMenu: HMENU, uIDEnableItem: UINT, uEnable: UINT) -> BOOL --- MenuItemFromPoint :: proc(hWnd: HWND, hMenu: HMENU, ptScreen: POINT) -> INT --- - DrawTextW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat) -> INT --- + DrawTextW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat) -> INT --- DrawTextExW :: proc(hdc: HDC, lpchText: LPCWSTR, cchText: INT, lprc: LPRECT, format: DrawTextFormat, lpdtp: PDRAWTEXTPARAMS) -> INT --- - GetLocaleInfoEx :: proc(lpLocaleName: LPCWSTR, LCType: LCTYPE, lpLCData: LPWSTR, cchData: INT) -> INT --- + GetLocaleInfoEx :: proc(lpLocaleName: LPCWSTR, LCType: LCTYPE, lpLCData: LPWSTR, cchData: INT) -> INT --- IsValidLocaleName :: proc(lpLocaleName: LPCWSTR) -> BOOL --- ResolveLocaleName :: proc(lpNameToResolve: LPCWSTR, lpLocaleName: LPWSTR, cchLocaleName: INT) -> INT --- - IsValidCodePage :: proc(CodePage: UINT) -> BOOL --- - GetACP :: proc() -> CODEPAGE --- - GetCPInfoExW :: proc(CodePage: CODEPAGE, dwFlags: DWORD, lpCPInfoEx: LPCPINFOEXW) -> BOOL --- + IsValidCodePage :: proc(CodePage: UINT) -> BOOL --- + GetACP :: proc() -> CODEPAGE --- + GetCPInfoExW :: proc(CodePage: CODEPAGE, dwFlags: DWORD, lpCPInfoEx: LPCPINFOEXW) -> BOOL --- - GetProcessWindowStation :: proc() -> HWINSTA --- + GetProcessWindowStation :: proc() -> HWINSTA --- GetUserObjectInformationW :: proc(hObj: HANDLE, nIndex: GetUserObjectInformationFlags, pvInfo: PVOID, nLength: DWORD, lpnLengthNeeded: LPDWORD) -> BOOL --- - OpenClipboard :: proc(hWndNewOwner: HWND) -> BOOL --- - CloseClipboard :: proc() -> BOOL --- - GetClipboardData :: proc(uFormat: UINT) -> HANDLE --- - SetClipboardData :: proc(uFormat: UINT, hMem: HANDLE) -> HANDLE --- + OpenClipboard :: proc(hWndNewOwner: HWND) -> BOOL --- + CloseClipboard :: proc() -> BOOL --- + GetClipboardData :: proc(uFormat: UINT) -> HANDLE --- + SetClipboardData :: proc(uFormat: UINT, hMem: HANDLE) -> HANDLE --- IsClipboardFormatAvailable :: proc(format: UINT) -> BOOL --- - EmptyClipboard :: proc() -> BOOL --- + EmptyClipboard :: proc() -> BOOL --- - SetScrollInfo :: proc(hwnd: HWND, nBar: c_int, lpsi: ^SCROLLINFO, redraw: BOOL) -> c_int --- - GetScrollInfo :: proc(hwnd: HWND, nBar: c_int, lpsi: ^SCROLLINFO) -> BOOL --- - ShowScrollBar :: proc(hwnd: HWND, nBar: c_int, bShow: BOOL) -> BOOL --- + SetScrollInfo :: proc(hwnd: HWND, nBar: c_int, lpsi: ^SCROLLINFO, redraw: BOOL) -> c_int --- + GetScrollInfo :: proc(hwnd: HWND, nBar: c_int, lpsi: ^SCROLLINFO) -> BOOL --- + ShowScrollBar :: proc(hwnd: HWND, nBar: c_int, bShow: BOOL) -> BOOL --- EnableScrollBar :: proc(hwnd: HWND, wSBflags: UINT, wArrows: UINT) -> BOOL --- } CreateWindowW :: #force_inline proc "system" ( - lpClassName: LPCTSTR, + lpClassName: LPCTSTR, lpWindowName: LPCTSTR, - dwStyle: DWORD, - X: INT, - Y: INT, - nWidth: INT, - nHeight: INT, - hWndParent: HWND, - hMenu: HMENU, - hInstance: HINSTANCE, - lpParam: LPVOID, + dwStyle: DWORD, + X: INT, + Y: INT, + nWidth: INT, + nHeight: INT, + hWndParent: HWND, + hMenu: HMENU, + hInstance: HINSTANCE, + lpParam: LPVOID, ) -> HWND { return CreateWindowExW( 0, @@ -374,31 +374,38 @@ when ODIN_ARCH == .amd64 { SetWindowLongPtrW :: SetWindowLongW } +@(require_results) GET_SC_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> INT { return INT(wParam) & 0xFFF0 } +@(require_results) GET_WHEEL_DELTA_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short { return cast(c_short)HIWORD(cast(DWORD)wParam) } +@(require_results) GET_KEYSTATE_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD { return LOWORD(cast(DWORD)wParam) } +@(require_results) GET_NCHITTEST_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> c_short { return cast(c_short)LOWORD(cast(DWORD)wParam) } +@(require_results) GET_XBUTTON_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> WORD { return HIWORD(cast(DWORD)wParam) } // Retrieves the input code from wParam in WM_INPUT message. +@(require_results) GET_RAWINPUT_CODE_WPARAM :: #force_inline proc "contextless" (wParam: WPARAM) -> RAWINPUT_CODE { return RAWINPUT_CODE(wParam & 0xFF) } +@(require_results) MAKEINTRESOURCEW :: #force_inline proc "contextless" (#any_int i: int) -> LPWSTR { return cast(LPWSTR)uintptr(WORD(i)) } @@ -410,7 +417,7 @@ Monitor_From_Flags :: enum DWORD { } Monitor_Enum_Proc :: #type proc "system" (HMONITOR, HDC, LPRECT, LPARAM) -> BOOL -Window_Enum_Proc :: #type proc "system" (HWND, LPARAM) -> BOOL +Window_Enum_Proc :: #type proc "system" (HWND, LPARAM) -> BOOL USER_DEFAULT_SCREEN_DPI :: 96 DPI_AWARENESS_CONTEXT :: distinct HANDLE @@ -420,7 +427,7 @@ DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE :: DPI_AWARENESS_CONTEXT(~uintptr(2)) DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2 :: DPI_AWARENESS_CONTEXT(~uintptr(3)) // -4 DPI_AWARENESS_CONTEXT_UNAWARE_GDISCALED :: DPI_AWARENESS_CONTEXT(~uintptr(4)) // -5 -RAWINPUT_CODE :: enum { +RAWINPUT_CODE :: enum DWORD { // The input is in the regular message flow, // the app is required to call DefWindowProc // so that the system can perform clean ups. @@ -431,16 +438,16 @@ RAWINPUT_CODE :: enum { } RAWINPUTHEADER :: struct { - dwType: DWORD, - dwSize: DWORD, + dwType: DWORD, + dwSize: DWORD, hDevice: HANDLE, - wParam: WPARAM, + wParam: WPARAM, } RAWHID :: struct { dwSizeHid: DWORD, - dwCount: DWORD, - bRawData: [1]BYTE, + dwCount: DWORD, + bRawData: [1]BYTE, } RAWMOUSE :: struct { @@ -452,27 +459,27 @@ RAWMOUSE :: struct { usButtonData: USHORT, }, }, - ulRawButtons: ULONG, - lLastX: LONG, - lLastY: LONG, + ulRawButtons: ULONG, + lLastX: LONG, + lLastY: LONG, ulExtraInformation: ULONG, } RAWKEYBOARD :: struct { - MakeCode: USHORT, - Flags: USHORT, - Rserved: USHORT, - VKey: USHORT, - Message: UINT, + MakeCode: USHORT, + Flags: USHORT, + Rserved: USHORT, + VKey: USHORT, + Message: UINT, ExtraInformation: ULONG, } RAWINPUT :: struct { header: RAWINPUTHEADER, data: struct #raw_union { - mouse: RAWMOUSE, + mouse: RAWMOUSE, keyboard: RAWKEYBOARD, - hid: RAWHID, + hid: RAWHID, }, } @@ -481,42 +488,42 @@ HRAWINPUT :: distinct LPARAM RAWINPUTDEVICE :: struct { usUsagePage: USHORT, - usUsage: USHORT, - dwFlags: DWORD, - hwndTarget: HWND, + usUsage: USHORT, + dwFlags: DWORD, + hwndTarget: HWND, } -PRAWINPUTDEVICE :: ^RAWINPUTDEVICE +PRAWINPUTDEVICE :: ^RAWINPUTDEVICE PCRAWINPUTDEVICE :: PRAWINPUTDEVICE RAWINPUTDEVICELIST :: struct { hDevice: HANDLE, - dwType: DWORD, + dwType: DWORD, } PRAWINPUTDEVICELIST :: ^RAWINPUTDEVICELIST RID_DEVICE_INFO_HID :: struct { - dwVendorId: DWORD, - dwProductId: DWORD, + dwVendorId: DWORD, + dwProductId: DWORD, dwVersionNumber: DWORD, - usUsagePage: USHORT, - usUsage: USHORT, + usUsagePage: USHORT, + usUsage: USHORT, } RID_DEVICE_INFO_KEYBOARD :: struct { - dwType: DWORD, - dwSubType: DWORD, - dwKeyboardMode: DWORD, + dwType: DWORD, + dwSubType: DWORD, + dwKeyboardMode: DWORD, dwNumberOfFunctionKeys: DWORD, - dwNumberOfIndicators: DWORD, - dwNumberOfKeysTotal: DWORD, + dwNumberOfIndicators: DWORD, + dwNumberOfKeysTotal: DWORD, } RID_DEVICE_INFO_MOUSE :: struct { - dwId: DWORD, - dwNumberOfButtons: DWORD, - dwSampleRate: DWORD, + dwId: DWORD, + dwNumberOfButtons: DWORD, + dwSampleRate: DWORD, fHasHorizontalWheel: BOOL, } @@ -524,103 +531,103 @@ RID_DEVICE_INFO :: struct { cbSize: DWORD, dwType: DWORD, using DUMMYUNIONNAME: struct #raw_union { - mouse: RID_DEVICE_INFO_MOUSE, - keyboard: RID_DEVICE_INFO_KEYBOARD, - hid: RID_DEVICE_INFO_HID, + mouse: RID_DEVICE_INFO_MOUSE `raw_union_tag:"dwType=0"`, + keyboard: RID_DEVICE_INFO_KEYBOARD `raw_union_tag:"dwType=1"`, + hid: RID_DEVICE_INFO_HID `raw_union_tag:"dwType=2"`, }, } -RIDEV_REMOVE :: 0x00000001 -RIDEV_EXCLUDE :: 0x00000010 -RIDEV_PAGEONLY :: 0x00000020 -RIDEV_NOLEGACY :: 0x00000030 -RIDEV_INPUTSINK :: 0x00000100 +RIDEV_REMOVE :: 0x00000001 +RIDEV_EXCLUDE :: 0x00000010 +RIDEV_PAGEONLY :: 0x00000020 +RIDEV_NOLEGACY :: 0x00000030 +RIDEV_INPUTSINK :: 0x00000100 RIDEV_CAPTUREMOUSE :: 0x00000200 -RIDEV_NOHOTKEYS :: 0x00000200 -RIDEV_APPKEYS :: 0x00000400 -RIDEV_EXINPUTSINK :: 0x00001000 -RIDEV_DEVNOTIFY :: 0x00002000 +RIDEV_NOHOTKEYS :: 0x00000200 +RIDEV_APPKEYS :: 0x00000400 +RIDEV_EXINPUTSINK :: 0x00001000 +RIDEV_DEVNOTIFY :: 0x00002000 RID_HEADER :: 0x10000005 -RID_INPUT :: 0x10000003 +RID_INPUT :: 0x10000003 RIDI_PREPARSEDDATA :: 0x20000005 -RIDI_DEVICENAME :: 0x20000007 -RIDI_DEVICEINFO :: 0x2000000b +RIDI_DEVICENAME :: 0x20000007 +RIDI_DEVICEINFO :: 0x2000000b -RIM_TYPEMOUSE :: 0 +RIM_TYPEMOUSE :: 0 RIM_TYPEKEYBOARD :: 1 -RIM_TYPEHID :: 2 +RIM_TYPEHID :: 2 -RI_KEY_MAKE :: 0 -RI_KEY_BREAK :: 1 -RI_KEY_E0 :: 2 -RI_KEY_E1 :: 4 +RI_KEY_MAKE :: 0 +RI_KEY_BREAK :: 1 +RI_KEY_E0 :: 2 +RI_KEY_E1 :: 4 RI_KEY_TERMSRV_SET_LED :: 8 -RI_KEY_TERMSRV_SHADOW :: 0x10 +RI_KEY_TERMSRV_SHADOW :: 0x10 -MOUSE_MOVE_RELATIVE :: 0x00 -MOUSE_MOVE_ABSOLUTE :: 0x01 -MOUSE_VIRTUAL_DESKTOP :: 0x02 +MOUSE_MOVE_RELATIVE :: 0x00 +MOUSE_MOVE_ABSOLUTE :: 0x01 +MOUSE_VIRTUAL_DESKTOP :: 0x02 MOUSE_ATTRIBUTES_CHANGED :: 0x04 -MOUSE_MOVE_NOCOALESCE :: 0x08 +MOUSE_MOVE_NOCOALESCE :: 0x08 -RI_MOUSE_BUTTON_1_DOWN :: 0x0001 -RI_MOUSE_LEFT_BUTTON_DOWN :: RI_MOUSE_BUTTON_1_DOWN -RI_MOUSE_BUTTON_1_UP :: 0x0002 -RI_MOUSE_LEFT_BUTTON_UP :: RI_MOUSE_BUTTON_1_UP -RI_MOUSE_BUTTON_2_DOWN :: 0x0004 -RI_MOUSE_RIGHT_BUTTON_DOWN :: RI_MOUSE_BUTTON_2_DOWN -RI_MOUSE_BUTTON_2_UP :: 0x0008 -RI_MOUSE_RIGHT_BUTTON_UP :: RI_MOUSE_BUTTON_2_UP -RI_MOUSE_BUTTON_3_DOWN :: 0x0010 +RI_MOUSE_BUTTON_1_DOWN :: 0x0001 +RI_MOUSE_LEFT_BUTTON_DOWN :: RI_MOUSE_BUTTON_1_DOWN +RI_MOUSE_BUTTON_1_UP :: 0x0002 +RI_MOUSE_LEFT_BUTTON_UP :: RI_MOUSE_BUTTON_1_UP +RI_MOUSE_BUTTON_2_DOWN :: 0x0004 +RI_MOUSE_RIGHT_BUTTON_DOWN :: RI_MOUSE_BUTTON_2_DOWN +RI_MOUSE_BUTTON_2_UP :: 0x0008 +RI_MOUSE_RIGHT_BUTTON_UP :: RI_MOUSE_BUTTON_2_UP +RI_MOUSE_BUTTON_3_DOWN :: 0x0010 RI_MOUSE_MIDDLE_BUTTON_DOWN :: RI_MOUSE_BUTTON_3_DOWN -RI_MOUSE_BUTTON_3_UP :: 0x0020 -RI_MOUSE_MIDDLE_BUTTON_UP :: RI_MOUSE_BUTTON_3_UP -RI_MOUSE_BUTTON_4_DOWN :: 0x0040 -RI_MOUSE_BUTTON_4_UP :: 0x0080 -RI_MOUSE_BUTTON_5_DOWN :: 0x0100 -RI_MOUSE_BUTTON_5_UP :: 0x0200 -RI_MOUSE_WHEEL :: 0x0400 -RI_MOUSE_HWHEEL :: 0x0800 +RI_MOUSE_BUTTON_3_UP :: 0x0020 +RI_MOUSE_MIDDLE_BUTTON_UP :: RI_MOUSE_BUTTON_3_UP +RI_MOUSE_BUTTON_4_DOWN :: 0x0040 +RI_MOUSE_BUTTON_4_UP :: 0x0080 +RI_MOUSE_BUTTON_5_DOWN :: 0x0100 +RI_MOUSE_BUTTON_5_UP :: 0x0200 +RI_MOUSE_WHEEL :: 0x0400 +RI_MOUSE_HWHEEL :: 0x0800 WINDOWPLACEMENT :: struct { - length: UINT, - flags: UINT, - showCmd: UINT, - ptMinPosition: POINT, - ptMaxPosition: POINT, + length: UINT, + flags: UINT, + showCmd: UINT, + ptMinPosition: POINT, + ptMaxPosition: POINT, rcNormalPosition: RECT, } WINDOWINFO :: struct { - cbSize: DWORD, - rcWindow: RECT, - rcClient: RECT, - dwStyle: DWORD, - dwExStyle: DWORD, - dwWindowStatus: DWORD, + cbSize: DWORD, + rcWindow: RECT, + rcClient: RECT, + dwStyle: DWORD, + dwExStyle: DWORD, + dwWindowStatus: DWORD, cxWindowBorders: UINT, cyWindowBorders: UINT, - atomWindowType: ATOM, + atomWindowType: ATOM, wCreatorVersion: WORD, } PWINDOWINFO :: ^WINDOWINFO CURSORINFO :: struct { - cbSize: DWORD, - flags: DWORD, - hCursor: HCURSOR, + cbSize: DWORD, + flags: DWORD, + hCursor: HCURSOR, ptScreenPos: POINT, } PCURSORINFO :: ^CURSORINFO DRAWTEXTPARAMS :: struct { - cbSize: UINT, - iTabLength: INT, - iLeftMargin: INT, - iRightMargin: INT, + cbSize: UINT, + iTabLength: INT, + iLeftMargin: INT, + iRightMargin: INT, uiLengthDrawn: UINT, } PDRAWTEXTPARAMS :: ^DRAWTEXTPARAMS @@ -678,12 +685,12 @@ GetUserObjectInformationFlags :: enum INT { } USEROBJECTFLAGS :: struct { - fInherit: BOOL, + fInherit: BOOL, fReserved: BOOL, - dwFlags: DWORD, + dwFlags: DWORD, } -PROPENUMPROCW :: #type proc(unnamedParam1: HWND, unnamedParam2: LPCWSTR, unnamedParam3: HANDLE) -> BOOL +PROPENUMPROCW :: #type proc(unnamedParam1: HWND, unnamedParam2: LPCWSTR, unnamedParam3: HANDLE) -> BOOL PROPENUMPROCEXW :: #type proc(unnamedParam1: HWND, unnamedParam2: LPCWSTR, unnamedParam3: HANDLE, unnamedParam4: ULONG_PTR) -> BOOL RT_CURSOR :: LPWSTR(uintptr(0x00000001)) @@ -718,8 +725,8 @@ MAXIMUM_RESERVED_MANIFEST_RESOURCE_ID :: LPWSTR(uintptr(0x00000010) ACCEL :: struct { /* Also called the flags field */ fVirt: BYTE, - key: WORD, - cmd: WORD, + key: WORD, + cmd: WORD, } LPACCEL :: ^ACCEL @@ -735,32 +742,32 @@ MIIM_BITMAP :: 0x00000080 MIIM_FTYPE :: 0x00000100 MENUITEMINFOW :: struct { - cbSize: UINT, - fMask: UINT, - fType: UINT, // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0) - fState: UINT, // used if MIIM_STATE - wID: UINT, // used if MIIM_ID - hSubMenu: HMENU, // used if MIIM_SUBMENU - hbmpChecked: HBITMAP, // used if MIIM_CHECKMARKS + cbSize: UINT, + fMask: UINT, + fType: UINT, // used if MIIM_TYPE (4.0) or MIIM_FTYPE (>4.0) + fState: UINT, // used if MIIM_STATE + wID: UINT, // used if MIIM_ID + hSubMenu: HMENU, // used if MIIM_SUBMENU + hbmpChecked: HBITMAP, // used if MIIM_CHECKMARKS hbmpUnchecked: HBITMAP, // used if MIIM_CHECKMARKS - dwItemData: ULONG_PTR, // used if MIIM_DATA - dwTypeData: LPWSTR, // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0) - cch: UINT, // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0) - hbmpItem: HBITMAP, // used if MIIM_BITMAP + dwItemData: ULONG_PTR, // used if MIIM_DATA + dwTypeData: LPWSTR, // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0) + cch: UINT, // used if MIIM_TYPE (4.0) or MIIM_STRING (>4.0) + hbmpItem: HBITMAP, // used if MIIM_BITMAP } LPMENUITEMINFOW :: ^MENUITEMINFOW DISPLAY_DEVICEW :: struct { - cb: DWORD, - DeviceName: [32]WCHAR, + cb: DWORD, + DeviceName: [32]WCHAR, DeviceString: [128]WCHAR, - StateFlags: DWORD, - DeviceID: [128]WCHAR, - DeviceKey: [128]WCHAR, + StateFlags: DWORD, + DeviceID: [128]WCHAR, + DeviceKey: [128]WCHAR, } PDISPLAY_DEVICEW :: ^DISPLAY_DEVICEW // OUTOFCONTEXT is the zero value, use {} -WinEventFlags :: bit_set[WinEventFlag; DWORD] +WinEventFlags :: distinct bit_set[WinEventFlag; DWORD] WinEventFlag :: enum DWORD { SKIPOWNTHREAD = 0, @@ -797,7 +804,7 @@ CF_PRIVATEFIRST :: 0x0200 CF_PRIVATELAST :: 0x02FF STICKYKEYS :: struct { - cbSize: UINT, + cbSize: UINT, dwFlags: DWORD, } LPSTICKYKEYS :: ^STICKYKEYS @@ -827,7 +834,7 @@ SKF_LALTLATCHED :: 0x10000000 SKF_RALTLATCHED :: 0x20000000 TOGGLEKEYS :: struct { - cbSize: UINT, + cbSize: UINT, dwFlags: DWORD, } LPTOGGLEKEYS :: ^TOGGLEKEYS @@ -840,10 +847,10 @@ TKF_HOTKEYSOUND :: 0x10 TKF_INDICATOR :: 0x20 FILTERKEYS :: struct { - cbSize: UINT, - dwFlags: DWORD, - iWaitMSec: DWORD, - iDelayMSec: DWORD, + cbSize: UINT, + dwFlags: DWORD, + iWaitMSec: DWORD, + iDelayMSec: DWORD, iRepeatMSec: DWORD, iBounceMSec: DWORD, } @@ -858,21 +865,21 @@ FKF_INDICATOR :: 0x20 FKF_CLICKON :: 0x40 NONCLIENTMETRICSW :: struct { - cbSize: UINT, - iBorderWidth: c_int, - iScrollWidth: c_int, - iScrollHeight: c_int, - iCaptionWidth: c_int, - iCaptionHeight: c_int, - lfCaptionFont: LOGFONTW, - iSmCaptionWidth: c_int, - iSmCaptionHeight: c_int, - lfSmCaptionFont: LOGFONTW, - iMenuWidth: c_int, - iMenuHeight: c_int, - lfMenuFont: LOGFONTW, - lfStatusFont: LOGFONTW, - lfMessageFont: LOGFONTW, + cbSize: UINT, + iBorderWidth: c_int, + iScrollWidth: c_int, + iScrollHeight: c_int, + iCaptionWidth: c_int, + iCaptionHeight: c_int, + lfCaptionFont: LOGFONTW, + iSmCaptionWidth: c_int, + iSmCaptionHeight: c_int, + lfSmCaptionFont: LOGFONTW, + iMenuWidth: c_int, + iMenuHeight: c_int, + lfMenuFont: LOGFONTW, + lfStatusFont: LOGFONTW, + lfMessageFont: LOGFONTW, iPaddedBorderWidth: c_int, } LPNONCLIENTMETRICSW :: ^NONCLIENTMETRICSW @@ -881,12 +888,12 @@ LWA_COLORKEY :: 0x1 LWA_ALPHA :: 0x2 SCROLLINFO :: struct { - cbSize: UINT, - fMask: UINT, - nMin: c_int, - nMax: c_int, - nPage: UINT, - nPos: c_int, + cbSize: UINT, + fMask: UINT, + nMin: c_int, + nMax: c_int, + nPage: UINT, + nPos: c_int, nTrackPos: c_int, } LPSCROLLINFO :: ^SCROLLINFO From e154489f013c66627975a6ba0d8d4c67b8ea33f9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 11:32:39 +0000 Subject: [PATCH 062/212] More formatting improvements --- core/sys/windows/userenv.odin | 21 ++--- core/sys/windows/util.odin | 34 ++++++-- core/sys/windows/ux_theme.odin | 2 +- core/sys/windows/wgl.odin | 2 +- core/sys/windows/winmm.odin | 53 +++++++------ core/sys/windows/winnls.odin | 14 ++-- core/sys/windows/winver.odin | 10 +-- core/sys/windows/wow64_apiset.odin | 96 +++++++++++------------ core/sys/windows/ws2_32.odin | 122 ++++++++++++++--------------- core/sys/windows/xinput.odin | 14 ++-- 10 files changed, 198 insertions(+), 170 deletions(-) diff --git a/core/sys/windows/userenv.odin b/core/sys/windows/userenv.odin index 2a2209d2c..1ed731407 100644 --- a/core/sys/windows/userenv.odin +++ b/core/sys/windows/userenv.odin @@ -5,19 +5,22 @@ foreign import userenv "system:Userenv.lib" @(default_calling_convention="system") foreign userenv { - GetUserProfileDirectoryW :: proc(hToken: HANDLE, - lpProfileDir: LPWSTR, - lpcchSize: ^DWORD) -> BOOL --- + GetUserProfileDirectoryW :: proc( + hToken: HANDLE, + lpProfileDir: LPWSTR, + lpcchSize: ^DWORD, + ) -> BOOL --- + LoadUserProfileW :: proc( - hToken: HANDLE, + hToken: HANDLE, lpProfileInfo: ^PROFILEINFOW, ) -> BOOL --- // https://docs.microsoft.com/en-us/windows/win32/api/userenv/nf-userenv-createprofile // The caller must have administrator privileges to call this function. CreateProfile :: proc( - pszUserSid: LPCWSTR, - pszUserName: LPCWSTR, + pszUserSid: LPCWSTR, + pszUserName: LPCWSTR, pszProfilePath: wstring, cchProfilePath: DWORD, ) -> u32 --- @@ -25,15 +28,15 @@ foreign userenv { // https://docs.microsoft.com/en-us/windows/win32/api/userenv/nf-userenv-deleteprofilew // The caller must have administrative privileges to delete a user's profile. DeleteProfileW :: proc( - lpSidString: LPCWSTR, - lpProfilePath: LPCWSTR, + lpSidString: LPCWSTR, + lpProfilePath: LPCWSTR, lpComputerName: LPCWSTR, ) -> BOOL --- // https://docs.microsoft.com/en-us/windows/win32/api/sddl/nf-sddl-convertsidtostringsida // To turn a SID into a string SID to use with CreateProfile & DeleteProfileW. ConvertSidToStringSidW :: proc( - Sid: ^SID, + Sid: ^SID, StringSid: ^LPCWSTR, ) -> BOOL --- } diff --git a/core/sys/windows/util.odin b/core/sys/windows/util.odin index 4729d5c72..8cabdeb04 100644 --- a/core/sys/windows/util.odin +++ b/core/sys/windows/util.odin @@ -7,74 +7,89 @@ import "base:intrinsics" L :: intrinsics.constant_utf16_cstring // https://learn.microsoft.com/en-us/windows/win32/winmsg/makeword +@(require_results) MAKEWORD :: #force_inline proc "contextless" (#any_int a, b: int) -> WORD { return WORD(BYTE(DWORD_PTR(a) & 0xff)) | (WORD(BYTE(DWORD_PTR(b) & 0xff)) << 8) } // https://learn.microsoft.com/en-us/windows/win32/winmsg/makelong +@(require_results) MAKELONG :: #force_inline proc "contextless" (#any_int a, b: int) -> LONG { return LONG(WORD(DWORD_PTR(a) & 0xffff)) | (LONG(WORD(DWORD_PTR(b) & 0xffff)) << 16) } // https://learn.microsoft.com/en-us/windows/win32/winmsg/loword +@(require_results) LOWORD :: #force_inline proc "contextless" (#any_int x: int) -> WORD { return WORD(x & 0xffff) } // https://learn.microsoft.com/en-us/windows/win32/winmsg/hiword +@(require_results) HIWORD :: #force_inline proc "contextless" (#any_int x: int) -> WORD { return WORD(x >> 16) } // https://learn.microsoft.com/en-us/windows/win32/winmsg/lobyte +@(require_results) LOBYTE :: #force_inline proc "contextless" (w: WORD) -> BYTE { return BYTE((DWORD_PTR(w)) & 0xff) } // https://learn.microsoft.com/en-us/windows/win32/winmsg/hibyte +@(require_results) HIBYTE :: #force_inline proc "contextless" (w: WORD) -> BYTE { return BYTE(((DWORD_PTR(w)) >> 8) & 0xff) } // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makewparam +@(require_results) MAKEWPARAM :: #force_inline proc "contextless" (#any_int l, h: int) -> WPARAM { return WPARAM(MAKELONG(l, h)) } // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makelparam +@(require_results) MAKELPARAM :: #force_inline proc "contextless" (#any_int l, h: int) -> LPARAM { return LPARAM(MAKELONG(l, h)) } // https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-makelresult +@(require_results) MAKELRESULT :: #force_inline proc "contextless" (#any_int l, h: int) -> LRESULT { return LRESULT(MAKELONG(l, h)) } // https://learn.microsoft.com/en-us/windows/win32/api/windowsx/nf-windowsx-get_x_lparam +@(require_results) GET_X_LPARAM :: #force_inline proc "contextless" (lp: LPARAM) -> c_int { return cast(c_int)cast(c_short)LOWORD(cast(DWORD)lp) } // https://learn.microsoft.com/en-us/windows/win32/api/windowsx/nf-windowsx-get_y_lparam +@(require_results) GET_Y_LPARAM :: #force_inline proc "contextless" (lp: LPARAM) -> c_int { return cast(c_int)cast(c_short)HIWORD(cast(DWORD)lp) } // https://learn.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-makelcid +@(require_results) MAKELCID :: #force_inline proc "contextless" (lgid, srtid: WORD) -> LCID { return (DWORD(WORD(srtid)) << 16) | DWORD(WORD(lgid)) } // https://learn.microsoft.com/en-us/windows/win32/api/winnt/nf-winnt-makelangid +@(require_results) MAKELANGID :: #force_inline proc "contextless" (p, s: WORD) -> DWORD { return DWORD(WORD(s)) << 10 | DWORD(WORD(p)) } +@(require_results) LANGIDFROMLCID :: #force_inline proc "contextless" (lcid: LCID) -> LANGID { return LANGID(lcid) } +@(require_results) utf8_to_utf16_alloc :: proc(s: string, allocator := context.temp_allocator) -> []u16 { if len(s) < 1 { return nil @@ -102,6 +117,7 @@ utf8_to_utf16_alloc :: proc(s: string, allocator := context.temp_allocator) -> [ return text[:n] } +@(require_results) utf8_to_utf16_buf :: proc(buf: []u16, s: string) -> []u16 { n1 := MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, raw_data(s), c_int(len(s)), nil, 0) if n1 == 0 { @@ -120,6 +136,7 @@ utf8_to_utf16_buf :: proc(buf: []u16, s: string) -> []u16 { } utf8_to_utf16 :: proc{utf8_to_utf16_alloc, utf8_to_utf16_buf} +@(require_results) utf8_to_wstring_alloc :: proc(s: string, allocator := context.temp_allocator) -> wstring { if res := utf8_to_utf16(s, allocator); len(res) > 0 { return wstring(raw_data(res)) @@ -127,6 +144,7 @@ utf8_to_wstring_alloc :: proc(s: string, allocator := context.temp_allocator) -> return nil } +@(require_results) utf8_to_wstring_buf :: proc(buf: []u16, s: string) -> wstring { if res := utf8_to_utf16(buf, s); len(res) > 0 { return wstring(raw_data(res)) @@ -136,6 +154,7 @@ utf8_to_wstring_buf :: proc(buf: []u16, s: string) -> wstring { utf8_to_wstring :: proc{utf8_to_wstring_alloc, utf8_to_wstring_buf} +@(require_results) wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allocator) -> (res: string, err: runtime.Allocator_Error) { context.allocator = allocator @@ -170,6 +189,7 @@ wstring_to_utf8_alloc :: proc(s: wstring, N: int, allocator := context.temp_allo return string(text[:n]), nil } +@(require_results) wstring_to_utf8_buf :: proc(buf: []u8, s: wstring, N := -1) -> (res: string) { n := WideCharToMultiByte(CP_UTF8, WC_ERR_INVALID_CHARS, s, c_int(N), nil, 0, nil, nil) if n == 0 { @@ -211,6 +231,7 @@ Returns: - res: A cloned and converted string - err: An optional allocator error if one occured, `nil` otherwise */ +@(require_results) utf16_to_utf8_alloc :: proc(s: []u16, allocator := context.temp_allocator) -> (res: string, err: runtime.Allocator_Error) { if len(s) == 0 { return "", nil @@ -232,6 +253,7 @@ Inputs: Returns: - res: A converted string, backed byu `buf` */ +@(require_results) utf16_to_utf8_buf :: proc(buf: []u8, s: []u16) -> (res: string) { if len(s) == 0 { return @@ -244,8 +266,9 @@ utf16_to_utf8 :: proc{utf16_to_utf8_alloc, utf16_to_utf8_buf} // AdvAPI32, NetAPI32 and UserENV helpers. -allowed_username :: proc(username: string) -> bool { - contains_any :: proc(s, chars: string) -> bool { +@(require_results) +allowed_username :: proc "contextless" (username: string) -> bool { + contains_any :: proc "contextless" (s, chars: string) -> bool { if chars == "" { return false } @@ -287,8 +310,8 @@ allowed_username :: proc(username: string) -> bool { } // Returns .Success on success. +@(require_results) _add_user :: proc(servername: string, username: string, password: string) -> (ok: NET_API_STATUS) { - servername_w: wstring username_w: []u16 password_w: []u16 @@ -339,8 +362,8 @@ _add_user :: proc(servername: string, username: string, password: string) -> (ok return } +@(require_results) get_computer_name_and_account_sid :: proc(username: string) -> (computer_name: string, sid := SID{}, ok: bool) { - username_w := utf8_to_utf16(username, context.temp_allocator) cbsid: DWORD computer_name_size: DWORD @@ -381,8 +404,8 @@ get_computer_name_and_account_sid :: proc(username: string) -> (computer_name: s return } +@(require_results) get_sid :: proc(username: string, sid: ^SID) -> (ok: bool) { - username_w := utf8_to_utf16(username, context.temp_allocator) cbsid: DWORD computer_name_size: DWORD @@ -451,6 +474,7 @@ add_del_from_group :: proc(sid: ^SID, group: string) -> (ok: NET_API_STATUS) { return } +@(require_results) add_user_profile :: proc(username: string) -> (ok: bool, profile_path: string) { username_w := utf8_to_utf16(username, context.temp_allocator) diff --git a/core/sys/windows/ux_theme.odin b/core/sys/windows/ux_theme.odin index 47a0049b2..4ce126c73 100644 --- a/core/sys/windows/ux_theme.odin +++ b/core/sys/windows/ux_theme.odin @@ -13,6 +13,6 @@ PMARGINS :: ^MARGINS @(default_calling_convention="system") foreign uxtheme { - IsThemeActive :: proc() -> BOOL --- + IsThemeActive :: proc() -> BOOL --- SetWindowTheme :: proc(hWnd: HWND, pszSubAppName, pszSubIdList: LPCWSTR) -> HRESULT --- } diff --git a/core/sys/windows/wgl.odin b/core/sys/windows/wgl.odin index 436a96329..532a987eb 100644 --- a/core/sys/windows/wgl.odin +++ b/core/sys/windows/wgl.odin @@ -91,7 +91,7 @@ gl_set_proc_address :: proc(p: rawptr, name: cstring) { func := wglGetProcAddress(name) switch uintptr(func) { case 0, 1, 2, 3, ~uintptr(0): - module := LoadLibraryW(L("opengl32.dll")) + module := LoadLibraryW("opengl32.dll") func = GetProcAddress(module, name) } (^rawptr)(p)^ = func diff --git a/core/sys/windows/winmm.odin b/core/sys/windows/winmm.odin index b85548b85..d1848cb7b 100644 --- a/core/sys/windows/winmm.odin +++ b/core/sys/windows/winmm.odin @@ -12,28 +12,28 @@ foreign winmm { timeEndPeriod :: proc(uPeriod: UINT) -> MMRESULT --- timeGetTime :: proc() -> DWORD --- - waveOutGetNumDevs :: proc() -> UINT --- - waveOutGetDevCapsW :: proc(uDeviceID: UINT_PTR, pwoc: LPWAVEOUTCAPSW, cbwoc: UINT) -> MMRESULT --- - waveOutGetVolume :: proc(hwo: HWAVEOUT, pdwVolume: LPDWORD) -> MMRESULT --- - waveOutSetVolume :: proc(hwo: HWAVEOUT, dwVolume: DWORD) -> MMRESULT --- - waveOutGetErrorTextW :: proc(mmrError: MMRESULT, pszText: LPWSTR, cchText: UINT) -> MMRESULT --- - waveOutOpen :: proc(phwo: LPHWAVEOUT, uDeviceID: UINT, pwfx: LPCWAVEFORMATEX, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD) -> MMRESULT --- - waveOutClose :: proc(hwo: HWAVEOUT) -> MMRESULT --- - waveOutPrepareHeader :: proc(hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT) -> MMRESULT --- + waveOutGetNumDevs :: proc() -> UINT --- + waveOutGetDevCapsW :: proc(uDeviceID: UINT_PTR, pwoc: LPWAVEOUTCAPSW, cbwoc: UINT) -> MMRESULT --- + waveOutGetVolume :: proc(hwo: HWAVEOUT, pdwVolume: LPDWORD) -> MMRESULT --- + waveOutSetVolume :: proc(hwo: HWAVEOUT, dwVolume: DWORD) -> MMRESULT --- + waveOutGetErrorTextW :: proc(mmrError: MMRESULT, pszText: LPWSTR, cchText: UINT) -> MMRESULT --- + waveOutOpen :: proc(phwo: LPHWAVEOUT, uDeviceID: UINT, pwfx: LPCWAVEFORMATEX, dwCallback: DWORD_PTR, dwInstance: DWORD_PTR, fdwOpen: DWORD) -> MMRESULT --- + waveOutClose :: proc(hwo: HWAVEOUT) -> MMRESULT --- + waveOutPrepareHeader :: proc(hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT) -> MMRESULT --- waveOutUnprepareHeader :: proc(hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT) -> MMRESULT --- - waveOutWrite :: proc(hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT) -> MMRESULT --- - waveOutPause :: proc(hwo: HWAVEOUT) -> MMRESULT --- - waveOutRestart :: proc(hwo: HWAVEOUT) -> MMRESULT --- - waveOutReset :: proc(hwo: HWAVEOUT) -> MMRESULT --- - waveOutBreakLoop :: proc(hwo: HWAVEOUT) -> MMRESULT --- - waveOutGetPosition :: proc(hwo: HWAVEOUT, pmmt: LPMMTIME, cbmmt: UINT) -> MMRESULT --- - waveOutGetPitch :: proc(hwo: HWAVEOUT, pdwPitch: LPDWORD) -> MMRESULT --- - waveOutSetPitch :: proc(hwo: HWAVEOUT, pdwPitch: DWORD) -> MMRESULT --- + waveOutWrite :: proc(hwo: HWAVEOUT, pwh: LPWAVEHDR, cbwh: UINT) -> MMRESULT --- + waveOutPause :: proc(hwo: HWAVEOUT) -> MMRESULT --- + waveOutRestart :: proc(hwo: HWAVEOUT) -> MMRESULT --- + waveOutReset :: proc(hwo: HWAVEOUT) -> MMRESULT --- + waveOutBreakLoop :: proc(hwo: HWAVEOUT) -> MMRESULT --- + waveOutGetPosition :: proc(hwo: HWAVEOUT, pmmt: LPMMTIME, cbmmt: UINT) -> MMRESULT --- + waveOutGetPitch :: proc(hwo: HWAVEOUT, pdwPitch: LPDWORD) -> MMRESULT --- + waveOutSetPitch :: proc(hwo: HWAVEOUT, pdwPitch: DWORD) -> MMRESULT --- waveOutGetPlaybackRate :: proc(hwo: HWAVEOUT, pdwRate: LPDWORD) -> MMRESULT --- waveOutSetPlaybackRate :: proc(hwo: HWAVEOUT, pdwRate: DWORD) -> MMRESULT --- - waveOutGetID :: proc(hwo: HWAVEOUT, puDeviceID: LPUINT) -> MMRESULT --- + waveOutGetID :: proc(hwo: HWAVEOUT, puDeviceID: LPUINT) -> MMRESULT --- - waveInGetNumDevs :: proc() -> UINT --- + waveInGetNumDevs :: proc() -> UINT --- waveInGetDevCapsW :: proc(uDeviceID: UINT_PTR, pwic: LPWAVEINCAPSW, cbwic: UINT) -> MMRESULT --- PlaySoundW :: proc(pszSound: LPCWSTR, hmod: HMODULE, fdwSound: DWORD) -> BOOL --- @@ -272,10 +272,10 @@ LPHWAVEOUT :: ^HWAVEOUT MMTIME :: struct { wType: MMTIME_TYPE, u: struct #raw_union { - ms: DWORD, - sample: DWORD, - cb: DWORD, - ticks: DWORD, + ms: DWORD `raw_union_tag:"wType=TIME_MS"`, + sample: DWORD `raw_union_tag:"wType=TIME_SAMPLES"`, + cb: DWORD `raw_union_tag:"wType=TIME_BYTES"`, + ticks: DWORD `raw_union_tag:"wType=TIME_TICKS"`, smpte: struct { hour: BYTE, min: BYTE, @@ -284,10 +284,10 @@ MMTIME :: struct { fps: BYTE, dummy: BYTE, pad: [2]BYTE, - }, + } `raw_union_tag:"wType=TIME_SMPTE"`, midi: struct { songptrpos: DWORD, - }, + } `raw_union_tag:"wType=TIME_MIDI"`, }, } LPMMTIME :: ^MMTIME @@ -307,12 +307,13 @@ MMTIME_TYPE :: enum UINT { TIME_TICKS = 0x0020, } -MAXPNAMELEN :: 32 +MAXPNAMELEN :: 32 MAXERRORLENGTH :: 256 -MMVERSION :: UINT +MMVERSION :: UINT // Input is four characters string // Output is little-endian u32 representation +@(require_results) MAKEFOURCC :: #force_inline proc "contextless" (s: [4]byte) -> DWORD { return (DWORD(s[0])) | (DWORD(s[1]) << 8) | (DWORD(s[2]) << 16) | (DWORD(s[3]) << 24 ) } diff --git a/core/sys/windows/winnls.odin b/core/sys/windows/winnls.odin index ffb2638d5..9c2c219ef 100644 --- a/core/sys/windows/winnls.odin +++ b/core/sys/windows/winnls.odin @@ -5,8 +5,8 @@ LCTYPE :: distinct DWORD LOCALE_NAME_MAX_LENGTH :: 85 LOCALE_NAME_USER_DEFAULT :: 0 -LOCALE_NAME_INVARIANT : wstring = L("") -LOCALE_NAME_SYSTEM_DEFAULT : wstring = L("!x-sys-default-locale") +LOCALE_NAME_INVARIANT : wstring = "" +LOCALE_NAME_SYSTEM_DEFAULT : wstring = "!x-sys-default-locale" // String Length Maximums. // 5 ranges, 2 bytes ea., 0 term. @@ -16,16 +16,16 @@ MAX_DEFAULTCHAR :: 2 CPINFOEXW :: struct{ // Maximum length, in bytes, of a character in the code page. - MaxCharSize: UINT, + MaxCharSize: UINT, // The default is usually the "?" character for the code page. - DefaultChar: [MAX_DEFAULTCHAR]BYTE, + DefaultChar: [MAX_DEFAULTCHAR]BYTE, // A fixed-length array of lead byte ranges, for which the number of lead byte ranges is variable. - LeadByte: [MAX_LEADBYTES]BYTE, + LeadByte: [MAX_LEADBYTES]BYTE, // The default is usually the "?" character or the katakana middle dot character. UnicodeDefaultChar: WCHAR, // Code page value. This value reflects the code page passed to the GetCPInfoEx function. - CodePage: CODEPAGE, + CodePage: CODEPAGE, // Full name of the code page. - CodePageName: [MAX_PATH]WCHAR, + CodePageName: [MAX_PATH]WCHAR, } LPCPINFOEXW :: ^CPINFOEXW diff --git a/core/sys/windows/winver.odin b/core/sys/windows/winver.odin index 47751dab7..878080102 100644 --- a/core/sys/windows/winver.odin +++ b/core/sys/windows/winver.odin @@ -5,14 +5,14 @@ foreign import version "system:version.lib" @(default_calling_convention = "system") foreign version { - GetFileVersionInfoSizeW :: proc(lpwstrFilename: LPCWSTR, lpdwHandle: LPDWORD) -> DWORD --- - GetFileVersionInfoW :: proc(lptstrFilename: LPCWSTR, dwHandle: DWORD, dwLen: DWORD, lpData: LPVOID) -> BOOL --- + GetFileVersionInfoSizeW :: proc(lpwstrFilename: LPCWSTR, lpdwHandle: LPDWORD) -> DWORD --- + GetFileVersionInfoW :: proc(lptstrFilename: LPCWSTR, dwHandle: DWORD, dwLen: DWORD, lpData: LPVOID) -> BOOL --- GetFileVersionInfoSizeExW :: proc(dwFlags: FILE_VER_GET_FLAGS, lpwstrFilename: LPCWSTR, lpdwHandle: LPDWORD) -> DWORD --- - GetFileVersionInfoExW :: proc(dwFlags: FILE_VER_GET_FLAGS, lpwstrFilename: LPCWSTR, dwHandle, dwLen: DWORD, lpData: LPVOID) -> DWORD --- + GetFileVersionInfoExW :: proc(dwFlags: FILE_VER_GET_FLAGS, lpwstrFilename: LPCWSTR, dwHandle, dwLen: DWORD, lpData: LPVOID) -> DWORD --- - VerLanguageNameW :: proc(wLang: DWORD, szLang: LPWSTR, cchLang: DWORD) -> DWORD --- - VerQueryValueW :: proc(pBlock: LPCVOID, lpSubBlock: LPCWSTR, lplpBuffer: ^LPVOID, puLen: PUINT) -> BOOL --- + VerLanguageNameW :: proc(wLang: DWORD, szLang: LPWSTR, cchLang: DWORD) -> DWORD --- + VerQueryValueW :: proc(pBlock: LPCVOID, lpSubBlock: LPCWSTR, lplpBuffer: ^LPVOID, puLen: PUINT) -> BOOL --- } FILE_VER_GET :: enum DWORD {LOCALISED, NEUTRAL, PREFETCHED} diff --git a/core/sys/windows/wow64_apiset.odin b/core/sys/windows/wow64_apiset.odin index 3d29b786e..cce0ab2cc 100644 --- a/core/sys/windows/wow64_apiset.odin +++ b/core/sys/windows/wow64_apiset.odin @@ -5,30 +5,30 @@ foreign import kernel32 "system:Kernel32.lib" @(default_calling_convention="system") foreign kernel32 { - GetSystemWow64Directory2W :: proc (lpBuffer: LPWSTR, uSize: UINT, ImageFileMachineTyp: WORD) -> UINT --- - GetSystemWow64DirectoryW :: proc (lpBuffer: LPWSTR, uSize: UINT) -> UINT --- - IsWow64GuestMachineSupported :: proc (WowGuestMachine: USHORT, MachineIsSupported: ^BOOL) -> HRESULT --- - IsWow64Process :: proc (hProcess: HANDLE, Wow64Process: PBOOL) -> BOOL --- - IsWow64Process2 :: proc (hProcess: HANDLE, pProcessMachine: ^USHORT, pNativeMachine: ^USHORT) -> BOOL --- - Wow64EnableWow64FsRedirection :: proc (Wow64FsEnableRedirection: BOOLEAN) -> BOOLEAN --- - Wow64DisableWow64FsRedirection :: proc (OldValue: ^PVOID) -> BOOL --- - Wow64RevertWow64FsRedirection :: proc (OlValue: PVOID) -> BOOL --- - Wow64GetThreadContext :: proc (hThread: HANDLE, lpContext: PWOW64_CONTEXT) -> BOOL --- - Wow64SetThreadContext :: proc(hThread: HANDLE, lpContext: ^WOW64_CONTEXT) -> BOOL --- + GetSystemWow64Directory2W :: proc(lpBuffer: LPWSTR, uSize: UINT, ImageFileMachineTyp: WORD) -> UINT --- + GetSystemWow64DirectoryW :: proc(lpBuffer: LPWSTR, uSize: UINT) -> UINT --- + IsWow64GuestMachineSupported :: proc(WowGuestMachine: USHORT, MachineIsSupported: ^BOOL) -> HRESULT --- + IsWow64Process :: proc(hProcess: HANDLE, Wow64Process: PBOOL) -> BOOL --- + IsWow64Process2 :: proc(hProcess: HANDLE, pProcessMachine: ^USHORT, pNativeMachine: ^USHORT) -> BOOL --- + Wow64EnableWow64FsRedirection :: proc(Wow64FsEnableRedirection: BOOLEAN) -> BOOLEAN --- + Wow64DisableWow64FsRedirection :: proc(OldValue: ^PVOID) -> BOOL --- + Wow64RevertWow64FsRedirection :: proc(OlValue: PVOID) -> BOOL --- + Wow64GetThreadContext :: proc(hThread: HANDLE, lpContext: PWOW64_CONTEXT) -> BOOL --- + Wow64SetThreadContext :: proc(hThread: HANDLE, lpContext: ^WOW64_CONTEXT) -> BOOL --- Wow64SetThreadDefaultGuestMachine :: proc(Machine: USHORT) -> USHORT --- - Wow64SuspendThread :: proc (hThread: HANDLE) -> DWORD --- + Wow64SuspendThread :: proc(hThread: HANDLE) -> DWORD --- } WOW64_CONTEXT_i386 :: 0x00010000 -WOW64_CONTEXT_CONTROL :: (WOW64_CONTEXT_i386 | 0x00000001) -WOW64_CONTEXT_INTEGER :: (WOW64_CONTEXT_i386 | 0x00000002) +WOW64_CONTEXT_CONTROL :: (WOW64_CONTEXT_i386 | 0x00000001) +WOW64_CONTEXT_INTEGER :: (WOW64_CONTEXT_i386 | 0x00000002) WOW64_CONTEXT_SEGMENTS :: (WOW64_CONTEXT_i386 | 0x00000004) -WOW64_CONTEXT_FLOATING_POINT :: (WOW64_CONTEXT_i386 | 0x00000008) -WOW64_CONTEXT_DEBUG_REGISTERS :: (WOW64_CONTEXT_i386 | 0x00000010) +WOW64_CONTEXT_FLOATING_POINT :: (WOW64_CONTEXT_i386 | 0x00000008) +WOW64_CONTEXT_DEBUG_REGISTERS :: (WOW64_CONTEXT_i386 | 0x00000010) WOW64_CONTEXT_EXTENDED_REGISTERS :: (WOW64_CONTEXT_i386 | 0x00000020) -WOW64_CONTEXT_FULL :: (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS) +WOW64_CONTEXT_FULL :: (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS) WOW64_CONTEXT_ALL :: ( WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | @@ -41,45 +41,45 @@ WOW64_SIZE_OF_80387_REGISTERS :: 80 WOW64_MAXIMUM_SUPPORTED_EXTENSION :: 512 WOW64_CONTEXT :: struct { - ContextFlags: DWORD, - Dr0: DWORD, - Dr1: DWORD, - Dr2: DWORD, - Dr3: DWORD, - Dr6: DWORD, - Dr7: DWORD, - FloatSave: WOW64_FLOATING_SAVE_AREA, - SegGs: DWORD, - SegFs: DWORD, - SegEs: DWORD, - SegDs: DWORD, - Edi: DWORD, - Esi: DWORD, - Ebx: DWORD, - Edx: DWORD, - Ecx: DWORD, - Eax: DWORD, - Ebp: DWORD, - Eip: DWORD, - SegCs: DWORD, - EFlags: DWORD, - Esp: DWORD, - SegSs: DWORD, + ContextFlags: DWORD, + Dr0: DWORD, + Dr1: DWORD, + Dr2: DWORD, + Dr3: DWORD, + Dr6: DWORD, + Dr7: DWORD, + FloatSave: WOW64_FLOATING_SAVE_AREA, + SegGs: DWORD, + SegFs: DWORD, + SegEs: DWORD, + SegDs: DWORD, + Edi: DWORD, + Esi: DWORD, + Ebx: DWORD, + Edx: DWORD, + Ecx: DWORD, + Eax: DWORD, + Ebp: DWORD, + Eip: DWORD, + SegCs: DWORD, + EFlags: DWORD, + Esp: DWORD, + SegSs: DWORD, ExtendedRegisters: [WOW64_MAXIMUM_SUPPORTED_EXTENSION]BYTE, } PWOW64_CONTEXT :: ^WOW64_CONTEXT WOW64_FLOATING_SAVE_AREA :: struct { - ControlWord: DWORD, - StatusWord: DWORD, - TagWord: DWORD, - ErrorOffset: DWORD, + ControlWord: DWORD, + StatusWord: DWORD, + TagWord: DWORD, + ErrorOffset: DWORD, ErrorSelector: DWORD, - DataOffset: DWORD, - DataSelector: DWORD, - RegisterArea: [WOW64_SIZE_OF_80387_REGISTERS]BYTE, - Cr0NpxState: DWORD, + DataOffset: DWORD, + DataSelector: DWORD, + RegisterArea: [WOW64_SIZE_OF_80387_REGISTERS]BYTE, + Cr0NpxState: DWORD, } PWOW64_FLOATING_SAVE_AREA :: ^WOW64_FLOATING_SAVE_AREA \ No newline at end of file diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin index ed2ad5e24..2c8dbe3b0 100644 --- a/core/sys/windows/ws2_32.odin +++ b/core/sys/windows/ws2_32.odin @@ -109,62 +109,62 @@ foreign ws2_32 { WSAPoll :: proc(fdArray: ^WSA_POLLFD, fds: c_ulong, timeout: c_int) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaduplicatesocketw) WSADuplicateSocketW :: proc( - s: SOCKET, - dwProcessId: DWORD, + s: SOCKET, + dwProcessId: DWORD, lpProtocolInfo: LPWSAPROTOCOL_INFO, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasend) WSASend :: proc( - s: SOCKET, - lpBuffers: LPWSABUF, - dwBufferCount: DWORD, + s: SOCKET, + lpBuffers: LPWSABUF, + dwBufferCount: DWORD, lpNumberOfBytesSent: LPDWORD, - dwFlags: DWORD, - lpOverlapped: LPWSAOVERLAPPED, + dwFlags: DWORD, + lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasendto) WSASendTo :: proc( - s: SOCKET, - lpBuffers: LPWSABUF, - dwBufferCount: DWORD, + s: SOCKET, + lpBuffers: LPWSABUF, + dwBufferCount: DWORD, lpNumberOfBytesSent: LPDWORD, - dwFlags: DWORD, - lpTo: ^SOCKADDR_STORAGE_LH, - iToLen: c_int, - lpOverlapped: LPWSAOVERLAPPED, + dwFlags: DWORD, + lpTo: ^SOCKADDR_STORAGE_LH, + iToLen: c_int, + lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsarecv) WSARecv :: proc( - s: SOCKET, - lpBuffers: LPWSABUF, - dwBufferCount: DWORD, + s: SOCKET, + lpBuffers: LPWSABUF, + dwBufferCount: DWORD, lpNumberOfBytesRecvd: LPDWORD, - lpFlags: LPDWORD, - lpOverlapped: LPWSAOVERLAPPED, - lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, + lpFlags: LPDWORD, + lpOverlapped: LPWSAOVERLAPPED, + lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsarecvfrom) WSARecvFrom :: proc( - s: SOCKET, - lpBuffers: LPWSABUF, - dwBufferCount: DWORD, + s: SOCKET, + lpBuffers: LPWSABUF, + dwBufferCount: DWORD, lpNumberOfBytesRecvd: LPDWORD, - lpFlags: LPDWORD, - lpFrom: ^SOCKADDR_STORAGE_LH, - lpFromlen: ^c_int, - lpOverlapped: LPWSAOVERLAPPED, - lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, + lpFlags: LPDWORD, + lpFrom: ^SOCKADDR_STORAGE_LH, + lpFromlen: ^c_int, + lpOverlapped: LPWSAOVERLAPPED, + lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsasocketw) WSASocketW :: proc( - af: c_int, - kind: c_int, - protocol: c_int, + af: c_int, + kind: c_int, + protocol: c_int, lpProtocolInfo: LPWSAPROTOCOL_INFO, - g: GROUP, - dwFlags: DWORD, + g: GROUP, + dwFlags: DWORD, ) -> SOCKET --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-wsaioctl) WSAIoctl :: proc(s: SOCKET, dwIoControlCode: DWORD, lpvInBuffer: rawptr, cbInBuffer: DWORD, lpvOutBuffer: rawptr, cbOutBuffer: DWORD, lpcbBytesReturned: ^DWORD, lpOverlapped: ^OVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE) -> c_int --- @@ -182,8 +182,8 @@ foreign ws2_32 { WSAGetOverlappedResult :: proc(s: SOCKET, lpOverlapped: ^OVERLAPPED, lpcbTransfer: ^DWORD, fWait: BOOL, lpdwFlags: ^DWORD) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-socket) socket :: proc( - af: c_int, - type: c_int, + af: c_int, + type: c_int, protocol: c_int, ) -> SOCKET --- @@ -197,20 +197,20 @@ foreign ws2_32 { send :: proc(socket: SOCKET, buf: rawptr, len: c_int, flags: c_int) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-recvfrom) recvfrom :: proc( - socket: SOCKET, - buf: rawptr, - len: c_int, - flags: c_int, - addr: ^SOCKADDR_STORAGE_LH, + socket: SOCKET, + buf: rawptr, + len: c_int, + flags: c_int, + addr: ^SOCKADDR_STORAGE_LH, addrlen: ^c_int, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-sendto) sendto :: proc( - socket: SOCKET, - buf: rawptr, - len: c_int, - flags: c_int, - addr: ^SOCKADDR_STORAGE_LH, + socket: SOCKET, + buf: rawptr, + len: c_int, + flags: c_int, + addr: ^SOCKADDR_STORAGE_LH, addrlen: c_int, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-shutdown) @@ -220,11 +220,11 @@ foreign ws2_32 { // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-setsockopt) setsockopt :: proc( - s: SOCKET, - level: c_int, + s: SOCKET, + level: c_int, optname: c_int, - optval: rawptr, - optlen: c_int, + optval: rawptr, + optlen: c_int, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-getsockname) getsockname :: proc(socket: SOCKET, address: ^SOCKADDR_STORAGE_LH, address_len: ^c_int) -> c_int --- @@ -238,10 +238,10 @@ foreign ws2_32 { connect :: proc(socket: SOCKET, address: ^SOCKADDR_STORAGE_LH, len: c_int) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-getaddrinfo) getaddrinfo :: proc( - node: cstring, + node: cstring, service: cstring, - hints: ^ADDRINFOA, - res: ^^ADDRINFOA, + hints: ^ADDRINFOA, + res: ^^ADDRINFOA, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-freeaddrinfo) freeaddrinfo :: proc(res: ^ADDRINFOA) --- @@ -261,19 +261,19 @@ foreign ws2_32 { lpHandle: LPHANDLE) -> INT --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-select) select :: proc( - nfds: c_int, - readfds: ^fd_set, - writefds: ^fd_set, - exceptfds: ^fd_set, - timeout: ^timeval, + nfds: c_int, + readfds: [^]fd_set, + writefds: [^]fd_set, + exceptfds: [^]fd_set, + timeout: ^timeval, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-getsockopt) getsockopt :: proc( - s: SOCKET, - level: c_int, + s: SOCKET, + level: c_int, optname: c_int, - optval: ^c_char, - optlen: ^c_int, + optval: [^]c_char, + optlen: ^c_int, ) -> c_int --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-ntohl) ntohl :: proc(netlong: c_ulong) -> c_ulong --- diff --git a/core/sys/windows/xinput.odin b/core/sys/windows/xinput.odin index 0089f88cb..c0c758c41 100644 --- a/core/sys/windows/xinput.odin +++ b/core/sys/windows/xinput.odin @@ -199,12 +199,12 @@ XINPUT_KEYSTROKE :: struct { // XInput APIs @(default_calling_convention = "system") foreign xinput { - XInputGetState :: proc(user: XUSER, pState: ^XINPUT_STATE) -> System_Error --- - XInputSetState :: proc(user: XUSER, pVibration: ^XINPUT_VIBRATION) -> System_Error --- - XInputGetCapabilities :: proc(user: XUSER, dwFlags: XINPUT_FLAG, pCapabilities: ^XINPUT_CAPABILITIES) -> System_Error --- - XInputEnable :: proc(enable: BOOL) --- - XInputGetAudioDeviceIds :: proc(user: XUSER, pRenderDeviceId: LPWSTR, pRenderCount: ^UINT, pCaptureDeviceId: LPWSTR, pCaptureCount: ^UINT) -> System_Error --- - XInputGetBatteryInformation :: proc(user: XUSER, devType: BATTERY_DEVTYPE, pBatteryInformation: ^XINPUT_BATTERY_INFORMATION) -> System_Error --- - XInputGetKeystroke :: proc(user: XUSER, dwReserved: DWORD, pKeystroke: ^XINPUT_KEYSTROKE) -> System_Error --- + XInputGetState :: proc(user: XUSER, pState: ^XINPUT_STATE) -> System_Error --- + XInputSetState :: proc(user: XUSER, pVibration: ^XINPUT_VIBRATION) -> System_Error --- + XInputGetCapabilities :: proc(user: XUSER, dwFlags: XINPUT_FLAG, pCapabilities: ^XINPUT_CAPABILITIES) -> System_Error --- + XInputEnable :: proc(enable: BOOL) --- + XInputGetAudioDeviceIds :: proc(user: XUSER, pRenderDeviceId: LPWSTR, pRenderCount: ^UINT, pCaptureDeviceId: LPWSTR, pCaptureCount: ^UINT) -> System_Error --- + XInputGetBatteryInformation :: proc(user: XUSER, devType: BATTERY_DEVTYPE, pBatteryInformation: ^XINPUT_BATTERY_INFORMATION) -> System_Error --- + XInputGetKeystroke :: proc(user: XUSER, dwReserved: DWORD, pKeystroke: ^XINPUT_KEYSTROKE) -> System_Error --- XInputGetDSoundAudioDeviceGuids :: proc(user: XUSER, pDSoundRenderGuid: ^GUID, pDSoundCaptureGuid: ^GUID) -> System_Error --- } From 57c7ae1bd9eb2160afc0cf6d85c3e16781e9a439 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 2 Jan 2026 11:35:44 +0000 Subject: [PATCH 063/212] Minor fixes to formatting and types --- core/sys/windows/comctl32.odin | 8 ++++---- core/sys/windows/xinput.odin | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/core/sys/windows/comctl32.odin b/core/sys/windows/comctl32.odin index 3418c7649..28fab53be 100644 --- a/core/sys/windows/comctl32.odin +++ b/core/sys/windows/comctl32.odin @@ -1609,9 +1609,9 @@ LPTV_ITEMEXW :: LPTVITEMEXW TVINSERTSTRUCTW :: struct { hParent: HTREEITEM, hInsertAfter: HTREEITEM, - _: struct #raw_union { - itemex: TVITEMEXW, - item: TV_ITEMW, + using _: struct #raw_union { + itemex: TVITEMEXW, + item: TV_ITEMW, }, } TV_INSERTSTRUCTW :: TVINSERTSTRUCTW @@ -1703,7 +1703,7 @@ TreeView_Expand :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, co } TreeView_GetItemRect :: #force_inline proc "system" (hwnd: HWND, hitem: HTREEITEM, prc: ^RECT, code: UINT) -> BOOL { alias: struct #raw_union { - rc: ^RECT, + rc: ^RECT, hitem: ^HTREEITEM, } diff --git a/core/sys/windows/xinput.odin b/core/sys/windows/xinput.odin index c0c758c41..f8fd45bc9 100644 --- a/core/sys/windows/xinput.odin +++ b/core/sys/windows/xinput.odin @@ -57,9 +57,9 @@ XINPUT_GAMEPAD_BUTTON_BIT :: enum WORD { XINPUT_GAMEPAD_BUTTON :: distinct bit_set[XINPUT_GAMEPAD_BUTTON_BIT;WORD] // Gamepad thresholds -XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE: SHORT : 7849 -XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE: SHORT : 8689 -XINPUT_GAMEPAD_TRIGGER_THRESHOLD: SHORT : 30 +XINPUT_GAMEPAD_LEFT_THUMB_DEADZONE : SHORT : 7849 +XINPUT_GAMEPAD_RIGHT_THUMB_DEADZONE : SHORT : 8689 +XINPUT_GAMEPAD_TRIGGER_THRESHOLD : SHORT : 30 // Flags to pass to XInputGetCapabilities // Corresponds to log2(XINPUT_FLAG_...) From 65b147d4d39c4431ad7ee7e7f856eadc225b195a Mon Sep 17 00:00:00 2001 From: Piotr Doan Date: Fri, 2 Jan 2026 18:58:09 +0100 Subject: [PATCH 064/212] Prefer LPCSTR/LPCWSTR types in DirectX bindings - Replaces [^]u16 parameter types because they are not directly compatible with result of `win32.utf8_to_wstring()` - Replaces some string/wstring types for consistency, similarly as other packages do to match original C declarations and documentation --- vendor/directx/d3d11/d3d11.odin | 55 +++++++-------- vendor/directx/d3d12/d3d12.odin | 67 ++++++++++--------- vendor/directx/d3d_compiler/d3d_compiler.odin | 46 +++++++------ 3 files changed, 87 insertions(+), 81 deletions(-) diff --git a/vendor/directx/d3d11/d3d11.odin b/vendor/directx/d3d11/d3d11.odin index 835655bbf..517146c8a 100644 --- a/vendor/directx/d3d11/d3d11.odin +++ b/vendor/directx/d3d11/d3d11.odin @@ -20,6 +20,7 @@ BOOL :: dxgi.BOOL UINT :: dxgi.UINT INT :: dxgi.INT +LPCSTR :: windows.LPCSTR LPCWSTR :: windows.LPCWSTR RECT :: dxgi.RECT @@ -950,7 +951,7 @@ INPUT_CLASSIFICATION :: enum i32 { } INPUT_ELEMENT_DESC :: struct { - SemanticName: cstring, + SemanticName: LPCSTR, SemanticIndex: u32, Format: dxgi.FORMAT, InputSlot: u32, @@ -972,7 +973,7 @@ CULL_MODE :: enum i32 { SO_DECLARATION_ENTRY :: struct { Stream: u32, - SemanticName: cstring, + SemanticName: LPCSTR, SemanticIndex: u32, StartComponent: u8, ComponentCount: u8, @@ -2172,8 +2173,8 @@ IClassLinkage :: struct #raw_union { } IClassLinkage_VTable :: struct { using id3d11devicechild_vtable: IDeviceChild_VTable, - GetClassInstance: proc "system" (this: ^IClassLinkage, pClassInstanceName: cstring, InstanceIndex: u32, ppInstance: ^^IClassInstance) -> HRESULT, - CreateClassInstance: proc "system" (this: ^IClassLinkage, pClassTypeName: cstring, ConstantBufferOffset: u32, ConstantVectorOffset: u32, TextureOffset: u32, SamplerOffset: u32, ppInstance: ^^IClassInstance) -> HRESULT, + GetClassInstance: proc "system" (this: ^IClassLinkage, pClassInstanceName: LPCSTR, InstanceIndex: u32, ppInstance: ^^IClassInstance) -> HRESULT, + CreateClassInstance: proc "system" (this: ^IClassLinkage, pClassTypeName: LPCSTR, ConstantBufferOffset: u32, ConstantVectorOffset: u32, TextureOffset: u32, SamplerOffset: u32, ppInstance: ^^IClassInstance) -> HRESULT, } @@ -3407,7 +3408,7 @@ SHADER_VERSION_TYPE :: enum i32 { } SIGNATURE_PARAMETER_DESC :: struct { - SemanticName: cstring, + SemanticName: LPCSTR, SemanticIndex: u32, Register: u32, SystemValueType: NAME, @@ -3421,7 +3422,7 @@ SIGNATURE_PARAMETER_DESC :: struct { } SHADER_BUFFER_DESC :: struct { - Name: cstring, + Name: LPCSTR, Type: CBUFFER_TYPE, Variables: u32, Size: u32, @@ -3429,7 +3430,7 @@ SHADER_BUFFER_DESC :: struct { } SHADER_VARIABLE_DESC :: struct { - Name: cstring, + Name: LPCSTR, StartOffset: u32, Size: u32, uFlags: SHADER_VARIABLE_FLAGS, @@ -3448,12 +3449,12 @@ SHADER_TYPE_DESC :: struct { Elements: u32, Members: u32, Offset: u32, - Name: cstring, + Name: LPCSTR, } SHADER_DESC :: struct { Version: u32, - Creator: cstring, + Creator: LPCSTR, Flags: u32, ConstantBuffers: u32, @@ -3496,7 +3497,7 @@ SHADER_DESC :: struct { } SHADER_INPUT_BIND_DESC :: struct { - Name: cstring, + Name: LPCSTR, Type: SHADER_INPUT_TYPE, BindPoint: u32, BindCount: u32, @@ -3508,14 +3509,14 @@ SHADER_INPUT_BIND_DESC :: struct { } LIBRARY_DESC :: struct { - Creator: cstring, + Creator: LPCSTR, Flags: u32, FunctionCount: u32, } FUNCTION_DESC :: struct { Version: u32, - Creator: cstring, + Creator: LPCSTR, Flags: u32, ConstantBuffers: u32, @@ -3545,7 +3546,7 @@ FUNCTION_DESC :: struct { MinFeatureLevel: FEATURE_LEVEL, RequiredFeatureFlags: SHADER_REQUIRES_FLAGS, - Name: cstring, + Name: LPCSTR, FunctionParameterCount: i32, HasReturn: BOOL, Has10Level9VertexShader: BOOL, @@ -3553,8 +3554,8 @@ FUNCTION_DESC :: struct { } PARAMETER_DESC :: struct { - Name: cstring, - SemanticName: cstring, + Name: LPCSTR, + SemanticName: LPCSTR, Type: SHADER_VARIABLE_TYPE, Class: SHADER_VARIABLE_CLASS, Rows: u32, @@ -3576,8 +3577,8 @@ IShaderReflectionType :: struct { IShaderReflectionType_VTable :: struct { GetDesc: proc "system" (this: ^IShaderReflectionType, pDesc: ^SHADER_TYPE_DESC) -> HRESULT, GetMemberTypeByIndex: proc "system" (this: ^IShaderReflectionType, Index: u32) -> ^IShaderReflectionType, - GetMemberTypeByName: proc "system" (this: ^IShaderReflectionType, Name: cstring) -> ^IShaderReflectionType, - GetMemberTypeName: proc "system" (this: ^IShaderReflectionType, Index: u32) -> cstring, + GetMemberTypeByName: proc "system" (this: ^IShaderReflectionType, Name: LPCSTR) -> ^IShaderReflectionType, + GetMemberTypeName: proc "system" (this: ^IShaderReflectionType, Index: u32) -> LPCSTR, IsEqual: proc "system" (this: ^IShaderReflectionType, pType: ^IShaderReflectionType) -> HRESULT, GetSubType: proc "system" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, GetBaseClass: proc "system" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, @@ -3607,7 +3608,7 @@ IShaderReflectionConstantBuffer :: struct { IShaderReflectionConstantBuffer_VTable :: struct { GetDesc: proc "system" (this: ^IShaderReflectionConstantBuffer, pDesc: ^SHADER_BUFFER_DESC) -> HRESULT, GetVariableByIndex: proc "system" (this: ^IShaderReflectionConstantBuffer, Index: u32) -> ^IShaderReflectionVariable, - GetVariableByName: proc "system" (this: ^IShaderReflectionConstantBuffer, Name: cstring) -> ^IShaderReflectionVariable, + GetVariableByName: proc "system" (this: ^IShaderReflectionConstantBuffer, Name: LPCSTR) -> ^IShaderReflectionVariable, } @@ -3621,13 +3622,13 @@ IShaderReflection_VTable :: struct { using iunknown_vtable: IUnknown_VTable, GetDesc: proc "system" (this: ^IShaderReflection, pDesc: ^SHADER_DESC) -> HRESULT, GetConstantBufferByIndex: proc "system" (this: ^IShaderReflection, Index: u32) -> ^IShaderReflectionConstantBuffer, - GetConstantBufferByName: proc "system" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "system" (this: ^IShaderReflection, Name: LPCSTR) -> ^IShaderReflectionConstantBuffer, GetResourceBindingDesc: proc "system" (this: ^IShaderReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, GetInputParameterDesc: proc "system" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, GetOutputParameterDesc: proc "system" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, GetPatchConstantParameterDesc: proc "system" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, - GetVariableByName: proc "system" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionVariable, - GetResourceBindingDescByName: proc "system" (this: ^IShaderReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetVariableByName: proc "system" (this: ^IShaderReflection, Name: LPCSTR) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "system" (this: ^IShaderReflection, Name: LPCSTR, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, GetMovInstructionCount: proc "system" (this: ^IShaderReflection) -> u32, GetMovcInstructionCount: proc "system" (this: ^IShaderReflection) -> u32, GetConversionInstructionCount: proc "system" (this: ^IShaderReflection) -> u32, @@ -3661,10 +3662,10 @@ IFunctionReflection :: struct { IFunctionReflection_VTable :: struct { GetDesc: proc "system" (this: ^IFunctionReflection, pDesc: ^FUNCTION_DESC) -> HRESULT, GetConstantBufferByIndex: proc "system" (this: ^IFunctionReflection, BufferIndex: u32) -> ^IShaderReflectionConstantBuffer, - GetConstantBufferByName: proc "system" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "system" (this: ^IFunctionReflection, Name: LPCSTR) -> ^IShaderReflectionConstantBuffer, GetResourceBindingDesc: proc "system" (this: ^IFunctionReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, - GetVariableByName: proc "system" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionVariable, - GetResourceBindingDescByName: proc "system" (this: ^IFunctionReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetVariableByName: proc "system" (this: ^IFunctionReflection, Name: LPCSTR) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "system" (this: ^IFunctionReflection, Name: LPCSTR, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, GetFunctionParameter: proc "system" (this: ^IFunctionReflection, ParameterIndex: i32) -> ^IFunctionParameterReflection, } @@ -3691,7 +3692,7 @@ IFunctionLinkingGraph_VTable :: struct { CreateModuleInstance: proc "system" (this: ^IFunctionLinkingGraph, ppModuleInstance: ^^IModuleInstance, ppErrorBuffer: ^^IBlob) -> HRESULT, SetInputSignature: proc "system" (this: ^IFunctionLinkingGraph, pInputParameters: [^]PARAMETER_DESC, cInputParameters: u32, ppInputNode: ^^ILinkingNode) -> HRESULT, SetOutputSignature: proc "system" (this: ^IFunctionLinkingGraph, pOutputParameters: [^]PARAMETER_DESC, cOutputParameters: u32, ppOutputNode: ^^ILinkingNode) -> HRESULT, - CallFunction: proc "system" (this: ^IFunctionLinkingGraph, pModuleInstanceNamespace: cstring, pModuleWithFunctionPrototype: ^IModule, pFunctionName: cstring, ppCallNode: ^^ILinkingNode) -> HRESULT, + CallFunction: proc "system" (this: ^IFunctionLinkingGraph, pModuleInstanceNamespace: LPCSTR, pModuleWithFunctionPrototype: ^IModule, pFunctionName: LPCSTR, ppCallNode: ^^ILinkingNode) -> HRESULT, PassValue: proc "system" (this: ^IFunctionLinkingGraph, pSrcNode: ^ILinkingNode, SrcParameterIndex: i32, pDstNode: ^ILinkingNode, DstParameterIndex: i32) -> HRESULT, PassValueWithSwizzle: proc "system" (this: ^IFunctionLinkingGraph, pSrcNode: ^ILinkingNode, SrcParameterIndex: i32, pSrcSwizzle: ^u8, pDstNode: ^ILinkingNode, DstParameterIndex: i32, pDstSwizzle: ^u8) -> HRESULT, GetLastError: proc "system" (this: ^IFunctionLinkingGraph, ppErrorBuffer: ^^IBlob) -> HRESULT, @@ -3814,8 +3815,8 @@ IInfoQueue_VTable :: struct { PushRetrievalFilter: proc "system" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER) -> HRESULT, PopRetrievalFilter: proc "system" (this: ^IInfoQueue), GetRetrievalFilterStackSize: proc "system" (this: ^IInfoQueue) -> u64, - AddMessage: proc "system" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: cstring) -> HRESULT, - AddApplicationMessage: proc "system" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, pDescription: cstring) -> HRESULT, + AddMessage: proc "system" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: LPCSTR) -> HRESULT, + AddApplicationMessage: proc "system" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, pDescription: LPCSTR) -> HRESULT, SetBreakOnCategory: proc "system" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, bEnable: BOOL) -> HRESULT, SetBreakOnSeverity: proc "system" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, bEnable: BOOL) -> HRESULT, SetBreakOnID: proc "system" (this: ^IInfoQueue, ID: MESSAGE_ID, bEnable: BOOL) -> HRESULT, diff --git a/vendor/directx/d3d12/d3d12.odin b/vendor/directx/d3d12/d3d12.odin index a0e020d1a..efa323733 100644 --- a/vendor/directx/d3d12/d3d12.odin +++ b/vendor/directx/d3d12/d3d12.odin @@ -23,6 +23,7 @@ BOOL :: dxgi.BOOL RECT :: dxgi.RECT +LPCSTR :: win32.LPCSTR LPCWSTR :: win32.LPCWSTR IModuleInstance :: d3d_compiler.ID3D11ModuleInstance @@ -467,7 +468,7 @@ INPUT_CLASSIFICATION :: enum i32 { } INPUT_ELEMENT_DESC :: struct { - SemanticName: cstring, + SemanticName: LPCSTR, SemanticIndex: u32, Format: dxgi.FORMAT, InputSlot: u32, @@ -489,7 +490,7 @@ CULL_MODE :: enum i32 { SO_DECLARATION_ENTRY :: struct { Stream: u32, - SemanticName: cstring, + SemanticName: LPCSTR, SemanticIndex: u32, StartComponent: u8, ComponentCount: u8, @@ -3153,13 +3154,13 @@ EXISTING_COLLECTION_DESC :: struct { SUBOBJECT_TO_EXPORTS_ASSOCIATION :: struct { pSubobjectToAssociate: ^STATE_SUBOBJECT, NumExports: u32, - pExports: [^]cstring16 `fmt:"v,NumExports"`, + pExports: [^]LPCWSTR `fmt:"v,NumExports"`, } DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION :: struct { - SubobjectToAssociate: cstring16, + SubobjectToAssociate: LPCWSTR, NumExports: u32, - pExports: [^]cstring16 `fmt:"v,NumExports"`, + pExports: [^]LPCWSTR `fmt:"v,NumExports"`, } HIT_GROUP_TYPE :: enum i32 { @@ -3168,11 +3169,11 @@ HIT_GROUP_TYPE :: enum i32 { } HIT_GROUP_DESC :: struct { - HitGroupExport: cstring16, + HitGroupExport: LPCWSTR, Type: HIT_GROUP_TYPE, - AnyHitShaderImport: cstring16, - ClosestHitShaderImport: cstring16, - IntersectionShaderImport: cstring16, + AnyHitShaderImport: LPCWSTR, + ClosestHitShaderImport: LPCWSTR, + IntersectionShaderImport: LPCWSTR, } RAYTRACING_SHADER_CONFIG :: struct { @@ -5222,8 +5223,8 @@ IInfoQueue_VTable :: struct { PushRetrievalFilter: proc "system" (this: ^IInfoQueue, pFilter: ^INFO_QUEUE_FILTER) -> HRESULT, PopRetrievalFilter: proc "system" (this: ^IInfoQueue), GetRetrievalFilterStackSize: proc "system" (this: ^IInfoQueue) -> u32, - AddMessage: proc "system" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: cstring) -> HRESULT, - AddApplicationMessage: proc "system" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, pDescription: cstring) -> HRESULT, + AddMessage: proc "system" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: LPCSTR) -> HRESULT, + AddApplicationMessage: proc "system" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, pDescription: LPCSTR) -> HRESULT, SetBreakOnCategory: proc "system" (this: ^IInfoQueue, Category: MESSAGE_CATEGORY, bEnable: BOOL) -> HRESULT, SetBreakOnSeverity: proc "system" (this: ^IInfoQueue, Severity: MESSAGE_SEVERITY, bEnable: BOOL) -> HRESULT, SetBreakOnID: proc "system" (this: ^IInfoQueue, ID: MESSAGE_ID, bEnable: BOOL) -> HRESULT, @@ -5239,7 +5240,7 @@ MESSAGE_CALLBACK_FLAG :: enum { IGNORE_FILTERS = 0, } -PFN_MESSAGE_CALLBACK :: #type proc "c" (Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: cstring, pContext: rawptr) +PFN_MESSAGE_CALLBACK :: #type proc "c" (Category: MESSAGE_CATEGORY, Severity: MESSAGE_SEVERITY, ID: MESSAGE_ID, pDescription: LPCSTR, pContext: rawptr) IInfoQueue1_UUID_STRING :: "2852dd88-b484-4c0c-b6b1-67168500e600" IInfoQueue1_UUID := &IID{0x2852dd88, 0xb484, 0x4c0c, {0xb6, 0xb1, 0x67, 0x16, 0x85, 0x00, 0xe6, 0x00}} @@ -5262,7 +5263,7 @@ ISDKConfiguration :: struct #raw_union { } ISDKConfiguration_VTable :: struct { using iunknown_vtable: IUnknown_VTable, - SetSDKVersion: proc "system" (this: ^ISDKConfiguration, SDKVersion: u32, SDKPath: cstring) -> HRESULT, + SetSDKVersion: proc "system" (this: ^ISDKConfiguration, SDKVersion: u32, SDKPath: LPCSTR) -> HRESULT, } @@ -5361,7 +5362,7 @@ shver_get_minor :: proc "contextless" (version: u32) -> u8 { } SIGNATURE_PARAMETER_DESC :: struct { - SemanticName: cstring, + SemanticName: LPCSTR, SemanticIndex: u32, Register: u32, SystemValueType: NAME, @@ -5375,7 +5376,7 @@ SIGNATURE_PARAMETER_DESC :: struct { } SHADER_BUFFER_DESC :: struct { - Name: cstring, + Name: LPCSTR, Type: CBUFFER_TYPE, Variables: u32, Size: u32, @@ -5383,7 +5384,7 @@ SHADER_BUFFER_DESC :: struct { } SHADER_VARIABLE_DESC :: struct { - Name: cstring, + Name: LPCSTR, StartOffset: u32, Size: u32, uFlags: u32, @@ -5402,12 +5403,12 @@ SHADER_TYPE_DESC :: struct { Elements: u32, Members: u32, Offset: u32, - Name: cstring, + Name: LPCSTR, } SHADER_DESC :: struct { Version: u32, - Creator: cstring, + Creator: LPCSTR, Flags: u32, ConstantBuffers: u32, @@ -5450,7 +5451,7 @@ SHADER_DESC :: struct { } SHADER_INPUT_BIND_DESC :: struct { - Name: cstring, + Name: LPCSTR, Type: SHADER_INPUT_TYPE, BindPoint: u32, BindCount: u32, @@ -5497,14 +5498,14 @@ SHADER_REQUIRES :: enum u64 { } LIBRARY_DESC :: struct { - Creator: cstring, + Creator: LPCSTR, Flags: u32, FunctionCount: u32, } FUNCTION_DESC :: struct { Version: u32, - Creator: cstring, + Creator: LPCSTR, Flags: u32, ConstantBuffers: u32, @@ -5534,7 +5535,7 @@ FUNCTION_DESC :: struct { MinFeatureLevel: FEATURE_LEVEL, RequiredFeatureFlags: u64, - Name: cstring, + Name: LPCSTR, FunctionParameterCount: i32, HasReturn: BOOL, Has10Level9VertexShader: BOOL, @@ -5542,8 +5543,8 @@ FUNCTION_DESC :: struct { } PARAMETER_DESC :: struct { - Name: cstring, - SemanticName: cstring, + Name: LPCSTR, + SemanticName: LPCSTR, Type: SHADER_VARIABLE_TYPE, Class: SHADER_VARIABLE_CLASS, Rows: u32, @@ -5565,8 +5566,8 @@ IShaderReflectionType :: struct { IShaderReflectionType_VTable :: struct { GetDesc: proc "system" (this: ^IShaderReflectionType, pDesc: ^SHADER_TYPE_DESC) -> HRESULT, GetMemberTypeByIndex: proc "system" (this: ^IShaderReflectionType, Index: u32) -> ^IShaderReflectionType, - GetMemberTypeByName: proc "system" (this: ^IShaderReflectionType, Name: cstring) -> ^IShaderReflectionType, - GetMemberTypeName: proc "system" (this: ^IShaderReflectionType, Index: u32) -> cstring, + GetMemberTypeByName: proc "system" (this: ^IShaderReflectionType, Name: LPCSTR) -> ^IShaderReflectionType, + GetMemberTypeName: proc "system" (this: ^IShaderReflectionType, Index: u32) -> LPCSTR, IsEqual: proc "system" (this: ^IShaderReflectionType, pType: ^IShaderReflectionType) -> HRESULT, GetSubType: proc "system" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, GetBaseClass: proc "system" (this: ^IShaderReflectionType) -> ^IShaderReflectionType, @@ -5596,7 +5597,7 @@ IShaderReflectionConstantBuffer :: struct { IShaderReflectionConstantBuffer_VTable :: struct { GetDesc: proc "system" (this: ^IShaderReflectionConstantBuffer, pDesc: ^SHADER_BUFFER_DESC) -> HRESULT, GetVariableByIndex: proc "system" (this: ^IShaderReflectionConstantBuffer, Index: u32) -> ^IShaderReflectionVariable, - GetVariableByName: proc "system" (this: ^IShaderReflectionConstantBuffer, Name: cstring) -> ^IShaderReflectionVariable, + GetVariableByName: proc "system" (this: ^IShaderReflectionConstantBuffer, Name: LPCSTR) -> ^IShaderReflectionVariable, } IShaderReflection_UUID_STRING :: "5A58797D-A72C-478D-8BA2-EFC6B0EFE88E" @@ -5609,13 +5610,13 @@ IShaderReflection_VTable :: struct { using iunknown_vtable: IUnknown_VTable, GetDesc: proc "system" (this: ^IShaderReflection, pDesc: ^SHADER_DESC) -> HRESULT, GetConstantBufferByIndex: proc "system" (this: ^IShaderReflection, Index: u32) -> ^IShaderReflectionConstantBuffer, - GetConstantBufferByName: proc "system" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "system" (this: ^IShaderReflection, Name: LPCSTR) -> ^IShaderReflectionConstantBuffer, GetResourceBindingDesc: proc "system" (this: ^IShaderReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, GetInputParameterDesc: proc "system" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, GetOutputParameterDesc: proc "system" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, GetPatchConstantParameterDesc: proc "system" (this: ^IShaderReflection, ParameterIndex: u32, pDesc: ^SIGNATURE_PARAMETER_DESC) -> HRESULT, - GetVariableByName: proc "system" (this: ^IShaderReflection, Name: cstring) -> ^IShaderReflectionVariable, - GetResourceBindingDescByName: proc "system" (this: ^IShaderReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetVariableByName: proc "system" (this: ^IShaderReflection, Name: LPCSTR) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "system" (this: ^IShaderReflection, Name: LPCSTR, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, GetMovInstructionCount: proc "system" (this: ^IShaderReflection) -> u32, GetMovcInstructionCount: proc "system" (this: ^IShaderReflection) -> u32, GetConversionInstructionCount: proc "system" (this: ^IShaderReflection) -> u32, @@ -5648,10 +5649,10 @@ IFunctionReflection :: struct { IFunctionReflection_VTable :: struct { GetDesc: proc "system" (this: ^IFunctionReflection, pDesc: ^FUNCTION_DESC) -> HRESULT, GetConstantBufferByIndex: proc "system" (this: ^IFunctionReflection, BufferIndex: u32) -> ^IShaderReflectionConstantBuffer, - GetConstantBufferByName: proc "system" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionConstantBuffer, + GetConstantBufferByName: proc "system" (this: ^IFunctionReflection, Name: LPCSTR) -> ^IShaderReflectionConstantBuffer, GetResourceBindingDesc: proc "system" (this: ^IFunctionReflection, ResourceIndex: u32, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, - GetVariableByName: proc "system" (this: ^IFunctionReflection, Name: cstring) -> ^IShaderReflectionVariable, - GetResourceBindingDescByName: proc "system" (this: ^IFunctionReflection, Name: cstring, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, + GetVariableByName: proc "system" (this: ^IFunctionReflection, Name: LPCSTR) -> ^IShaderReflectionVariable, + GetResourceBindingDescByName: proc "system" (this: ^IFunctionReflection, Name: LPCSTR, pDesc: ^SHADER_INPUT_BIND_DESC) -> HRESULT, GetFunctionParameter: proc "system" (this: ^IFunctionReflection, ParameterIndex: i32) -> ^IFunctionParameterReflection, } diff --git a/vendor/directx/d3d_compiler/d3d_compiler.odin b/vendor/directx/d3d_compiler/d3d_compiler.odin index 6f9f3fe89..17a835f23 100644 --- a/vendor/directx/d3d_compiler/d3d_compiler.odin +++ b/vendor/directx/d3d_compiler/d3d_compiler.odin @@ -2,6 +2,7 @@ package directx_d3d_compiler foreign import d3dcompiler "d3dcompiler_47.lib" +import win32 "core:sys/windows" D3DCOMPILER_DLL_A :: "d3dcompiler_47.dll" COMPILER_VERSION :: 47 @@ -16,19 +17,22 @@ HRESULT :: dxgi.HRESULT IUnknown :: dxgi.IUnknown IUnknown_VTable :: dxgi.IUnknown_VTable +LPCSTR :: win32.LPCSTR +LPCWSTR :: win32.LPCWSTR + @(default_calling_convention="system", link_prefix="D3D") foreign d3dcompiler { - ReadFileToBlob :: proc(pFileName: [^]u16, ppContents: ^^ID3DBlob) -> HRESULT --- - WriteBlobToFile :: proc(pBlob: ^ID3DBlob, pFileName: [^]u16, bOverwrite: BOOL) -> HRESULT --- - Compile :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: cstring, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: cstring, pTarget: cstring, Flags1: u32, Flags2: u32, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- - Compile2 :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: cstring, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: cstring, pTarget: cstring, Flags1: u32, Flags2: u32, SecondaryDataFlags: u32, pSecondaryData: rawptr, SecondaryDataSize: SIZE_T, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- - CompileFromFile :: proc(pFileName: [^]u16, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: cstring, pTarget: cstring, Flags1: u32, Flags2: u32, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- - Preprocess :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: cstring, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, ppCodeText: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + ReadFileToBlob :: proc(pFileName: LPCWSTR, ppContents: ^^ID3DBlob) -> HRESULT --- + WriteBlobToFile :: proc(pBlob: ^ID3DBlob, pFileName: LPCWSTR, bOverwrite: BOOL) -> HRESULT --- + Compile :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: LPCSTR, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: LPCSTR, pTarget: LPCSTR, Flags1: u32, Flags2: u32, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + Compile2 :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: LPCSTR, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: LPCSTR, pTarget: LPCSTR, Flags1: u32, Flags2: u32, SecondaryDataFlags: u32, pSecondaryData: rawptr, SecondaryDataSize: SIZE_T, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + CompileFromFile :: proc(pFileName: LPCWSTR, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, pEntrypoint: LPCSTR, pTarget: LPCSTR, Flags1: u32, Flags2: u32, ppCode: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- + Preprocess :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pSourceName: LPCSTR, pDefines: ^SHADER_MACRO, pInclude: ^ID3DInclude, ppCodeText: ^^ID3DBlob, ppErrorMsgs: ^^ID3DBlob) -> HRESULT --- GetDebugInfo :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, ppDebugInfo: ^^ID3DBlob) -> HRESULT --- Reflect :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, pInterface: ^IID, ppReflector: ^rawptr) -> HRESULT --- ReflectLibrary :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, riid: ^IID, ppReflector: ^rawptr) -> HRESULT --- - Disassemble :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, szComments: cstring, ppDisassembly: ^^ID3DBlob) -> HRESULT --- - DisassembleRegion :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, szComments: cstring, StartByteOffset: SIZE_T, NumInsts: SIZE_T, pFinishByteOffset: ^SIZE_T, ppDisassembly: ^^ID3DBlob) -> HRESULT --- + Disassemble :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, szComments: LPCSTR, ppDisassembly: ^^ID3DBlob) -> HRESULT --- + DisassembleRegion :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, szComments: LPCSTR, StartByteOffset: SIZE_T, NumInsts: SIZE_T, pFinishByteOffset: ^SIZE_T, ppDisassembly: ^^ID3DBlob) -> HRESULT --- CreateLinker :: proc(ppLinker: ^^ID3D11Linker) -> HRESULT --- LoadModule :: proc(pSrcData: rawptr, cbSrcDataSize: SIZE_T, ppModule: ^^ID3D11Module) -> HRESULT --- GetTraceInstructionOffsets :: proc(pSrcData: rawptr, SrcDataSize: SIZE_T, Flags: u32, StartInstIndex: SIZE_T, NumInsts: SIZE_T, pOffsets: ^SIZE_T, pTotalInsts: ^SIZE_T) -> HRESULT --- @@ -113,8 +117,8 @@ GET_INST_OFFSETS_INCLUDE_NON_EXECUTABLE :: 0x00000001 COMPRESS_SHADER_KEEP_ALL_PARTS :: 0x00000001 SHADER_MACRO :: struct { - Name: cstring, - Definition: cstring, + Name: LPCSTR, + Definition: LPCSTR, } ID3D10Blob_UUID_STRING :: "8BA5FB08-5195-40E2-AC58-0D989C3A0102" @@ -146,7 +150,7 @@ ID3DInclude :: struct { vtable: ^ID3DInclude_VTable, } ID3DInclude_VTable :: struct { - Open: proc "system" (this: ^ID3DInclude, IncludeType: INCLUDE_TYPE, pFileName: cstring, pParentData: rawptr, ppData: ^rawptr, pBytes: ^u32) -> HRESULT, + Open: proc "system" (this: ^ID3DInclude, IncludeType: INCLUDE_TYPE, pFileName: LPCSTR, pParentData: rawptr, ppData: ^rawptr, pBytes: ^u32) -> HRESULT, Close: proc "system" (this: ^ID3DInclude, pData: rawptr) -> HRESULT, } @@ -160,7 +164,7 @@ ID3D11Module :: struct #raw_union { } ID3D11Module_VTable :: struct { using iunknown_vtable: IUnknown_VTable, - CreateInstance: proc "system" (this: ^ID3D11Module, pNamespace: cstring, ppModuleInstance: ^^ID3D11ModuleInstance) -> HRESULT, + CreateInstance: proc "system" (this: ^ID3D11Module, pNamespace: LPCSTR, ppModuleInstance: ^^ID3D11ModuleInstance) -> HRESULT, } @@ -171,15 +175,15 @@ ID3D11ModuleInstance :: struct #raw_union { ID3D11ModuleInstance_VTable :: struct { using iunknown_vtable: IUnknown_VTable, BindConstantBuffer: proc "system" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, cbDstOffset: u32) -> HRESULT, - BindConstantBufferByName: proc "system" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, cbDstOffset: u32) -> HRESULT, + BindConstantBufferByName: proc "system" (this: ^ID3D11ModuleInstance, pName: LPCSTR, uDstSlot: u32, cbDstOffset: u32) -> HRESULT, BindResource: proc "system" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, uCount: u32) -> HRESULT, - BindResourceByName: proc "system" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, uCount: u32) -> HRESULT, + BindResourceByName: proc "system" (this: ^ID3D11ModuleInstance, pName: LPCSTR, uDstSlot: u32, uCount: u32) -> HRESULT, BindSampler: proc "system" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, uCount: u32) -> HRESULT, - BindSamplerByName: proc "system" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, uCount: u32) -> HRESULT, + BindSamplerByName: proc "system" (this: ^ID3D11ModuleInstance, pName: LPCSTR, uDstSlot: u32, uCount: u32) -> HRESULT, BindUnorderedAccessView: proc "system" (this: ^ID3D11ModuleInstance, uSrcSlot: u32, uDstSlot: u32, uCount: u32) -> HRESULT, - BindUnorderedAccessViewByName: proc "system" (this: ^ID3D11ModuleInstance, pName: cstring, uDstSlot: u32, uCount: u32) -> HRESULT, + BindUnorderedAccessViewByName: proc "system" (this: ^ID3D11ModuleInstance, pName: LPCSTR, uDstSlot: u32, uCount: u32) -> HRESULT, BindResourceAsUnorderedAccessView: proc "system" (this: ^ID3D11ModuleInstance, uSrcSrvSlot: u32, uDstUavSlot: u32, uCount: u32) -> HRESULT, - BindResourceAsUnorderedAccessViewByName: proc "system" (this: ^ID3D11ModuleInstance, pSrvName: cstring, uDstUavSlot: u32, uCount: u32) -> HRESULT, + BindResourceAsUnorderedAccessViewByName: proc "system" (this: ^ID3D11ModuleInstance, pSrvName: LPCSTR, uDstUavSlot: u32, uCount: u32) -> HRESULT, } @@ -189,15 +193,15 @@ ID3D11Linker :: struct #raw_union { } ID3D11Linker_VTable :: struct { using iunknown_vtable: IUnknown_VTable, - Link: proc "system" (this: ^ID3D11Linker, pEntry: ^ID3D11ModuleInstance, pEntryName: cstring, pTargetName: cstring, uFlags: u32, ppShaderBlob: ^^ID3DBlob, ppErrorBuffer: ^^ID3DBlob) -> HRESULT, + Link: proc "system" (this: ^ID3D11Linker, pEntry: ^ID3D11ModuleInstance, pEntryName: LPCSTR, pTargetName: LPCSTR, uFlags: u32, ppShaderBlob: ^^ID3DBlob, ppErrorBuffer: ^^ID3DBlob) -> HRESULT, UseLibrary: proc "system" (this: ^ID3D11Linker, pLibraryMI: ^ID3D11ModuleInstance) -> HRESULT, AddClipPlaneFromCBuffer: proc "system" (this: ^ID3D11Linker, uCBufferSlot: u32, uCBufferEntry: u32) -> HRESULT, } -pD3DCompile :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: cstring, a3: ^SHADER_MACRO, a4: ^ID3DInclude, a5: cstring, a6: cstring, a7: u32, a8: u32, a9: ^^ID3DBlob, a10: ^^ID3DBlob) -> HRESULT -pD3DPreprocess :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: cstring, a3: ^SHADER_MACRO, a4: ^ID3DInclude, a5: ^^ID3DBlob, a6: ^^ID3DBlob) -> HRESULT -pD3DDisassemble :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: u32, a3: cstring, a4: ^^ID3DBlob) -> HRESULT +pD3DCompile :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: LPCSTR, a3: ^SHADER_MACRO, a4: ^ID3DInclude, a5: LPCSTR, a6: LPCSTR, a7: u32, a8: u32, a9: ^^ID3DBlob, a10: ^^ID3DBlob) -> HRESULT +pD3DPreprocess :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: LPCSTR, a3: ^SHADER_MACRO, a4: ^ID3DInclude, a5: ^^ID3DBlob, a6: ^^ID3DBlob) -> HRESULT +pD3DDisassemble :: #type proc "c" (a0: rawptr, a1: SIZE_T, a2: u32, a3: LPCSTR, a4: ^^ID3DBlob) -> HRESULT D3DCOMPILER_STRIP_FLAGS :: distinct bit_set[D3DCOMPILER_STRIP_FLAG; u32] D3DCOMPILER_STRIP_FLAG :: enum u32 { From ed52393c7c4b13781574416da8dbb47398b0abf3 Mon Sep 17 00:00:00 2001 From: A1029384756 Date: Fri, 2 Jan 2026 13:48:23 -0500 Subject: [PATCH 065/212] [vendor/sdl3] update to sdl 3.4.0 [vendor/sdl3] updated lib files [vendor/sdl3] typo [vendor/sdl3] typo [vendor/sdl3] spacing [vendor/sdl3] whitespace [vendor/sdl3] whitespace --- vendor/sdl3/SDL3.dll | Bin 2462720 -> 2788352 bytes vendor/sdl3/SDL3.lib | Bin 269054 -> 283572 bytes vendor/sdl3/include/SDL.h | 3 +- vendor/sdl3/include/SDL_assert.h | 47 +- vendor/sdl3/include/SDL_atomic.h | 18 + vendor/sdl3/include/SDL_audio.h | 179 +++++++- vendor/sdl3/include/SDL_begin_code.h | 75 +++- vendor/sdl3/include/SDL_camera.h | 28 +- vendor/sdl3/include/SDL_clipboard.h | 36 +- vendor/sdl3/include/SDL_cpuinfo.h | 21 + vendor/sdl3/include/SDL_dialog.h | 10 +- vendor/sdl3/include/SDL_dlopennote.h | 234 ++++++++++ vendor/sdl3/include/SDL_endian.h | 8 +- vendor/sdl3/include/SDL_events.h | 91 +++- vendor/sdl3/include/SDL_filesystem.h | 37 +- vendor/sdl3/include/SDL_gamepad.h | 171 +++++++- vendor/sdl3/include/SDL_gpu.h | 475 +++++++++++++++++--- vendor/sdl3/include/SDL_haptic.h | 72 +-- vendor/sdl3/include/SDL_hidapi.h | 19 + vendor/sdl3/include/SDL_hints.h | 405 +++++++++++++++-- vendor/sdl3/include/SDL_init.h | 2 +- vendor/sdl3/include/SDL_intrin.h | 7 +- vendor/sdl3/include/SDL_iostream.h | 149 ++++--- vendor/sdl3/include/SDL_joystick.h | 187 +++++++- vendor/sdl3/include/SDL_keyboard.h | 3 +- vendor/sdl3/include/SDL_keycode.h | 8 +- vendor/sdl3/include/SDL_log.h | 4 +- vendor/sdl3/include/SDL_main.h | 48 +- vendor/sdl3/include/SDL_mouse.h | 144 +++++- vendor/sdl3/include/SDL_mutex.h | 8 +- vendor/sdl3/include/SDL_pen.h | 95 +++- vendor/sdl3/include/SDL_pixels.h | 12 +- vendor/sdl3/include/SDL_platform_defines.h | 27 +- vendor/sdl3/include/SDL_power.h | 4 +- vendor/sdl3/include/SDL_process.h | 11 + vendor/sdl3/include/SDL_properties.h | 31 +- vendor/sdl3/include/SDL_rect.h | 17 +- vendor/sdl3/include/SDL_render.h | 481 ++++++++++++++++++--- vendor/sdl3/include/SDL_revision.h | 39 +- vendor/sdl3/include/SDL_scancode.h | 2 +- vendor/sdl3/include/SDL_sensor.h | 3 +- vendor/sdl3/include/SDL_stdinc.h | 73 +++- vendor/sdl3/include/SDL_storage.h | 4 + vendor/sdl3/include/SDL_surface.h | 300 +++++++++++-- vendor/sdl3/include/SDL_system.h | 4 +- vendor/sdl3/include/SDL_test_common.h | 4 + vendor/sdl3/include/SDL_test_compare.h | 1 + vendor/sdl3/include/SDL_test_log.h | 8 + vendor/sdl3/include/SDL_thread.h | 3 +- vendor/sdl3/include/SDL_timer.h | 12 +- vendor/sdl3/include/SDL_version.h | 13 +- vendor/sdl3/include/SDL_video.h | 253 +++++++++-- vendor/sdl3/include/SDL_vulkan.h | 6 +- vendor/sdl3/sdl3_atomic.odin | 3 +- vendor/sdl3/sdl3_audio.odin | 11 +- vendor/sdl3/sdl3_camera.odin | 10 +- vendor/sdl3/sdl3_cpuinfo.odin | 3 +- vendor/sdl3/sdl3_events.odin | 65 ++- vendor/sdl3/sdl3_gpu.odin | 57 ++- vendor/sdl3/sdl3_hidapi.odin | 4 +- vendor/sdl3/sdl3_hints.odin | 20 +- vendor/sdl3/sdl3_iostream.odin | 1 + vendor/sdl3/sdl3_mouse.odin | 11 +- vendor/sdl3/sdl3_pen.odin | 29 +- vendor/sdl3/sdl3_pixels.odin | 6 +- vendor/sdl3/sdl3_process.odin | 4 +- vendor/sdl3/sdl3_render.odin | 102 ++++- vendor/sdl3/sdl3_surface.odin | 22 +- vendor/sdl3/sdl3_video.odin | 26 +- 69 files changed, 3659 insertions(+), 607 deletions(-) create mode 100644 vendor/sdl3/include/SDL_dlopennote.h diff --git a/vendor/sdl3/SDL3.dll b/vendor/sdl3/SDL3.dll index 63f5b22ecbe711493313acd305ed1b8dd36b59dd..510825b26ac432445d6b5bc39d54d4bd115132ed 100644 GIT binary patch literal 2788352 zcmeZ`n!v!!z`(%5z`*eTKLf)K1_*F~PO9$tq)MrsJ{QAk` zXqMDxQLmpojoz60EK2mv)9Be?`cd>;F#R}sGg$sn^hz-OJh~OE|9RBIlxI;aZyrZa zO9j!7qD#T_v*^iSS~3bmPf9HW(=2bEfW?C{lQTeeL!HAA;L5;|(#Fm(M zmjROx5iu}QXP7XPf#JYub%qZhGcRZ{JOD+KfF{F~^{n%QK+?uAL6%_xH&&%!LA{dHiV_9}h6@F<5C?($4zeFC3n3I37!ve~QW8rN z85qoxxfnoZGNf=ZFqFwc6hKJ_1_lQ`h%yER9*`q67#J=wFfiOwhpK>34h#$j^a>yf z!G09bWMJ69$iT2h1EK&*g3U`SC`nApNo4>TcR&jixC{(2T2K`b3T$3caZxe@10?J& zXh9+-4nv)TUQudJeli0%EJ0z)0J1U#L!A@E+N_h0L>On*mJbGE3AxsUAURDbT)4-#bRTsjv*uZ%B3>bJcztQmM z<-OW1%kVZ`=I`7 zVPIg`1}2!kW!=cbz~I^G21-3< zTwo?B_59`sGeN0m0y~%qNP~M|X^h0dk~5QWQA-b$b@PcpN3j(0YJ> z3R?Pe2z3l`4E5;EQQ7Iy_+|kE0|S5f0iW(i{DMp#-HaZ+q5Q7KZ+$v*`F*+_931~& zXg$E+(ayxc;L+{N@6mdazom+afx)FSx7?#QwA`bc(Wi5dN&^D}gHLw@2O|RmSVtv? zWB1Wc*YelQ-LB=X-G4y|OAlm5=Ny$2pa|&PqA~+a?@^fm(%ZR3r32&=c?YmPKE1x| zKApMjKE1B>E}gmcj@{QmHg!(`Rltt_FM-^&5tLB6ec8coTEfV{;9{9u&)+hUk%7Ud zGxxtoZ|Hxpo(6~>us;eQdj5m;B!l#H=B9h}hNgp6Iw&AJJ{{!vbjR+yAjfMlGBEJV zgS-iH-+!N8*Y7@^x!=1lgEe|+IR3u~a?=lxpSpd&gUx>p<}mv7x{7=Bin?~lGWc|R z1VB|D1WERa?(dLg@aXjwe^K^;1r%8=D?#GjzTbU%UEh23hCX-c%mv~1FH-p#7`jWJ zw|?VqX+@}c?$eq3+@n`C9Ar*6qffVogX8~;KHa6yJ-h#T9DJ|PdY~e*^?ymIYwNd? z01t@4APr_{8eE@ycAxM#_!6W+qxEEoifikE5_y+S7Zn4S?(;6)uJ60Ab^54icy^z0 z=`2xEc%do_P7>ciX{I|s;Qyunhpl7N`J3+k`~Tmg+ZPn}9$;|~P#kqLLO729kGojc zmh(4>{rmslryCOM9^H^s;L#0D72VKO0!nc(oj%==WaiO$1e9hSV;y5+!G$WQxE^>;xq^0oI;r zDhwXo>^{9NDheLQT~q=t#=#n;B27W=1VE1`=#8t#Yl?Hh9iar7x3X%i`dh3A- zCy(wBl>m@Q4&6Q~3LXbvDf}1h*`>h%vamwMqnq8MS5&7>mcgYP?85Ut-5o0!KzZgO zNT8Fg`!Fa|dw6u0s6==)A2EnOeCCWpFt{@C=swhaOO=6v;e${2M_UF41_l1sW>A*u zW&~N7;nA6+lHk!R`nOeB~0A8Ye7dCzV(kSi2AOH?X6 zdPR4%AO{I3`W#vhR77{Xs3?Hk!d)H!a?1snTlRx(cia!Q-D*GBTI24&ul4tXU8k`h z>{iA7pw{YZsr_IV2=50wl4n03$RVuVznh=KT%pogqoUx^E9!*e3ZL#8NcCXh(Ve4` z(0ZUkquWJA1r*N`%`aF=ctDXYx*OCLdM&aW>>}RX;D~2C_*vI|z`!cOz`!HHz#uHaz~Cyuz#s*cgQ`IB zMhOOn9TE%-`z1g%c#I0TypRCp1BFn>FvoC@?l&IIZwfrR8!s?2Ft{53_vx(t;L&~4 zqx+O^_Xm&ePafSB96p^D954Rmh%>YvD3Jl@<8!os z(HnXLqy{YS0g-P#P$>ctbL_qkDGy)Xh15tle0p6U_;l93@aPr&-6+f8(^(7RUU2EG zRdDI7Jpd}zx;envmA|7GQvN^i>Gf6c>8w5B)9ZQx+++c(3JCD%bv@wG>7t_H(d&8w z#83cNnU%sG-M$aNR)b69m!RHJV;zgHSAe@qx9@>cPS@^(E}gy#uUTBWT@^gKLoaxA zpL?+f;=%{rHy}m5!v9Mkb08dnm%kYp7@&smw}6UNk8WR(Z$Lg#Yy_3Mj6P78SLAwh z`@Zn$bye`_1(^-1t|Y*I0z2&mlGBzlFfercDs;#3ytv~m$N+KAIgpe1*B^H2KGErV z;Ds{8VJ}b}_5$j#*QpSP_#SY91knk&r2!I<@L+Z9zW>?*>Uh);;P>cm1|9v%A{Dv-`1Qyki`w2J>h=SrQctYVLy*Tqnp{keH)KHz$bZgn9@R>|i%}bbD~1 zOLT*Dy>QeQWbil+Rs^oZnvW<%9|qNr9H80(lITH|q=IAj4ae@69^Jn@x<9_y{fdRb zqx(en)fWq$1Q|R!-6TA^Pk6K*C{b^{T`2%Av9;ZJ_}3rynBl?v!>9YGNB8v?VS%y? z;A)~XP5@MA8Gs5I3vkH?>X?8kE=Y6qj04zj|3z~)YcP0p^R{l*VE8YpUja%PydIl1 z7>sXwbjs#~MI|AkQXrL`vf5xVR*+byEE`0O9YS$HC_xA%1fhf>ln8`Ug;0DT3LFkl z=bUi>hk)^ak6s@Y3rM!|u{?Uk{&N)`hho*NRqw zDCF2{Jy6L9c3MZhEW^u$|KJv@hexkyLM^C~ei&SicAS7jHC%BsNUC+@ac8^VSEV`(4O7*{);vt>&^w~z6xqQ_xd{g7xhDy zYXr&d1j%*#I{5Umc7kHMSM*agD8dF2?lADhG-P==oP&U zvL)GFfS^Vvkj6)U!J+@d)%bu68j2_*-A0P=*;QysfjG#(zxhQB{4%8%vrZ8A(a^{Rjx0l3Abvr@u;LVvcXF$1M zA~XzC$~Zt96dv6ljo*4S9t4%89^Dq8!Z_o_lP+e4)&r&C9^LG&#wS6ocUR*BQ174j z=??Jl=yg%a09D@xAXWlMmj;Lnsm&{FJuGunGD^k2xu_&Cm+E`;_JNFl(F-=VWTgkF z`3Cb>rz6J(Mo=+b;L&`rMOi^AJ8M(|K*3c3Rt_4h;&15&$+zC-Z)pNCy7@pw zWCWpsGgU#pDa1E`F(r$N$3~&Bp~int$^ZJ#st_>N7DwNRWd9Ky_#Y zXjlj2Gy_m8!7=8r2lH*u?(>e_E_XN_JJ}q&L+MAI|4z2or;y?f!~~817$5NI z^-(bZr4|Q}YaKxScyOr}kO9e6?9gFJP&hk40?{}WRLX-YnO;$QP;B<{8dQPGc^+3# zx8TKRB~U5m1L|7e_%Hgk6qGW+{Z&v$05QO6d;nBWRLa7}ODwrc1U&v9@Mu0H;L-ep zujsw;fx{lm2RwRtKY^xJwpu`!Y!g1KK`v6#d_X&_vZm>4~RyR=V zzV&2@2&!?cj@`Fjb2@e(Jotlyf7=a^4qk|vC9IC!hd@#Xz)}aSZwTM_>BPA9sOY{}g}w!+-z(^Xp$McX#Y|W&wo^Kgi`wrPAF_ zNL>C_P%UG80F)3p4tIO8fWwy`92QKD{8J7&b{~Ssfk{w-!+;ulpz#W5TlPf~J1AG4 zejz0SqMao?x=;VV&~l)Z!=wB3i>aW&)b7(SbOjk0S`L)n2Z?P|V1NvlD?}qq_2>)% z_1An5h=@<_u%#4|V!I58p4W#&!Bfo&3z$Zt3K@S0s#v>qu9OE2gqYwMGek)b>=yo*V7hnJ@ z&pY7CAAOrY`oL!w{Yn*rG*SO%)natDu!=y%kQJ6L<{~Bj-7e-J%S1rA8e-K+h*c**R-NS6IR2SG=HQDXW`Yd-`X9;! zyIsr$_%%LsItzewb~=lA{6Ff^d|blQ`h88)Ypzajm^i-%Bu#>bQbEZSH14_qTq#47 zaW^Dk^J_rUEOHJ3m(3soJht7<$iM*Z*LgJW1ht$PJi2f4w}6M&J9AVFU~Qew5~MDc z!wbbGW(JS$?gNYrpdrfElO=q{mtN>Jf?8#(L4u$%fR~wp!NFqn7Dfh!QZLKZpvllu zCy(ykV6$8Qmxy|FJ8O7!pZ4e$|9`=wyI#Pf^?&JWkM7+IKy3~@3QqqQbzG{!(A|9k zq_A@}$k{LAuM2=&1e$|*vDjZ6#D>gEtOg5B010)j1`G9W28CJoUyp9S7Zv{E4F8XN z^p;69|K})r3#zRhJbJr93P9Djh4CfF9iYPH#d!}=jt<{nS}5I z9-XT}g2o^Q*lXRVJvvu+K%55lO6O|ObOT5bG)^t(9OBXGobsYi8dR2^ejx@P`UM3w zO6T?rto-%tKH=GY&N?QWzesaI4YXw!}-Ucs3<-rV&7d&9bX;7yz`sIH) zcsmFb*B}h8k3p?j1#lbcrbl-mhiCUs&+e0;!n{P#qqAB7G$RF?i~{$8K~;mn21by9 zpkV-?WJey4WJiu}!R}K&{Ob=izVr(-GAv1Me96G@pP?kW`6YKrSmVzROe!iReyx{E zoVpKz>ZcE&`bnU~r14i|XrxhzQsb}C$gs!~sm5QCVUeLFLXE!y3=9oQxWILgC;$2b zhrz=UU>5(jLtxso`+&#A7oN-q5VgsfGaku-93I__E}bkBHZcBoCM>O?j4zc=YlvFOg+<5wspUn+qCM>E_j5tib?k$ATt<8D1Q11BEBA++qy|P>ajL zqx5rQ#mFyfq*r|E~k7a8a=Ug;w<87yRJt21$E;1_5ls`XL{vqz_qN9*lURgYd#&Js{xnm4almf?lx zI&eTh<{v>bk>GfL5%mB6f6L9F1YWNO%F0Ec)>tp^V~`dxtXe#JCxaG)Fb)C3vZCdPIm*)q`iqpH~))U zAcfuj94`t%GTrB2WJ(Ky+C|+lptg683V41f0OTuB?;!qg>s$W5IiO0jmn9d}r}FH+ z?!$c4qx*#C!3WGQ*4ToIAb$g&UfzXY{{MFbje|3IbYFdOSyqt2_%?VZ1QhQ4@bRZ` z1E`|p!ydgn4j#$Je0ohzftWtMHm5wh&v|xVe{s}G5Y&B@?>_3;eO>#oXZJae89u!% z4q!ViY-Jh#pZ+v=eQc5^yuc@IbVapr~CMe#B~A; zEeA@Xz{%gEm-iq@WlS|Q!%ol?&I>0gK~M%Ri961~Ai}`V?Vr=>!Qye;0W`Y;8j9?i zufgEa>B!;H%^MG9vQ~f$um4^V@cLOM5{S96`k_0n2UfcvT&cC=QDac^_ z-=mvX0i=%^st+`V0!eCM5-q)fI+Y6G89jyWN*>4VkB;3hTtE{HH?1o<>a|<{m#{GZ zf6cldBQ6Rq7u>RB+%`mlF;cSvVrlxGY7bEMjET_u7QjfI>y1uL2&)f z1g+lHP+T&+_)y8r&~kvkWeunp z>t$6G2TiwZ2F>hybUI6bW5uJF)k+jB45{9nL5m}9h=D|$HD2^fK%z|II0GZN*YKm; z8yst$1stH>EU4yx(FK+{{Xz)j0?QH=jS_c{Zr(X_H5gv_gR>6nhPj~H&PPSVqtgQv zy$v9Kr|nFTk{Ga(5>Qrx_}w7-FsQUT@(a{=L=^``phu^V3P-48h)46A2%qkUFJeGr z4Xp=CSYH?kGBCV|tp_EF7og0`;n92~0yHgce88tON5ui`V4q&zRck@Xoi+K#|Nq99 ze0o`}RtqqI?8qv8M_n*p2V(K!daI08Il>)ZMS zTp_XL%QC!h+y>J80AyBy(QQ!N1h^Xg2S-##j7o)X>l6N#B2a(BLPmwZC4-TH!L$3! zi`y2Uf~f_(Xv3o$vg)S;)ST$GEyx8;J(Z|f`1GpA%+X)~l?x4a4E!yiMQ5%p|M^?L zgO1gBkYhn6lrXz=Sa@{v>gR$+Kfp<73#i!wUeCel(S7a3S2Iv~Q6l8g z?Q@?4Gz8Lmvh>NzevqQ@1IJucDi}cn2fTf=L3xt(JBaFLxz8`ix(CGU)ZIHD0a2A@vd?GWApFi-U$gy#gIydhKwgo=ewX&_U;>k(SOvv)lA9k(-r8Z@1(++Zn3 z4v$V&j@cRvzOCOpd&?Mif=W^kewU9Pt>5@tzk|zy9&nhwxFrhmHYk+3Q&b8-!P0UQ z93r9zW@#|I1bN(}*H$G5Tw#iWO$U|w{4JoqqKid^L}@X9_yOZf{DQ3aXMwz{`(Ty^ z!)8V(-=|ae#w@UBAA)6hAAzV|-eQPg42ah$dKJQpgHY)ZssKV&f|PVS2!I-Br2-zk zyc0kI&Br-jf~(|ic8_iWk4{k`kZ899$m9GVW-l+u%`dbc2r&E?Wu2wLuz~SqBPfEl z#i&%Y+%8q}ZGBQA=-GY6qnCGH4k-OC6JU7FODwb_t_WewSo+u-Dh9$FBbrf?1M|G?h?@8A~Y|6 zCbxaML75Di=RjE%jKPWTJSaXoV^kzSZ5jj6(5XYqB~S+O04;n{0GC#vwi{^8Bf~z> zuo3^ZU;M71Io}uE-(by{5({vV)d_CXy!b2(DVvlXzTNleej$Cb@gTDZ14AbVw1|RL zEZ~{f?$a-dzy1I3(OjbfDvC-}JWBLEx_Q6P&|rA6ss>bKuyTX_iYTOR&j5v)?iY}f z?O-J!?{&whfU0`%QV_8J!0ponPz$Y_^Tqy3Pz$9SYUqI!NLuZLffn)a{*X}<)ohd36|1UKEVB&A(W@2FI zcCKhWP{;oNM5lAbYfcZ#&7jUrsRq3J1~wklg=+@e)0rUQ(G6z0bS4PAj`HYk23y&B zpj7Hb1hny7;nCR*sW!lpuUSFEmlZzUyFq4qXg7o9x_5&N^k6;#D!D5>yWIsmyUjg1 zn?Y(kJN-F80kFIR6qo<`Tbvjf7`mH5z0B4Fr5Y|4i@_aF`EGZPPB)Hjcb-l+9*=H! z3DB%)x4S^6o50Ic;H0$%Toib8ziD~Hg-}?Iz&U?JMEZ?aI;}%G2%3 z(dnXM;o0pb0V?PX9J}3EKuN6IRiM*FMd1aHu{eWg_dB2N5)}`qp{1e-yN`kFKKsJ$ zpBMuq=&yr^;XJxwJ~-#onJ(ednJ(}`$w!>wGrvHHN`XhOXlRBkL-&anewRTV6z&&c z<)Ad%4C<Z$=RVoHcU-28*Fz$y%<(F=Gu#V@;+3)}V2d8uh0d7Bmvay3l_brd^pD%8MCbU`) zluCN^^75z4GQ8Ne5Y`<5r9b}v|3Ymk$e+C7Q#BY~Sb^2JsDNAKf*!rRKhtCxUW6_&!4XM@H(K*7!?K3>WK(}7fo=TkQoukx^HOu=mtk5D17#(fExxXAou*A2MZra zIc@NQ7i7q8&=^(g|5Dx;`wj~*bpPmV1_^+oK@KDhF0jF277d!u2lpm4K!f0|mrB@< zgYpx@3saB_Aq`7VyHo?T*aQ><4v<<9G*bsEz!iLwD=a*F;~Bkrd8$2`&wCtv$oztn z7nIq-VejVA9ctjwD|5rYm!;mL`!u+F7pX7HV0_ZG^?#iRXaGy*`2T|*&4(pC{vYtP zK3?v54F0co{GhH5_4hd*2JJ^AsK!${u zOSfkZX!xf4mQOFMWHKntUjX?(P6y;P(1J4s=o|r9y@5yTNsnGo|CrzP<_l2U4b&hP z^XTP$n8E6G6p8iHZlPu^a#@gd<)smxAh2-kOOT3@_YsnHfBi zKlt>TYz2A4v)7O1#b<7i)u2!*WikHtTGykS*I*)|7+Lc6Ke*|waNI=&+^l$UX@LNP z<8c-{kO>~$yuT-CFub@|0xB&*%R9RvfzW9T8lwQM*)V{3$fKLJa)Jh8T4e_)KB0LH z6h5FxC zFI_=njJ+M8CWG;%7kxRPzBa4=1c*lrK>aii&}wT|l?kAR%W02JX9bULRyh!_(^=z1 z?lVxgF9fu-@brJt=lvSs4j*Xl!K3v*XrkJ{gWvTyzW@WjpmWG4e$X@uzo2&tzkrL1 z0l%QL%_n{V9~FmB{DR&-%{3|p450SP=@+2H0_r$|D#7EV_l|NjMR0;reM3?5c)Jy0qK z((3pURHmGMaq|tx54?*KWf@-7&K6*JZ32?r3=-`={bDzmKJ3vwM+H2f+js;N(x6)9 z^o##5ASO%)tAQvmKHvdU0*W7pU`J4GW#Q887~=t&y*yAS*zK9nda{noqc_;ar`Ox# zwU|q{vkQ#p(&-%I*v;ALo#4_P9OBw~sg%Q|JJ`mhGdQHVI)kBbNvIiS-y z!zWqF)%ZUs4@bCK-zXJywB#)1@#x(QYD~Cv+P&8EOlE{~J-aV^B%k!)Uw^?f`G5!i z`V$`3r^-2wvw>Q>ui1{Xf!0L0bUWKPcAs{&KIGAvqY?nh4GH{H4}da+K}R#FE#zu^ zvOCzr1+>KUMWTr~gGVR0kp^Bs0ZK~U!49Bgwk%$pp_{GsKuNNT#cq(klBk0(O6WdFfh3AyByq^0P0$}Ufk&dlH+$h>DtXA(Jdm?%_I3@h8fr* zP-*~MbO$uG1+mCBUYx5L4noX4GIyE0jw`>K?J}-0akGmA^;8zu)q$8060Lv0?Q!+;4lFTOoIr3 zg9R+m3K0N@3|OE9BmkN7fKPWk&2Q6bzl9;b_R@`6qCD>Jop;WUvG{ zU~*I}Uc7$}D!JBA043AzSOJgL+a*aJmc}J~9^J1!x}!k?rSD(+H|z&xL55P5=KY|8 zfuU5|quX7>qx%|YUFrpo<8GjZQ4Gi3K!c179^K9Y9><*_qoSRz0v_G%pstcfr?Y@Z z=X@};`}~WgAe%w{2Sq3HLQjWa=r$scZeEEl4TcxHb3q}-%L59cZdqB7&C`0VEP=&t5?@im_fG#2d9%?w^`!ykSCym&LGsq|4Br?;Z8#2ca-G2f~$)M66Hs9vaeRCJ6Urtv3e>a9MM zzhyOOkvC-Cju$#_$J+dpyELfV&Bgc<|9UqM&_ej+1267t%QAHPx$v*|^XNY4k$iHd z2lILDL%Trz@{2!wk`KJtr!C9yvI}I~Pw+fmNaIh>$k4EoZH+&{^LzY0-G@Ov*7Gl> zXv;FZP6nm$IFDZM{~pZ;m^==?Wb*ibkYC<`0kK~8xWm5&h6V86S&@vKsk8Vh4bh=7(hq-iy3UvF~faa)?S00se@^3rH zzy46Cs{puN25G%^W6sGyBMY=1u)7f)$d*nLCF~ymRj;%mHSXZ^wV?4F$O6F^r;|YA zIHekC{CVC1Y5aN4KA-uYo&3!I?7%1fxD%iFBY86;Wf?ws@avp>pP3Qv$8 zt(W*)zJap|c%ws(iUg>+pa5!=D1a8Qb(Vk{Z@0RCx`IYrMNJ}Q863M$I(EN&v2d>d zgXi%B;B?$8Y8)xc(0$gY`@@Twdjvqkq9qET!47GUUS5kxS%w$RlLQz*B|lhs_qqR< zUuSh+0L^@Lf!6)B9w?FX057u51}PT9P;A?MzV&~Jdh<)h5~b#!j3u(&*FAc9<3NgE zPDD3Zzy;)zV;Apf%0L5ulL{m+lWQJ{}fe@JV)20d4LwjQ|D9xfgp6fyUU6d-RIFhKig9 zsRB){c=U?Chl-gW5nyoP-{u0|g7pb1xagn&gDYsG)G?3ltHvi^B>nsU-x0Jh5mcOa z=YX7!G~J-!829qRHqgvKj0!II|MUc{9tXRB=~j@tK<*EQyWbG(GLT!tp-z~880s#N zm!hD8T*&SM55K%P{+E!`Ot(R{Cxh3A;&LBS__D&?cR36ez7s)V2@T(?VUX~RJqYp# z$j#m15Rq(cIT=)53V_N>iLh|^Von7Y{%wNB|9!h3 z`hu2pg7!gxRvNZkDv>Zg;M*I`=-BYf+LeEsF#nVT%s*UPE|tCjrR)a^f(#zX=RJBe z{(JDRe+gpM1*j>=-|`GJQQLj= z7-%l$I;iD52ekg8S5z__)W<#dLRTI%Pg3dt+Go)#$_y4g|DqhEsQcWDcm+X*h8lza z*8HstL0P<)_i30c!;2k#APdgFaQF-A<-VK_YFTe%^XR_Ua-igd=l zm%SeI8-7ZbDfW6?Zun_b&gRL#_oz1OGN>Mvwo8TMm?NewqIN|9}2{!XCZ6Eg*;JLmjgH56B^}1${u% z!&gAVDqH11b?I?XfeCIAf>yUGfab3qW8&d+kDyW$6kigc_)-9GQ)qtU;Mx5W97{cr zJ;U9%e7ajyKovEpk<>i}JUQmk?aA>%5Ijo*o{v%lZNzE4UBdGJ@@v)?FJwWMgCd}m z9~5a4VCTKu4vLG;6qN)}?bTVMlJNqx{>1~7WgoowA_t1tb3V)uUc3am{Va%iPY%?7 zhpdnCVSeD*eg4I1kP!0&&t4xD#uw*)gJJ@-A)-_SWYan@|NM((zrg`w2O4t$Z7h)s z1#N3DQ8DoB4N+kPc~`?1R5Y9hmsc;!!88BoUgSfyr-SLkpaIqd&98RJpH3GQ3DBC!;84&i?gG#58=&dsm!RP}(11uzh%Cd4_8yRPJerRb#KlG* z_Uu0C(YXg4q%Zc$z=KKv)aC()GgKXDh(7}~wV43wAVz@v5&&9E2I_jWe&g>0bst=f zzd3^Dgc%U)30lBQ`asPx2Yvxp2A}R8$R_aa%b`TqbY+L?cVRx^bEf<+sD%O(Z}24B$V%r($HsO}#xen|_01U$R1 zf*OTypiy(>rvQUTG9*np{yzc>2hab<;3EgkM+JPWKl1nd1gFdMFBZyxlGJ&R?hh}f zfr6PCw13c}H;nPcb&z4;F`N=RpI$dcPtXv|i5CrEyAFdYy9m&1R{|&jWPlPt0D9bj z5}PB~l=Ckve}ZE7^$AdRf|b`LDgxjZ0H}+o=8^oV^-`U@@okUZN)FJH6VS0Fpb;}Z z(9A4oak}-rn&*&pzy_dB9C&>aWPsKIvbLyKG(8AZV%>aEEd?sE_*>e+9s6y}9^IE+ zTMm@idF+IhJC3~$^KB%{bI=_TYCp1RCj$KJ3xU`aDn;(pm;_ zf90eaxays`S5maPr|L|b`;PL;kr}fR6$Hteyw!D}QHn?;%C|f5S1NA;Y z4rqSQSR(49{oSMctY`PN7n{C=#`+I<@VmYMbyy8Nx{rdp)!=P};J5}6jlV#x?P5V+ z&|>jL3=9k%g5XyD;l^JK91IM_N}ix8x+c)%TKA!bNA?F_u<;ydIMvX>*b&GGZq$NQ zGB7d}Yk4;RU@l7PK6LN}56^=RMi7Io;gP+HJx>EjgCk={Akz-e2I9kwzyALhU??~9 zZ2rMgWB^hq#Pb27g9oI%!x2+AQ%4{(cq8~>W8?*Tj>i}n;fJY!+s{WJyJ-S^yH9}j zsdXRn==D%Ae(TXIdL;lf7C9;fC7vGLZVI5WO9h{9Hw~CB(A<5AUUQ9#0#m8FPj{GvN3ZBd z@SzEQ8a~~}V9Ff-Uuro3Zo~1ryo3q9uz=YJP9b3HQ0xY!6BvG(&4_X$&CA=Ud{Dh1 z?9nUg;}4#;$n}%inA$=Aq2TfPC@Y4{VT%Hze!E zzx>q-Y4w5^8(F+q&CbBUzwJiL0sdCdc3TT}{+8w7SUdkh0n}*)m-?l!U8nHnhoAz` zK^!!M&tt&9&BfrqjeZG>O-!lqF~|Q5Ajx2uxuwDU+w45L?>V&mFR`8A(C}Zsgw3Jh ze@v;0NB3b5?PDIzKbT6{8tNFWN`ySR&mCiCcp=UX+NDs!@6ch*zpWb7`f+IaUwQ;& z>>oC;b3x35pFt4~8Y|j%7?hL2Q#6oL6BgRw^_k#s```->23apzhL=BD5aIa+BF+jD zf6yYp@Y0(dB|O37XWgt%E5HZVl=8gjR$yoF=w!VD5aCuK*g;;&(j+T8hHJFX$lP(HWosif>Rf1whnY3dA_C;T<|7e@J-RQvu;v7> zBaMJII3Vsh=+SzqRLY}QG!UZA4Wv!61ym1tfE?w~3YuNC07>$@o&X8G+zfFSNPp|e z3ghOV+{JpJsiR&|Nsw2-6KlOPhdjDj4uPsBju(fNK^|oWg)DS}tylDx4>%OBd&n}p z*whTS4&+fN_Go_N;nB;g3MvGSyQqMtfg!DmURDN>AgEFCf(?|ynvZxKJ_BxmfzQYR zkF0=C21xL2J?Yb%Yv9`b!>9X`FTd+c4^a2{iEC#n11P*e9#??4#24fe4X{gIz6XuJ zbj|@cOgy{qfR<5!W)xn`6alrdK6o_$U@UXy-{xWgORHv}ma;Wyoe88ZkmvFLga`96 z59`B468zgZ8h+}Rur~aRDdl$QPyk6;A1;33(f!-8`+M`Vf4;5X9Qj?p`*#0v_;!r3 zL;zH|{r>@)a|0E9B~mV(sTW?%V+VzyD@deN9MpQ{{Rm34r(dvs1O?tp9nkSP-Jt;< zy{y7aphJCp6Fho(Gk*R5@7wyVv-FBjXXp(NewTwjoxU%8TmO4>x*qW8c8&1mcm3|s z2|B`{^n{CrI;ikH|6-FcsIBb#!sGt|pYG5b9-XcqUbFagrh@jtg4$l7ePX}<{|6Ug z{4LW!G0^S%3m)Ac{vY&6zUa}*bKyn#2T(8Z0ch=PVYlyv){}J+9^Jm6 zO{2z_UUUh9HTZNNgJ|gX{o&bba|N_bJ)RdVDdlk7r2n$? z|9`NXT66yY|L+KLlPv1^p$q>uPezYkPezbr$w!bYO5|NzPL@a+9e6F_c#HwO01f2l zZjhh5Yg8l-Zvbzm<#25|32Gb*fLdb`jvWmAQx1U250KhUXnWfLe0a#s7s~`dc>y$B zbH@Q3FLxb4TPr;nU(9(4N>HE-Sz-jLL~6h)k9qWpZi1-X3{zPIR`~&xfLjlgioXbY z3t1con)U{*{sC=Ijz0{Ve&!GWonmqlG{AS)RXoANun6`^89SjfN>0HaSzC+;Av{K3Ju&J2=M5>`Qi{i%#T0p!G8Q{ z5B1}Y7a-ffy<#>{`zIPS#@kr~>Uf|2FUn*l%h3I!^+2iZf6;5kvJAGMetD?@sClLU z8Vf%CUv#^vEcn=!Z!Rhd0-!xWr(cA;0hw8&k^mn641g@+wSObP(E7jhxkoQ=iaW?V zAUm3m1Vq1Noy`KN1wr`_GIS0t=|SV?y=zn&K%KP4Hw{b-44{Fb4?f+$94stLBmRpT znaVO8Zv|~HV6ci|*zE|KjQr62JBq(wl8J$#*Ly!`OnC9JVi})au&R!^AhjO7qMmM` z-FD|3|6lL^@&9n^|B_S9|C#uw9(W1r%=&a6^yu6RQP~TjL}lD$8D6aB5@hJU(EQ^+ zf6Fq^07W<0P;he|R7UeNM!!_lsl$fx|0y4c7LWfY zJz7uJ-}6X5*gl!^Y^*4R*zgKfIt=1l#G+E2?J) zj!AtxXiUBXE!_uKPNmu~9j9J_(xFf992HRDVLj#qY7r<(4LWO7G+d2Og68eOi$P91 zbl9-{7ky$3im%h4&T-`{0S1refB#FRU{<7qM0$BSTxA(vSkGi(cs((#xke>MuT+A6 zyNgO(TI+$5xU}XUdZip7@dSpF08qaw=0&`OAb2}Yj7P6%HfSS6FK>)3$Scr2&GK;X zl$d#RPX$GTPxk>&&^C0?I=Sv2FW$Zcrzlxa1Kj|8D4(%0C@u20R)IF+vhD{h&j5>S zgFOHV#O*Hy7@%?eT*+COa9^5B9I{i7iLsT@n zeNdtn$D?supN(q7} zKbp8zCk5= zLa7kw98Zw;6VqVYAs&c^wtYbrI;cEBsn0)w%EE12Fu%O90{i8y71S?l9)tXXDDQi~ zDnaG_A&APuFqKVUm5A~_={YE$p;!5ktrs5M*ZzxU>VN_QlmyJ5gDg4!LLcOt+oho5 zUBw9`37&d@^_gCNmJ(4k+c9N_h10ih&Z=Mv!*s zd=a>j-wj$G31WdXLNTa)@6qik;c5)3kBl$<7yXq3J~c%eJUhheEX(ksV=4;+|F#3I z2l%Igj-=2y3?8vSaG^$lDNuNWhq4Sjx|txk#{)Lh;n7^7!NA`F8vot}?xuH^s6Y?@ zcnZ%(C1oDn{Kw(dVxWdcH#caLxyFk^AJATB(2;+jF&&R?ZwVjJSn%;Q{(8_!ZlZ}0 zhs%SOvZnfg+VJN28G2jh1i1pkc z|8Rhsf}m|S;9=}n-XNpBB|t@v!hg}**`Ow%H%Ir67azO@8Cw5W$Tt6HEP+Ua1|g!@ zK&u)c>%_sUUt?4Pz$0Mb6{?`gKX7;{fQEs8zUTq%%4H^s{1zJ|=(d)19Ld6X< z|LiXSULM){jo;$~C`s9A$udBvsr?mRFo4yZf8hZ#1F{$ZBh?`K`^^UxUi@;J@fSO;GRuH6!S-AyAqGPu+pz7hE1FfaXKHJth8&Ud;mgUf{pz zVvv?@?iahgz`?`uViTAF-MQ-e1T@(Ln@>#u`vSCJ*wV?N477%Kts}_7BMH$jyGucN z!$|-%Fc<+U2@2q+K6Y0acyv2yzz>e>bOCL)<9`w11xXl?!!-Ccd_Yr#A)vL+&Jr%& z-VPq!{t}43WsHgjIK?=m@z;Y?f;yQ0MRl^ksa^n_>iZpJ8D319#KQ1ez@yt+zys8N zW%TIwGypA#=Ld~Av4TBUqf)@X?J%e_0WWgE;e+YFv!KReGsu6dOJM#hQ7HiJ+wxHX zd$Ym=>b=eql>ku208NpAeE6c$ld$(d>vB9miKVjytM@`PLGe_gQqX#!65_|h_Oc8w z)=k9YM@3IiOxCDWAo~$y2`oQ234o%o(?`Vu9=c#Z@V_|b0dcYcD3cg~!r!O+w5#y} zaKIbDa`%7HV;M-H?g?^{3_ch2gN%g?-hh@YfijRs^BW6~W?PXA&|<`V&^pek>I^U3 zLbySLF8|XZqcE(XfmrZSYX&c(!Lx5SS`L&5f*K(T|3zP>gB>Aabo<3U@MsZybjadx zV~vUesMB5h(&+Y!1L(5g>c#@4M23{7ysaRcdqwMPWf@*X27?{b1QG%jh2@}ehi={^ z5WiQn7^K7uq9h$81X2=NWI+60(NK_*4?$py3_(I5 zC43MiKhr=jz@@it>Y`l_1iSK|-wuN?btu*FfxEQ4WwaGeo)uB-DDKMAf64R{+HB6=eiTKMCXp z?Jo7`WKBxbV1QLz;B9+|!*D?3*Wmh-cWJ5y!wUv`LGW@}P&*!!&J|wF`}_Yt|F#<* zy`ll&<|%8ett>;!ZI51F9}u74<-&{Et3YGV9=)tiWlW%>xvN2Y_4r*thcN}Df|j9) zCW5G5)HT`C;(t z=5wGb8)@LgGyPsvGlRy0`CE>H2dvJ& zIL!cR>K*s!6=ejqB71q6453ZEgEv7XF{r5rX_IvOs8oQKjfSW=KwE9FV(qw#iUw%f zrW15*aQ6vNot^MsbfJ4H*iZ%3e-C8E&(;GV^knLftPAMEDZbt ztn!w!3>z5v1)2E;c$F15DOE~TX1tG|~2-og|Ao~=$ zukQpEuKz{LlE6i-VqZwb&KAKQP?$BCet)LQ_`U84X>1mF=s z)))IhVbtvnKL3;T#YQmi^b611ppF4(mN*04aRJ400BDvNGy!1|3vW7r+gITFqnB4S zQG?;d11nH@RHFZ1R4oy-me!+}_ius*1E_1x$^&vnCo3<6;sa5jl431r_b_r3|0U>@ zVz9{&0&IS>?Ug=t28I%Gk8a-E2^tJ9uK98^cpPWl4H5;_kD%q5tQQl&>t=63sK*fM z4TSm%q5dU+mqQ|zsG$6bwEhTweuGD^?n6^q2Jm^ke|^A5n;PE+w>SAg`;V{w766SP zNkR@^YyQnr^vt7|ce}YP!;7kH0fyJ&9?7RYm``@QoaJ!rWar=Ra+b%jlMOP^=Kxx0 z;QoOizlUG20laRbvja5W;L!;_Wt?BI0bJ8| zc0d+Zbbyz|cXoi6g?Dy_7Xk7F zuehEp!;4QD;55?>?;-lOUMf`u9XAJ3xg{2?@~y5c!;2H>DnS*71E@;yZM|Kp+4`+S z)uUH*5k$vskdA2?pfaXJ#R0OY1JYYP-29)T45V@bMCC+~${g$}|3Or?K~$!LR61c* z>C?^W*sv2CbD;GHu$a?_tk-tj+0O}%zuTbY8oi<+5EK6{R%duIAq5hDFG1%^fufMV zHI|Wq0UC|`tpQ*TI4b#Dok7P)T>=GgSW)tI!H~(Z9TEBq=k9qWVgL2U(#uwNB$uNM*3kQ#0@CFr7 zLV||5L)iu_42xCgZ6)>fs-_NQI1D9BP=j$VQE4GlpptSfz!ij&|;2W(J2uB^)69o zc+rpq2@jn4*#xA2FGPPgL_ahr14r%%K~~ck7M@--|ml~&M9QyD`*0EF}OV8_0f`Lc%hyO^7qS$pr&~1?NWJA zDg~)o4+$F$kQ!!)np_qJhUR}9WuP^bD?()%Uc62L>kVZAO}`@LrH9O*oB$~WjgjMz zjU60*-Tt767M%mJ;_Xazh8GTrknnps8>F{VfPud?7sP@Ti~Ow#U=B1t1v4`+7=!W? zf6HQU@`Id5-F?dA;6pYK=F<(877RY!j3r#nl?n{}Eub0FZby~o7fj7R7|WeJx;-_( zM=yZ((K5KXJlY->~>(WbY$Ugm11OIXtreHZvh?N`OT4o39`V$ zvD-leVwt6jBoBY{V~8FJxEKe2^L$1IhX04Gukkmf{s&J<^S7L00xhLw`{uyG!ruxy zj>&PS4J1ISzza=8yCL!NW|lg`3;hIWfOIi2Fu=+qUWjsUi1HYSa$ZpQF~F2ZGr{kF zaoni^Q7;WquLDv47o`3|Jk)q?Wc4Z#^{+vTA9_Xq1cRc9cP>c%0+{;WplTeJ-xVP0 zcSF>lfvC3ysV{)3KaH$j2BN+jqJ9oU{oNU$_=l;VjjUb*qCOg;J_n+{7NlMPrXI8= z2s*#yxKkLSUK^s`2BKaTr2au1)W6oq=9@s&{{}CJ5aofW2fKd*Og%TUdVPrc(-8G{ zz|{gT*!>MK^|wJgMk+-9GcYieX*%w7gy@(F(Xk4m!x|JqelQ)Ni*y_t>SP#7OdOl* zco<699h>V!7)sR~ce+7zM?-YyKy>SZbPGUrzs>_4!T_2<5O(bLlW6|QRKnH#gSmvY z`6qK}jN?u}hzXJq6SN>ENP|o`7YhlI*E+EJ$Z;n-MD=UXf~Q{5Kj31Pw|1I3!;1w_ z)v)sEb+Tu7Bk1%_m+oWW<-nIA8@9UHVI`;CF?RvR)^8=U9=-k&9^KbK>lv6mdZQgY zK=+w>a(FbqVk~{rSsnq}dClqB&F0bRp75H(uG9VS*pd;L2esF52 z=3pqbfv2ytkoxDe7bs(h_CQRzI|o$$$3Q|86h0bfK$R%O+QS~*4H2NC-~wpBS2qW= zy-~sfI*brW8Qedh1=f&BUrd32G^L zw7xBsb!|Nf8f+KMhD2NrNQFB{MGpf5LobV5^ACYCK964B;y_u37kcpm46n;T2MZxw z<=;@x!BA=p_wPH1e{X{qT8Qp}SS$i!1RZn@j#&7{63CbcI6jH+KO~#>DTDkUht2=ZQ2&Ee zxPw%{{m+5q|2V?_H-gmHw?XR-dPP|v{;!=4YX3!H_rC$c|6j5AA9N}S#r}t6;yxvi z|6{TF|2MdP<;?-9a0jVC^Z#dmQ2fUd_P+qs|DXj5y`s?a&KFcYO^C$qe+`8HzhLn{ z=wvTS{oe{M-Ff>ILH>^sV0gI)G`xk9{=xMfZw^R>J4nSWMEVB}$rSs6{11`<9U6t2 z1){)NzyQ=vcih>^0dB9{b_3`4C6Hj<3mR3Q5P|T&{h8M`p!6^A(c1^=)53$G`m+oJ z()wzTZnWG0YR=#c4aoWY$m0i~4YydzgHmwW&ReGd8efmb79Jq~di3(ffK-@+RKUZ7 z13crD36gkuj6P_G^y9@(GphX-hfJLTb#3a-6) z^WKi^cDsPXV+|x>o}H}D@S-3L zdw76W;K9Qq`Xm1E0QJ@hg$KBn0F8M=j%@*rW~6|tC*E8+)cP+HQU3)&RCuGRkO8Rx z*MC0U;ISS@aL2;~Q9poctpv1M3siGKFnBx-a%QaP18|kW`%)G>m#OjcKm^G4OQ7>) zMVCNqKMRvv5&;@T;q*lGx=b4?IT%Xy9e4hLG)SVH!2w(h(O5H4o#6$4C?bHx&w!Tc zf~s23KoMw#5NK54Y&0~mjSA!NX^oq`b7%_K(I>U>E5Nyr`4R3jNp8~lP)48zz z9Q^!OT=^edJMq@ZfbxGhw)!9%;*c1S3UiPOczpnA4HRclhPqd@ z1Y)c#$bSvN2>&6s2QuJ^J?|Zs`T#UCfir~@*&Zkb*G{~3(jfnbVaxBu5QoNqRG5QQ zpyhXn|3MN2@_RDW|DYM{UQy`!)7pMe`!5LLf8_cAG$05Mg6y~W^E+r@6=!G=T_2=^ zYb)M7DNy+riY-0dhJ=_8NQF8`1w1`K+DDh&LFHd4;q(AHpw_3CbvJksrRWogv9^7n z@-Gk(9?0pT0v;G~Z?L2X(4Z8~5CEkI2`uH^6>#amTPq1E??6MF3h^)fLO>-Bq`hwi zDe$9FRp@|Jbc44v8i0l+EucA@zlDnlF@RwW-;eLOlN~Z1dm6mdQ1lI?qRE{OivIw( zfB9Q{m>3vd-UN*Rf(J50z@~x6clldEtJt7py!@@dz_ZfkMwdLg^A$W=zm?j7+8v1g zm;l7SXo!6^5c^_5_6Z={cZZRI;bkVstk$=s$nF(^=$D4*w}I&Q1?j)wkL2DtApM%4 zu?}!A6k)#vME`Bj1aGhCA4u_Q3(`LUp}&;z%qGTfZXArII*vPKAUak;bew|dumR$zjZpiva(H@9yU65`CG~L~PEX^;iN@SW}GM0#g2q6%`+x(NU)CA#v z6^MD#5ZBm1%;N=_cfk+tf3W+T>m?XU?3(Lk7)mUf>n#{cjGF6h7)o?nKwF2pnZZ-B zr+vB`K7fXLK-D7XKzm5f6f&cr5P#TlC+Kz`pI+A0;DwQ*XCTGSSy2Bu0m;5YXI}3I z`P*?P2gH5V5cSad!WYz@GC)#4>CEeXaQy{Y&knB-z`H)0-zYeCzjW>X;L`o8`{oM` zUj_#7rJdHt>$tm5zmV`{VCeqvnyLGH_vsh6y%`v+kJoW_pMG({n}MPGNB8L$?3$1z zSq|MNj4wI%y8UN9{{1`Xq>K}ez3%^+kA43J8cYq~Uw@E){ZYv566iYbc*i)z#1hDH zu=NA2C&8O*9Kb~+?@Lixh8ITyK$Cu;N)B{i88nlXI5q49wQm?oED`aQ$O~?7XM?7V zdqrI!@udqIzftf-jxX>Oum-5YPXJ9mEMpz zi-5?@g~^rpA;QlCBG(9$i}1q?zt0Q|46yLihxmXK;)5uNZf{VHwa*JF{B}XY&*QL1 zHy0?1%|PMcxYH1#`?LkPIVuCu4X*DRkagF0UXxZA+13$on- zp&uOn9)}@g&?PACOB;xOZ;1Xm5dE?s{R{~GrD~w?_c+YI4RTlzBnm*s%XL5mKzHCm zV!;Dt0S%~rg^j0y&MyUd9CUPPi&gi_e8`K$I*m=Ukzm)L|XypJz-qrZPi%%7x zSPi%E=|17o?ab0G?9ts1nxRHG$MgRqP<{jr?1T0!@?HR~y6}cL2ebwNlovtM8XgeW z27+9xgOG;0lfUI8=s+PSiPi(9S`!?1USI~h_BLoUO0TF4M6YcTX#B?m;#%{p-BuDg%}>ElB?P1X14& zQGW(Wy#q|WU2~NQLy1Upl?6iyUvrfWLn%`I@B^aX8=}7lqF)yjybMtNpz&A6GvN6% zQ2pR2;DNpD1{LCV|XvtAY zga`Oy@=Ip2U~@W~7cem}bf0(VSPh!HeNj~iK5mP}=)h~vW6kTB7(g4$9XBv`G_M6! zL%pIW!M3~z0;}`rK3vLvta&|186+nlj_PSX0$Tdk4O+(yW+`-9;ikH588rPVu4qs zfhr3HNK*h*en^0pTqS^~8^PyzfVOtHn8`A{*zW-;KjuJ=qi#Nu5PKL@geZf~D*}ab zFYg{+S%w$Wv8aRQPEdRmfTlJp_*>?2fVTEpF_farFY<$CB70fE`&)WNw?K@wEl_88 z@xTR|-lM@9t2n^fRT!fFH)umjuV@RB`VBDk+8hiF&AUKrR2cZ%K%4eGn!yY9!TQA^ z`gcS0gZ$~y%c~2ruK=e1H9Kh07x+9I*g@gFJpVm<77TsT(v9 z>A`%ip;DHiB&6Gs1$4VR4}UwTChm6RfbzOPrJW-Wh{wX;?gQotfOtIo?VuI2-Hswq z9%vs}x1$7z$HLz}iGhLP|8Z;Z$&dU^D*ylgZ`chQ*<#>tnE>*}WYD%s&<$geAm{$d zQx}>bwTO_VCqjJt5=7p&xWY~0@|k4%X>CY zo#BN7O#N(R^=c6H))4haAnJ2L>OVL_{hN)fUJ;_68=`&+L_IG^{Q;PIYh?AZ5cRk9 z!QqnvQNK19RR6)$b0e#lhNxc+QEviK?+a3&08OJ53=P$h43KTx z&EO=j!Og|_|K{IYQ$N!VfKhw+AA$$L0(?AQNTbMq~ zWnk#;X?ii2fx(0M)c=P_;{}co^JhcMSAm$n7G!<^%>2{L3=G}D5+1$I0{r^Lb z))$KoH&jP3@V9`L+#>l8bi=eyFDp01wNt>^01}=D?4aRejl3Qr8sfX#pxtV{qA3vd zcR}fS0!%&V0txthX&OZRYKVFhhcomm1`p9oQ34N=bmQ4h{v1~B!jL1klg z2tx^|{Z{}{?+sCZ1)NQI!R9l-)K`Osopv{YHd2?EcRR;`ZnkLt!C3=NA0-g|+z|a! zAo~A;{Byt-=6|q$@PZot7SM29w{s4t)Mw{!2hFo}J10PSb)e0~&M9DCxl6ZmM(cq( z-sT^i{5_z~6C{6CL+qQa4Ngxg5c_;VsUrYpAE^Ba505H{`fP~$FW_X%`xfLr1(JPxw+coS3wYwNf>>H|m z8A>hFko7k}^qCup~ns|0wrR4=Hf0va+ZQ7Hf|daeMS!~hx> z25pv#J)Ab-K12Y*I7#JBr2sA4Qiasz8On^ke46rk2SVJIJ6akU&l3r z`ijv0(;=wA!c?|`Pi+aEl>Edm#Kae%rBS`2H^DiDHw$FqTyzuJn}0C#w}Ow>cNeg9=K*PF zg^cg4glL}y(H;%b9*3sAv7U#)fq|i%v$0+P#3<8o+{p>ioej|)1JUgZ(yf4|ySZM3 z4P+lLM296rhZaPKH%P}jGt>Y8#|YYdgCIorZxwKSz5!9sAi)FLWCIPJ zUI9po(*>_cbpdt%Z6T&vLrl|wm=+5%?SnDg@%$~Ijy-sQ2ra!amS%xH1?mET&2xd6 z_ZqZ?tylC8I8*W3g3MchFb|yG!2Zc{-01<)u@jvfaNc{?0I0>y^Z-e*clz}q`Z~ZSB zh8I!jiXg-2#VWF(QOXyq6G3Bq;STtR(LqiDV^IALx-+pwNtWT|e-qH)A0x{A7i2yX zdVZ9GBWTkV=tvQeJ|&M{Q5Q&c^zQ(UKj4X!=SS&_yj=%!rU(1$HBKzF#2?NfNq!okL99x20n)Zjz7>qG0OVgpN`!h zK(`!#x1)j9@9IJ-sdGPM7+$P21|4?>nl9>Q^neFONe(z5v>kW)Ks*oyTBy}4x*DQW zrx3LM3E_bfqu0R@FY7q&^o8iqfas`%=+FY`xT}xwvhtbN3LsBv3P3%1-lh9k_f?N> z&?4Oi@ErFga3TlI_#)q-0ZtfD0@gkU&0|8^`@BED%YaU=(Rg{m2r+**1LBCgFu5&8 zi21t?h}=P#+zca75=B}I#@_a`_ zD7YH~n*KC}_ZQbdv~xqWAA#5%3(|f7p&dN`rh#?-a|1;GX&G>OY=P+a1?g`<=r2WD zjt0KS_9UpMgKd2mXumyly<7&QZr%x6G!2@4o?wUwzX*ujT$o&mAtL-dAaac`xd=nN z;nxQ702jmqiy@llfHK5>T_VD-1ET%3G}!+s5bfan*nrTEC;WOK`nw_eRUrDo`OyKP zA1VAmn`Ce<=fkl+4s=a5Vm%}%!-aq=2j1APG7K*)3Kp;an62&5IxkOZj8q*o{&C zxPogpUcWCg3@VEsv4h6b%q!H+Q=SGhI{xm zM8^tFelq5|H-igBwv z;%Fj}_lZsqE|4hq{Vc=qLPHNNJ!FH+23`Y@BsWMBUwTl2#O`hhaC&foc=l}uX#JZO za_}J1gEB-%Cq#!3M8|884m*SnczVzR-QeBL?b3~s9zbVLP%%B2f~yK%yH7Fnjw%yE8%8TY-l5xRJJuS{-Wyuk|xN;BmYWv=JUO zAP2tXsS&cPy%DtR*Q2u$v{>1rvk|lg)}yl#G}el`s~y8X&XD9XJBT^&$}eynt?1LiP{)u}1KaB&y>;=T|}3V*Ug*_(0+P8eFdP zet8dZU;N8cTA-r=z^x@ok8b!5W$4Oj$DLu2#8C}ejnyj}1Id@UX`ubT2>0=~f=08U zZ8S*Jx4Qv+yIVJS<1;%_!ztSMz%gf#oz4=V6Qe;lLUuZ9cyv00u8Xwr=yZ1Q=ydk* z=mgzR7~#?BoZ!*voWU>XT;S0OxstgPd|flYAmr-6&Sud51&_{V&`vinqJ~TN!xtMY#2I|LK?kUSmNW4Rg4VsA(F8Zyn~!KX#yiG<52A7K=;aj!`L+{u z5fkWmE6{v)#0y1pP(*@{_Rj&$=k|*J7Xh8QapuMMP`FHxM>i{nuR4SAZP2+4dflHr zdToFBs58LY%O2eh9FE;rJiE_>j$|*D{eQUovqv|}ebAZIk3r`PipVm&Fb6y8b)iQ$ z%lFsW9^I_ld_X3G&maLA>*UdEyVysa!3CuEJ7^U|_t_VZwu4d&=$;TZhy^|%tH8Fn z{yz-1qu1mYG1yX4my_(_xXBA=jV8I-|GJP!rT|s00JGb)qTDDME8dm$G8|6y3f5>|NsC0 z?sK5?%0xj+%Rp^?&{NDVq{`wVq|1w zVrF4sW?^ArVE_w(M44HbARH!Us3;RN3lm5o3nLQ~6DvqHaTp#spz&a6`xUg_G659Z zx7FYaJ)r};B{q=d4P_?$@(hkUL4##Jy{z4WVE^WT7CrXz_WFSK|0*N=y9ach1t|O+ zza2~{5%fqt(Bf13sk$6snM3DJcFxMG?q77ldUQUU(C7 z4`@Kork8V!aZU+{}ZV?sG$sG|M-L3tg z#MBA8;HbM5bZ-er+{2^WwI0N9@aT3e2Qe%>x?S@@3h?1afKDM zrQOfLqc`-pBfo%~OQ-L1SL2hO-F^zt!<{;Pk9&0AaP0Qe==44B*zKp&>3i9cf16)S zhwp#S?z8-wuGf#df@Ve-UQFK)x_`^hz@s;GK7aUuhHx4}f+< z^M}9X4}ZcRew#o163BuVj@>RQJeOa9*dPTWAjX5w{BbY%!w-Ds7tC!3DG)#?kN_#T z@tHsF0YpJ+H%I}J2{IrB7e4dH-GC^F?FT6kxcs8icREPwz-Rur3!nJ~Lnk{n+o&*= zvO9MBsEE8~1-sv|+l_}m{3J-H2fx;d?t@?*j@@n{pZViJA>ljwGrs_DnXD|s3dRyq zevQMQ`6F+B=8rh~nO`ur9~4yWE0{nMhd%R1Ui{1-aRh7?NTS>H`>;L~C+6Z*`e(xL=Pzv?zjyCY@F1GOOu6FS3e(Z=i z8XlUyQPz)nbXN)(f9t;I(f!g=zRb4!u!BX3hD50zWIPQtnGQPth8LW_?tm%YT6fU- zH}c5&>;GYE`J%(!_blUC%B&z}Xq0L>?sNbh?BB~84b~_+2Tbwig7gcZ>yKwCItDU; zqs$XlA3_W=C^dxl|6L*Gaf1yK^#N17z991s$f3C>o}*|#$UGi&^DL0e^MaVSn+NQ_ zKVXVi7i3-mhIu?i`z^}_%B&k|^c)yUb;0GKKSX~uSfl73FvTki(r|ivK?co#@d8EryYE`Yi=dkaTGs|M z4|G_DPcQ3fE^v6g0aLubAoCh9%o8cvZ<#MqX5FyI6x4`h0EHLma4k^%2i7RM22AnV zg7iC}>OX3oFF{m%!|w|O-LnpArh{(V0_`&Q?f&VJe9N)>g-7>C&{&5w=*k_?_G{3Z z1m;WN{+-JOj+dbGi@L>)Px^FjQBeS2sj)=`q^$K)iL`Gw8)UtXrObg+c1O#c11u%Q z;8iv+pw~e;?f|unUrgF2!(e>iIOJ9|&`N|((A~A+Adx2w3=CGFI;DQGG1Iu2Qe7e8e|?b+9X zpuhy({oc*~|3J5(^`RoMUKXM53!RLf-FzMgAF;gH&?CU$*~!+;4?5U_`J_i@$q5b^ zr&HzxoSAci#iRS!e|Dd4Xz=&WQ2|9G<{={`Tzt=*YkA1!(Wjw?m92 z{E*ejMx3$?FV6Z3FgScW&Qu}@5p?C0W#~TrVjD!51tuH@5uOhb=70&OLxejZ!U8bi z3W#taL|6eP+zAnm@&#YwdDNpRAJC?eUf#EH>I^RqNWjYj{+2(W^a?&#si7Kl647C>N#IUBe=Fz$?1tT-IAY*$ zT?tB)RT7NlX5jMt5ybq}Y+&=}AeoYwWAx~5yZ}nI zkghGf$IK3q26ZqLq7TFCv*!@|tReR4KR8E1$I#TAEr*@a5s312FL~Q=^B*%A`3w3r4i~qpqE4`K*C57WbGeG zWbbQWbU_+_vPgu9)qC@|fa;*epG*Rwq9x`ax=FM|6GXR&mPqg50i6)^lSM*ItR%zu zQsYk+1v4>zmkZs84)5S%U|=}B19VK~;T@bHHb}Niti&2bmy4C?HvZ&rP>?8*2h&m| zg2tD2fbL9b{3+0&AkFW3=q3j3)L*Eewh6P6$7?vGjU|0h>jEj>K)JbJ!jT1CRD;vEr)8E3sg`yYg{c?WbPFXEsCWcwSyMFg)V%zg%O#GKO&h#W6W?unQH zL-Q||B2X=P0wf2Tz&bC6;$SD3gHiUgJ!S*%uc~GQ1(GP#y=y`4H9&H&2rT#;Kvgbs z3_#Kaj6`<-0alQayqUM5;pYHy4s;Lb6^NWKOil$Phd6u!IepxN1n4aWkZGceAsT(W zK=U6$*a9>G*>%Y7F@R{jc?;^E4Wfwf?10Gag~?43MTBPsNDdU9^`bW`vil2IKq0^@33KBI5rq3sK;-`3g!=7@2*Uk4 zKyo1W?-wD${mUWl&;Ac8>qWPK^!D=FdV=;pV0Ay}8ehWh2j$NLpyh|wBJlAkP+0-m z56A(@pN=YQl6p{o1CRPGAocoC^?V-PjuluG zgU0t-PnLrG+X7PmUkKq}&{7R7T44SS0jWO^RSz=10E=QI^Ho6V=R?(l!V^?|V$lLK z|I2?FhL`ye^`On3qScU&RLyl6hL_o8H?F> zgE~U5xj4JvEbPq*doT4Hv~Y*TN;l9iZwV^BwT>9U3K&@-g(7 z2T0(8;vaSW8Akd%^BXhaS@0p!=aj#oSmt%TjHyfztPGMq6CujvF3T{y_{j^Z#he33 zPM;S*d8L>4<|SDCgA9VE&pQygy)d~cyy$5Io<1i+5`@a*fZ5U}(Kss|^4iws`NOEL^EM0gR+*lt1i+2)`PKd@FDbU%VCz z78vOPS{{J>a{v_gy}X$hWf)$#@F0>oe*b7e-18c=nyOc{1k!$b8w6Va$pHyo{Ql90 z=wA)dZvxSO7ofRrn?FgX!!MBDBKL{1SV z_k#k(SM)YSa}1~f8qW?1z~&!}xYy@#K(uE=w9kQP_XTNJ zKxoIazKjQ=UmK!72BO~%Jm;@L(-SECPC&|U$@9?g`@ji_4v^dq zh}_?EP`N9di11qhk$VV}+rf!9{2o9Spk#dk=kIEW<{nUiFOTp5?(lmA(XI{AZUfO? z3)23874CmL;r9%p|Mh3E^?$(4aNb;y{sjpANa42uyuK0d`E{W77TSFbD&W$K_v~3n zxeGc$z##tRJPt^Rf=)181#$UmR24N~6_69XG9Yo=iK-%s101@DqjNwlb6AK6dADsCcd>;cJME~he;P6p_=${MH-vHGQ&)?w1YRyNG?ql!( zm06%0)*Bwx>3yod36HByosk}7+&Ncq+#t7TgT=fOl9Vf{lktsqap1L zY0v_&UeO+i-npRhg$qoO_=d+<^AXShPa^}K07G_P0cd^TYgQEhg5383(pdO-N`~RZ z8H6;l`~MA7}^?RNX*E93d>wU?GGBy@+`2GAO~@*4~cxi=UXl5a3DM1rP;7!ZIF3J@YVSRi#^ zDMm&nCT7sG7G@S!RyKS*aA1MjkIip1P{ONQ4H8}ox4_}Wa*NvG#SfZb>t*Ez9fjE| zsspBYQ`JE0Ul_25*U_5{47+bKFl@ZZz_9!#1H;^#3=ETRGB9+4X2Zb#h7h1&0AUCZ z4+&QU3NFwxAy!saRyH<#JXm-+ga(H@hB$_T&z}993?7g>oIz7Q+@-P%J3-^(FD@#8a^6dDZtWEnE(M+Zc>2Zf zM_ddZov!tu1#h6Oryy~N`h^OhV(0XWpO3j1j1Ig6or2=g%WDj>Lk(;Pc;z0*4t=;C zxez-*ha-CQikgG%IR9cg$d1+n;H@{-aJ7zL^UuGS2{9iuf$Gs4y4|CfH$PRD;s1r! z1C<&cy`o-l4FX^dr(a}%Z9o4a0isbKoV|Uw`}DeA_vjUMN(Fh0(Wjfk@&Cov1C?SP z-M-twQ?~&E|1Wv;iYk`MGQ3{v(d~QPqjL**`36F^8*I#Zk6uw}WMhmkwH~Oj^yv0I z@6*dGm@3QQ2wB9|4O(grUW?l6y59pp7eD1Ple{lW%nfXO2+h7F7!-B1rV9swmnN9a10_~_WfAY*)b zeUJO}vQ9{mW!S~Afq~(FXnpsG)&u+u_e`LMBZDjdw*M~tzCT=Bo|ITa zO{+idS`WIv0CL31F3>y-rvCZ_nEr1r{JtMRT9Km-PY_r>1Z9ZxFAN`YF}Sw;FO>!P z1e9z$ieX{DO%|Lr?*9A#-?imisho>NX*uX3WYMW`C6ggacK!SRzx5k`=LXOc%U;o~ zaQR}0{H%Yd_kp`~x~NEW_^5Ee%K?wxH7X}Sx*OksZkuxKKH$Q??GgXBpB}xUe5JAs z-6tG3Fuqu#Ccv-@wDbYI{KggQYHyUeRkQvJ5ZgN`cG}Jyrr9nLZ2>iu%XTV0^%%@d(&8 zagMQ$F`)F|(DJ{82V`c~N(KfO{%tQjdU=8?@n1@HN=s}oR$2~5F*D|2Q(JT7B0OVC~jTd1cQ(6y{f;}nO%D~`Y0X{nk?8!=40pZar`Y~CS;l&O~uqP8i zrB5&KJ&;i8U#y<==nVlabm0A$04i|0f3zN`)CKu@TMGjNXcJqns1L}H?$a+=<}+Xm zC68_&l?b0+X9161(US?FTL8DHKnB5~1rR9tSAzGcB!SHY&FV`)&D<~#Wadi?@CFu; zIh}h{Kv9mAuDu07w^Jr~^omx4Ob3-WpkmE&Kd5cddZ5AtUy7{ID9jLq=q6*U1F+gq#v&Tt^3TMty&f|O_Y^zy1F$TB#7 zy8}8yOu<$90N8xT<^xPV-4j5C9;i*;?W2+b+QSGh>_k1fy#;)_kAW5YbVEwJAFcl@ zK^KU=h;4=itTQ+@oPM!-E(60$ZSa;BK9Ane4`7El1UUY`0FDl@E_JvrQ>d;|kgl)b zogRFk5GwHK743`%r4~k?ZVwMo2@8r$uEl(}%sjA71>JE&y6h`N5-CR2F1HFYmWKG7LVwJfNj<3@>)33NUnc zgUs;g6=f-rW$@`f;L-i#1*4t-1ISbn(7;!(C==XZ50Js#=U)_Lf=YZBm4a>`l@k8# z7hU+b9{`mX20p#4Z;E9ZJPy7TIQT*Uw56vrL`7kj0|O{0Za?YK>$~BFaVN}HpI+Au z9=)Qcie(vI^y)(F6a@)_t8tHB(F-7%%b*FnUfwr3vJ5ZMZ-X;x2B_R{1f}<5jSLLX z)5ySCY8$Lr^XL_wmmtgVA{DG#bRNi6y}aEZA*EmZ3@?j7drx{rkL7@Z{=|!Qx40O5 zx8aUsB zlV4T?DEWc%{SA;?x=+8@F^hrWr3Dwr$|ofPAp6r6gVyh!e(`P*1H*AwP}K}da0@)T zy$c+7f|kKUZgU4^e|V(|$xu9S(`P|Vj{=!~i<5z&xpoD}lo=3HKwTC7sRwrHGB7Z7 zG=mOvZ?0X#aI6`0h7Ra{b zc=S#NEsq0T(hl;tPcQGp7+H`y7f>e(yd?;vwA;G?wC4kqFF=L31K8dPpe1c6R==%- zS$(<)AiJKhGcfD|MYK!jZqUWJp55ng$Yxhw{&|OTYU&JSavS}Ykn@6w6 zUyxrsI$5|py1^!SG}|ySKn~>jf85d9My2SGp0kXpl;@icMvw{Jn$EfAZ*Yi^NVW`HfW;i#VH6IG|T&9-*Ev3{%u=9 zWwTE&>xq0>hVEX_&U%kt(bM^|3=SROs>GwS8MKh>IC!HOC||u`1NRJ1ytvm4s!>lv zH>SPFZ(?BBwSkF&0o;gwaUc;S3+lDeitfJZOuB+%iwo$eAI zy{zFXU{M8+Ue+E}FjK>$msL>>%rx-mWi^9nv+(F;)dm~u?%>hO>aY~7z{8`LwH0*a zP^WuV~ z8D%ePD1-+p!999e-N8EA!Nqznt0zPbRB3zkvT}osXb06v9=)u4IY9=tgGy+RUe@`- zU>>N@^ypJ8-wvAW_2^}FT>@4K-pkp`>JE_u&AfW_vTBNgI9Lw6>$8`2BWTl0XFKQu5RYEg$DmUgI@>{OOg(y8 zQ-#1PL5Jmg^s+7o9ZS*K4!SDIqnA|@98~S#buhiGujhePf=k6-R#|N@4^(D)^s>H( z@W5qYFRP;tSPoP|di1geL*&3EUN5Vt0ay-H9(we$PG<-6z~x&nD<`O#+Sv{&{XBYE zcY~U`o$a8K&ZC#rmmjPWGWNk*59$eYwu6$tM=z@&#ATpL%A=R{FgW3~LvjPFC^+r3 zgA%1jFRMDlWuUUpqnFhZbf{)$J9w>JFRS-Dunpk3u3pwy<^TUZI@>`Pq=M4VdaxY0 z-05X?gs23SN}%wB*Z?X=JbGDGAv|!o(96m$1=a^HfqGdrCBZyU`25 zdT|a|4%{8=Wo?GU3V2ykFKa2-@AJWnH9FhDJM(&386Xxxw#yxN>D&)GA>E;4JLs5e zk522?T%d|kx(w85^y!9m6`}o2^zJ)s{1Lo<2h@QBUsA2m>-4|-SNF%}AL-?x9=*Kh z1VBfc@o#Hk{O}&sP->g6+?|-F^PW-lPBj zgD%nNb^8z6>uSM#`1@z@(iQ&o2O(Qb`Q;f(-ZL=dzGq-ad(XfS|DJ&%;ynXH;CluJ zulJx@2!TPvv>=QS!NGzn!Z(78Du)uDp!qrQo$%eAp!E7e{1B*OIsIb4A*g-O4H5%& z02K~_*95fw=WlTWonF@24$2kaCTu&Xq~I3>7Yh7>?V$Y6FW3&s>Y!b2g8iV3%`eyw z%ESDE{h;j1FW3*xnVsO{sQCrkL1~;{upN|~`32iSDHmiO=pV zJ1DX73$}w26~ACRXaJL6u>Ax?$qgn3hR*gE5Y7h(#Q-{`O|V@6LMcEf0|?~+p#mTj z=%QhM!Ttg;ufG98O@L4fAk+p3bpS$v?g-!)?0*2}wSRz644_kr1=|H6lmeLQH-JzM z5GnvdC4i}R(8;d+g6*IKM)?K%Cx8X}7eJ^D5b6Mgx&WabK&TH8iUD*AvtYXbgi?S| z1`x^tLIpsm1PE0Cp&B661PHYNLT!Lh2f$SS1qk&3LVbWx44_l71=|H6lmeLQH-JzM z5GnvdB|xYGHc)ap&M(;C01=n~p%#Ft_6-o~0ED^#p&me}4-krhoq>U0uw4K`fo>k= z7i>3x@Ejmi0E9{aQ~d=H3e?yK1u2BL08F)SfKUe@)CCCj08I6NfKZ?oG{0cK00+q0 zeg!bqz5zlVfKV48)B`Zp{{upCaDp{RKqw6`)$RbH0yr5MjPrmR4)ytqeUEu0FV?bMtb5tb4!oepI7`SxT zs1$g1e{|{GX#r~8bl-I8Z2Z8%z~I_?pd=r($3MWMw~E83ccTFZXixA9(6$)(d7Av& zKv(Xbb^%>e>CWQO9sc9Ei;4!Q57yzLqVQsFBLjnHXB)WH)$L*6*~#b8ecGd2;6=$q z1_s~WG7gX4dI^u_w~VFRKpXx8TwDK_czX2iF5m!Nd;LCbf(!pPHx9?0AOk(R#XuFn ztp;$l0&co>U-0Pm(D3Nw2T2I_F)(=a)^m9DmI;831YbB1;nAI=0$O5i;20ktcNiQ( zpg|^y&@kx4lt<$mP@B!CbB_wBCFi*3|NsC0T{@SjfZAD(-G5ve&;KW)<0aj zA35?n|L|;n$yj=^a|+np&Kea5-`2M!rk>rd437NUeC4_W1iBq~F24ZjJmSdje5A7l ztkR|Xf%Wxb-tJ$WAu0|~F<0Yn9-VVkKuy2aZ~QGXpzcbqi%Nlq_EC@Ct)Rlwr~8Fx zZ#9pr@e_~k_%E*AN1CmfN|;@`+4;A*>v(iucIo#2;Y>>KPcCt(knf zKa{d`^S@?x>^|e!9VgL!(Bt3(*5-N_6(S$4p)TkJ(eKLbOzy9D%ZbtC?5?z$e`XI;Ae zRb0B=H9We*WkAki5CGr*qwpfK9u(nh9^Gd_3CFr0bcw?;4v*&J4xY{L8TnhKLDAI> zi7r>;Z$8~?R6y-s(CyFNTfiIRK&=H()cUr*ccsU%OU>vDE9cBfmf_NApick8W@PICdZN=nf9x zpK`#Z`v54j7&tbcU~=g!QPFU0t`%W);dea%9>nMXRc?;_+gxQq#)D6Ua}EIcsnbQp z!=rO9xcS&E{305ZiXmo$26jArTi=2Lxxka(<(jMUNzfoRXyl~(nosuxP(#`A|0T!n zBOs*#pwmlW14^LH^)4!)z8wQ3no~d4 zMCs9Z1eB#5A+srQvGC>XXFR%(1bZ~T0mX(#^G;BEn!%&{rblOnfJgT$kIo8(Qq~tc z+Ce6DgVL8rcc=t7_`qw9!FP+o#6d&$9^FDd-3_4L5lE_YHK?_2{Qr2fJm`88Mn=Z8 z|$W(cI5$Wng#XQS`U<@x^y4#=$#BIA3YB~VD{+sQ89QSR4T*Z z(%lUzNj-X7R6rd;P(&Jl2DlVJfqDAHdQe*KZU(v9qZ{lmpKgdskM01F|GI-De7ZY+ zfKu%Li`}jQ9^GqHKz&Gro#28JZs)ubu$|y?9EY9Y{Da?48HAl4jYmLHh1fFZ+Io_| zXeW{|DjE-DfKk9#&B6L7TtTh!sxU8ADl z(+zS}cZo^@s8R?3tw;eS(RhUS&Vc;~+O7%eI7ooJqX4QVAT8d`92E!G?w_D+?%~-D zD%U-_KN{cm=w|om&Jb|wWl{F&ZaD^O3%GQD@UcEx;^EtRpoAAZapBQ@?!|s91_qz* zqi}w{709z!K~f>@3=CeKYrcUrg9E0saZ ze1v5HsM`SAVWt2&FDU*n*!?F#LkXQRDnz;;RH4JpKk(?*hxr54-U0i=Rih*b)gxwY zAdk3ezsDdtPRvzWkh(X8^4!e zO&2f?_8;--57bE}l>R^sV0iko=>R((oc=%(Xz35s$cCi9%^j%e4dw6(u_JJghwMn5SvE8J`2k2@a zXnx62LC!BFnEB-;G`|#RfYVv8$x%=z)uY?Z!qc)v57emuIrJLnmX`oX{H*$I(2 z)+&kWP;i^k1C#?`c_BvyDKCH$49HmmpwbDN7eMz{d2~($bwok+PIo7ymU-pT9Rw1pXhhF6Ak@4T>)V%UYQ-)d|r04AjYj)@Q50 zLsxAe5m0?51FFxif?MG+Di+Xkq(sF7+^u*yw}pWL6l`z|3O}^_QuM)9_OpLDdeZKo0Y0eq&(#-?jUpPxnV~ zp#YlF1GzT9vo`|l;sj9Xo#E4&qoM&W0wDE$xAPBBVcp9j?%S(#towtfn1jJ9e`4IUZ{R4aqV7 zKkm_dSisTxPtihXHIt*F0ZNq_px_1HeIDT0-3A(6aO&kzvOdV~cF?gC%=c(MV&E9( z7y~*=3>@ZQuMl6pfl?XRb9m}k(69u&e2ZxY=YMed29iK4-#|kjkn-(vGivz;l7W?P zAX^7j`34##0TmnPUV!FN%>}~?JYdt%i4|sMrff~M^oz6Qv zyPH5QPtQ*04W8Xipw_Hsr}K&zHk<$d_h>#+0c+udav3 zkV&%HZlJMD$RycU2Jk^x9-RiD32@M0!|4~%{-9&z`CCAT!GJ1M?=NBu-6uSHMHe~C zGWc{Kf6>JSGN2n&=D+y2Mu4Ha88lsN*$f)-EK>C7?gm-Ne4zV+$H7O;onXlq+d!6f zHiKlkCxaAvbb~n_oi-Ody1{1s2OIF>%o@;c1<-1WqFmU#-ishM2GAuz1{**ysq;@OoK!S)HLMPF)NTv zX#i<)hnO+}VoEMZhy`p)jEV(#+mb>YO8NlR$I$c6!RvyX-+<~A&+ZQ{p!Sc?!2iognqQdcgIcghcY!Pboo1$@4=V1iftV+&LD}*u z*oqjH08kko0V>U*gGi2X@h_KE!>UP8`U2NB$o^@31Iize3oU)SKR9;(bm?~D=nmrX z=;nSgD+Rm&XNn3WcbxSEdGCj7w;zXVw;K<5?)k0gsY^7Gp3U@AOd#=i9`I>UFP1q8Fj&k5 z1u}T~*nBHQHj4*cgsk=foXy%HmjU~LgdSf8Wi!alrl{7nfQKP{dV9dfOL=trg4R~e z0o_{*iXl+j$pF+sEC3z<1Zr-AI2In=%%FfbFa|H60Y^eWC*=HN4{%fkL^y&=UPVaB zs{(RL_t_UZrJxu%_u`2oXs+fZ=CVyZrqSun z)9t3y=`PUiX3*&_^5XF#CWeN+pde%@G4BQ)JSn;YbRTmy1NeGd6^PJO(DlOI@e-g5 zo(2E&LzWs|1|^!$rJ(e498?ZgfZD?a@Eg+_k3eG*QXkZ)D1;(*B&<Bt0zkIr_e7ZmSbSH6?WI8t23ow)z!1f1)LiXP@gIv-px&=(}x+;RszdMIK zzvtLoqawgqqUE?V0-_@jtW>lKOz}E{bkw2ffS->BngM-LlqtjD+071$)d(b)?ccl79;3K9Vg zOeugy>lFAkeN+rOTR~&AFDgwK7(9~Q4Safa_kI5NpI^Y;#G`kr2xv?hbiNxq1H&hN z0e=^;X2jXMwIN` zRlxwO@xIxCk|b!IWyvy+WdDF&pdouuE|mb?oO`?VWam^+>FU_s(pvy_Eokbn`!K)% zq0Uy&@*|7+polIJ^+;}?0_vD_x3nr~fPA$D1{wQ(w=ycQY>Fot|%{;n6D+#xm$TE0#`xSsPc>pNF10Z=f044A4 zFbAnR_oAQ>l;qF7I1vV#5(np9kM35mX`OBgmhlp0G7~(y-37WY|3B=(e5sq~LbuBW zmQI&G6YF@1qNm;N1|GeBC7o^t#+Mws-9Ph#;7c4n?gEW_Lkh1mHlUOOx<|WI$fq|3G}9F=;MrX);o1E-{xE1V#D#yG zzb<(CilaN61vEJSB77uk~KqGAA9ikj@s^BI&z zV?gR8z@z91{NX3NTN*cj5}b>QiAS=#09c6wC};Q}WGpwo6jEnI_@%^E-Ee_ z$?gi>EsYi08VnxY=Ri5)g^x5SR3ItBz^B_8QkZvu24x-pU*s2H2kkdu<`?i6;1~23 z;1_UL;1_gO==L}0^fvJ5^^SPaJ(r0A>~W9o!=Bwpeg~C?XU>4nQ!@b7jG)Tf16(!U z0#}Wo`9zQyxN28;G1&>63l(>1z;j`NH7IOPfYu}nftJiWyqISVszpGZ+UUdG&N7{j z0^QCEosJ^i&KjMLGTqK9osJ6K&N`ir5}-Lt2airh5bfd7>B!;H4O;MEfHV{fb|7l} zLN5{A6##d`8!M0-K=I4p0y@%~Ux1xokO2}N9s;2B?5yx2{3Aa@Cn!`DT2Gd+cVBoB z_JJR=Q1rMnXgL#PecW+p8_*Kl7c)Udf=+*LJx~(saopJhJV4bey3L96Szl7}Vah00j^DBzlSC4xkB829IuxUJj`J$*Th0piGIwqi5T#+9h-9j(CK+Wam_l%WKK*RDiK_DZ}LAr8q|GaFq z1fSM;26jFS%6Y&@_l>;xBLUJ69$$0mM!Mi5pa5zl_$v7l70?E7g?P{ZkHDz}L7=7= z2aoP50gvvFj@>t2ECQR{2kIw44m0-Xo(8HUe7gMwK(lJylR#5eKHU>Qr8lG*1)i(X z02v9nOXRvoH`r(JL3fAvm$UO>T>-EoK#Gz21E7=o6&ykRPiPOvvs=QW`xm%D@6-Je zG!o_0ee^||5~yPF=ke?YyU(LLTEL|{oCDIIVf5$@767$zHGH~#1$??ADttgQfR6t! zgXR(-y`gh2l9fOK2O73|!I2MQUIx`W;2q_Nfi&p(`38=0FCXWD-R%$zp9gmY9R~~Q zYJRYxm`DM-j)y zNB^9UVq+M+e+Ja&Tlm0P4uV`#gRkojxiqogpfqsZP)`M221#&2B#x(0S>- zEP|abDj^=dqAG%*<0MU2>l0Id-KbqhdVm3IXl zhU3}oCg9V%8I-I*nK1&?0nK;`8qV7ZYE-}IGXs@Y;HI<~X#bZHw4d;T^$9=2%T7j6 z*X{_&U7!OR8C>|+yQx5p^X%p`zT~(QbQHG>|N5gZj)0dug4SMu%U@nlTT8)AfZ-)* zn}A1m3;0}Kk4|>SZdZ;@cNtI%++CnEU!>bj#ig@eq0?Q$r88Z_g@65Dm(F?>k8Vc+ zu!BJ-&mMPC$p9634LcxJI%ro=DBPvpPeJ9}7I1VxlkqW7#uv^8B|31%1+`uxKnuq~ zx7~quh=KwMUX>VtW<$XZDo_mrJ7nDP|0N%2-yUR|DA=?q5MOkkeqjn)4i8!XVFgOv zt^Z5nJi5aFx$8^ymh2 zJUVSo{0HjdS0F)1mPCuKPG>cZE-P8)y|5XcANeymgyFr?ZE_DCxTn%Dbt_DrQml?qIgI0Q>>fa~>)(?^Z=?AGVx&Z3GT7YVQgHEss zKHbfrIaG*F&;~e=&D+5?uLeo@bT@+zZbg-!4v_~*_;fde7ObJlmqX-15Gj z{nsJ#APJxDX3&&4s{V3mP{^$YN%(X(|G>~64v_~*_;fdeYDiT5<`8+1gim)f2M41E08#aChsc8@e7c)KtL0GT zr$gjH5}?(x;V1b8n?dUv_ywCG3niN&3niN&3niOD3nlpln<1+tn<1+tn<1+tyFsff z_yxNmt0cQ2t0cQYJt=;{ZpbRhZpbRhZpbRhZcwKSWFL5CVl$}W$uHOp+Qr2$*qi_s z>;^45;TP;~fbb?js0AG0NCCB;K*bBVffftCzzC^56pk40z3I`r5wucmFQ{qj(`&nl zQ=K7gf={>G0bkJ08*rV`Y{#$*v^>qD`*caJZ}$nu9SjN#3@^%4K!t4G0UywaCb-J+ z>E`$B7I5u$5b^A0^zHUk0L|z6BnPm7`_D5#6`6B4%XCnU1M2C5FNeDfvTGN}Kv14q zoB|q}WZMN=b_U{42HDXJT4(l_k-s(d|NsA>tis5^VEi8vS)i3-Aca{Vg`K-0>$kv; zaWy{a(YYJc^>;M}Z5r;ZQGv`Y!xn78BNa5%&o9^vn)c)uY=*3YZUzn5@C$Z>!iHb4 z8?pqt8?pqt8#IpL0kMo<5WEYBU$7an1iBfr1iBftP9J0#XtYJJ8MOMIU$7an1iBg2 z*5?;&22FDE3pPWRKsQ5{KsSSzK<@@kQt}HngJ%2q1)CvDpqn8}pqn8}pqn8}pqn8} zpqn8}pqn8}pu0g+ilCGMUeVkQSpwY+SpwY+SpwY+SpwY+SpwY+SpwY*n*IXW2VR-n z3|Ru*3|Ru*4VuH_7wm>Cf$oMZf$oMZfo=w^y5JXVhAet+hAet+hAet+hAet+hAet+ zhAet+hAevS1}*L27wm>CdhUiSdhUiSdhUiSdhUiSdhUiSdhUiSdTs`-PXO5mUeVkP zS@hftS@hfuT1&w%*bQ0q+znau+zndv49X6uwXFfDSplA>0<|X;LOqaY3_Q9!K@CWs z?oRM5LT@8zN)OyR^XQ!jn$z>>2H*eY(+j?14YZLmpj#L;66fL4?aTsF>EO`~y(!KG zG{+A*IEMiwZU8ze9yCk~$_O6akh|r&IYCkiFCNbQ{~y#hRRo=1paE@}f`(&26Nny- zM?kKLec64RpTVPZj|ymt5Y*NO%^JEIe{<~q=VDnb!r#UO8bNcGfGx7y2kKH=ALDPk z4mu)3p24Nto2S?Bze~5XfboIO78TG%t&ZInFTVn%YzFHKpot9dI>r_iP{k z0vhh)cR$#>T;sL9PXDa(}Th{r~@NXNmvE ztUvHK>3~Kak6TxZ@HYwm2i^U!MFlit>d_sn;n95-G(-;yAlO<#jL^(Y0r$edT}LqC z(cK8jq}>f5s}4iQXCQNzr(V>1fy%uLph&W|Xa*H(;OT}7ny|>~75$(n%kW}5X!5OB zbcZHrjVAA1kWk5P@Bt9u3ktd&WITFV8a$W}bh{i<0S!2So3>#4!Q(*+%{xI|I?&3@ zQo$E9SwSN|r5wfwAWFL@gCsq=n?b4c|0$1dmJ6K_A+YISW8efR=D=HTzzwbLPSDb? z7ti|z7+ku+#h&pc*VY64t)RFD?LPGBjUdB-M>XIbFLm%x6}ZO_n!o@pykufvcu|b5 z8#FTI0PV$evKwDAKKWl%EDyA)$6o+6t>Mn`LcfcN;kA-ScQa_Go8$izUfnhaTsp!2 z^62LG0o6nv0pO*+5Et_IgAV5K7XS|-zL?m_!~iN9JUqIOgNDrDCyd*f7?sn*8e5U zuATazJON6&zOCOtd_B+Z6EBvzgRBLO;+0yvSgZp{gHtviycp^g6_b}`cyad%cp~ka zIyhxBgM?=7;0GPgG#@lJZ?OV2oCgX9uy5kSK`FPyA7nLWH+V^bV<$VvV$SYn6VQ#- zoowCCG9KMi4ug|)>!p%VkM460EpJPdJem(EL+%c9?jVou3qIXGuRT1Q4?>f?BqYf@f&AQk?nPB3XsyIc z&=qRk?V#SiWjkmhrBuu3Ih%?7QZQgG?aQ8790qGADQkh#3}01dKubozkSIzgu2J9AV( zOW}OFJ3wV1DB<_IvUv2e9QN#FQGqN@C;;_^orZ4FE z(FPvfGePMHl=8c~LAxPetnLW>zG}jrWqvPpH%@R zZSa7LoCnl|&Td#a;Q;DrK?@7xOYm_QXteKO0PQsCKK&vB+#O&C9rv>vW{68SXdMPW zXoUB;JE#TA0J=NPQ^2$NWdpd)8Q=h!vr&P>-XCzOcKXGhaL`;0DBB}j4!*Ye+>8Hl zplkqM`*s}3Y4F1I%$YO2PXE8(Vm_#R2pn2xVEy$H6$Q{xgo8)-&s_&NVbf&il|jA- zXDe=tc2KT*xdpT(wA;VHrx$eKPA}^dNm=m9eny|}01t?Zbv$}Sc~w9u^8jd6i3>Ey z*M0iMCo5381GyYL{0X`S!Xf@JsFaKV?M7(^rF&3tbo&<=U-AK+3j_&=1W*y40BT}@ zc6v_%-SG@=eRP(9Z)k2kP|4}hD|$p(mf>|T$g~7R^m%kbPHX7g4Ne4|n?a+F$D2Wk z9@H@C+zd+3FJ3AMKnC+YI>E;`>;xsyq!A|ybYFrlhIqhBE3c5ViZdcD}G2r3aELtmDgK{<)P zr4N)DEjNP#hQ9?ok#D&f$% zdbWcOO9N#D15hRfFOZ5q-0dym0csVV^f>sCm0y5`kzbIFU%-b^fM3v0;6F&xTj2#? zJ19fOsDM{$fofT#n}H!t1i25gUO6n>5wvgxG@ggNQ>J?(sE1w3`eITD=*%K{Q0tVx z$ScukpNvc-#ZyJE`hK`7R8pcpt=TP3uME~K5%o5 z-=jNB0kqQvR7-etGj<2@Ak01n-n_%`S{&*O7@r-=Z`ciL>@k#NcjvLRzAcG`x`Lg7 z0pW`2j>vw+aD@ff71%urnhHX84A`=U-JnevU^_Vwc7nENAna7eZ|9L{P~c+vTm)em z)Pu*G!Im}bRsuz>NB8>@v*tPxhB5<>?q<-YBoELsuP_CdZU-KZZien41s`UI3UE=| z0V*EBweD(A1RiS!o8Z&^yo?cy?!l7lOq>F1T|D4GsgHDChv{d^NrSt*=1MEudi-P=^lG zxhrLT5fcc?HK0YM;9e}~UuN{?Q!UKeD0 zK;At4;%o#?OF(%ZY6&!C9FMUvH0%bgfo3SlcIhr-ac%up67AZ3%%gWQXn+V|_cmK3 z&z(alWnhKZ=@)@uyFm#Y#d87(&mC(9Th_1}v_KqUCkK+9pn)fZoldyz>^}YC3AmMn zVHqfUqk8gKGuX0*-6G%&W!qfG1IgQ<{Tz_ItpU#w5{MiDS`Q7*+u-DJtQoAmVK-l>7uq=TAei+M$E610{`v z_AxPly33%WXM8|=ml+u#=}!bH{ecD>5$-r-h2&3MX+9RaI}8x+IMxidykR$J(-*`} z2_!o~gO~_A{czjaefq_R5UidyL0AU$^s#2JWevNfLFo)M001hDL8(>-lJ>!C*1+`| zBJEq?PPJfT8g_#=P=V8%3?%JKfX|CSP5U;uO#y3f*ewfk6WA?~v=2I%0zK_J;5G%U zyuKe2`fOax@fS1jGbllG9(*50X7pTWl zX6M-b4s__Vlt=eu(DXfc_nOG77xi2W42~_w9r>po_vr41$nd;;At5Tj;Q0TTi#52v zQ*;Ql9N59No$2kLH6OFTR#A zfn5bsS#-Pmedlfv%W^lUlU!zubbq8rcQdG;h^)WyAZT^Ri%n1?Kw64!fQ$gKEO&!? z&}F)a@Ms2gFOl^(AB=cW3e^l!46z@?vfK^oSeF@~+7IfLqUtYsVG7j`QV-D&Vp;A6 zb-B^?gF3UQ`ZZpBEr$3Xq`v5OCs<$SZqRUpgT-!8#Z@Ba(LEW|-Uf}DE(a}o>)Z|D z_JQK#1xuv>Lw6gf$7|UJ8W{l%&-HsV%r3%o|wogj!yZb;EwVo_7<(Fsh=$-~@>vtdb>18?8ebCcVqExKc@xMnm z%OTHBhW}ut-EANZ|BrW{u>MhW4l)i0osVihqTm<KaM#-Fe12IB1oEv)Qh_ULtvK%8gk*jx1PxGQL~j^Q(Zed>i{ zu3z{+^Vi2du-*=ulHqUO3mU2D?gu3?$DRBP3=DqVE|OQA_yv3<_jq<+aN-vTkv!vZ z@RdNzB}e{kC(=Cl>rSQd7vJP?;dedhdGG}XNVL=Uf=BWxkAtriTsnNeICl5+y-?L) z==8nek$eiQ10i$=st_a+0b1$p`v9uw5=ck^Ec66P5k%yLNAf93$DLU~ zqgMO^t`{78i~jQq_&(qlblC8TU%>SPzo5qfsJB1y3p!jN!S6r7et!V-`-j2qcc{N_ z!2JCJ$=^Rv{q15s9TMsLutmBI*yAiPkBbaCkGr;BLXUMui0?r=D!`F0faG}vRL|p0 z@D5`%WiNnc$$(;UwV5zs*6l!%5IH*+B#(y+B)oq0>pk zGuc4~!Ikh#c91}DWjvD|6hK_ivi(jc1?ZChP-7SqbK+a|INOouGZfQKB zt-;Xk&(Z0`(t5Ilv-u}uX;JsF*Q}tHHv_+BiHZTgW{rwMrxS;RMY%+Y7-$~@&u4yt za*@yc0`&qfE-MQ#yyoB!|HdEwzx!CHGibX*HE2Uau?YV*cS(MY8Wjb8jS>}uPG^Y? zj2@lEG9I19DxgtO@bm!a7zXh40DL4CDgyTzgy9hE3EE6|iN9qTxU=Ue;R-ro26O_3 zPj{ezN3RnPs5TOC?Y`;JZRyj?E4}~Uf28`~5p*MIXT%qeUIzu=-XH-`>3t}TzxW16 zXTY5_PyV_CpiZ zJ^)L;F+SN`#lZ+lDIOm@n_n}QP6bta0vi~k4;vkTwWcBSFW{*c1&?kg4j<6TKOWuC zjnAMfZb02b56GY*Y(@yW_jwXGsF`{G#VT7+a}gA9pqVHI(3A=@$Q%pE;-PNrx=WzC zbI^4g|F^7`C`<1S76C19bTIzbda1-0QNOx$2P=RUZt}19R&nh<)P2r{fBiN7_1+r% z>#sX@AM#-KQ8Dmf2CW)lzS!+8x`gZab@Hys&}-W8EEX= z!K2%m1J#}2%LhEVnX!t-sCaAubw?DybKRg607~EBt+NWC71k1=ptBu99m70&b5t&R zG`<0iow#(ra_xTL(f!l-z%Eb$0-o7(>Hgr@{qe)8BU!Lj@J_Z!kDjW0DnWC5*{@oD{5$^*^;p!q0=*WS(lm`aSA|1p;edVr2S2Q9C5 z+y|OAdad33kCDGMmWhGEVmc@_mT-erfDiuUcieZFi-7?w0BX{JP3&~-_v!WR@ATad z=6ZDdgHCAgbY1Sz>AJbobvJ0mxyNzW>7WC)eL7R;dmMLN&B(yW02u}ZEvND5b!`W^ z%fh3V)dqC$7-+i@$k`g81uYJsL&cy|!tx%yqFK!FDY|rPP)Gdqi~Dj63@`73do`}@ z9=+Y5MiOYLg0sMjmP{rF;{%Qd-!OS}IxBc|Iy-oDIwydR+l%t)bq4Lz>^}eE{xi@D z7SQCN?{Sar&~{hj|HoaAt1~b#fW6e|dfL_afKO-bd6&-A>z%I8eL8FJyL8sxhIj!q zP2@aD5N50&MVc*Y_Yxj=O&E5MyBI zbp7npS^M9mGnKv5mEWbamK$uow}(&n1W^1t{=d}xkFnInr`I_GVyHUUP~UbBaAz(8 zG{5c-I*ni4qtjKq+cm$_RUT}FbB0fM2PjY+|6la!tgd*?0U}$!l?s9`?Lg@6bguB} z?FLOy`*vD3|6?ju2FXKHG-#$2I=9Q?(JRW#B+Kx!1axsu>o=cHYiOvubXIflPd#9K zsRP^vf5Do;#NgBITJHhcw;n9;!WA52hhLjoOa}!Ucy_Cj5iz@^`A>%7#fQz{*{wv# zO?_e@p|#UN%XmN|N1#*=8XgDb5YO&t3(xLi56|w$p!2L8W8&ch2+;fmI`0v-^wOpK zlTY{0U7$7o;H=~bT3Y_%#UfVF+!ScCxWpX1#@VG4awI}$21{oF$8iTxKZD`8g9@k- z`=SJ-y3<(#v=#|`P0nIg(5(9F98hT;-~t*xs8K0!fgBwVS^x>!P7l3}t9Z`8_zzyo;G6*72UVjI04g+*&v$f; zgDg@36)aE;@;?V?i%XbeIB1@r;WK!*Zv*HQYEU?QbT$4D-tY_!iu*5Sv4Fw>v}Az4 z#gYYl?p<#$Xh0OQisr>FT^Z1fd9QDS;||bj!WSoXWf(k;yL0^i|NlRD>6*I$i0N_M zT>?rgKxqvS-R&j=+Bj$cA{;;~T|v8HJ6&6LgGv&QUe^Yf&KeaDP$qKV7jRK=IPMBM zP?o``v$lg@vlTQpdE9jZ$RN;K3{YI~3;2L4bFdp-I_o(=dp%rdc=WnXK^WrFSv$q2 zvvv-@W-DlsA&Ptx+j@Yd7A!L;Z z$SOAt(2Pz(_hpbx9=$A+JPtl$JYd?dc9Ui@{AWwD1sDRH7 zNbu?HJ-`E+qI0Y8>1{p1!@#f$IW=mH=H($Ghr>48u!MN5G@I7i2F) zzXGUGhw^WLFDP)5aQuG(v{~Ax`!x8*Awi$+NuV+tR9OZWQ858EML>a~0ct_$IJA5N9f`$11+*;= zvRo^m01`HGkhMw-pfKw`|3UzCn0)u?7eBM!OK2C=e9x4 zWvqcL0D&$yM67QT05=VxrFa3P6rTXPS{GD`|8zBevI{hv1PPk%JD%MiUR?YK3K>X2 zKA#m@kb`n8v>+GMfEMHvpanUD2Cjk}TyT3FcQ*i)nn(q^1(Xjf;6by{{~f#CL_mc* zqJ#%EIXYdZz)JWD$6ZuF<7MC_*|0($v{s(Mr!#d1zh*1APz=}cY2uh|M(1Ap9g3&;q5&0cVs4=Lqcp{0DXW4E7(M{no^ zlww{5wU|%BUChJ$fGFufP6L-SqAUQkkqdkI2rA0JJ%C~l6el1L;r0VGJy`rd3`!1LJ$k{dvCbG3@ao14pWfaZ;40I-0yGO9 z0Ie`nR0=>9W&-F)+=}C_pd(ixm%DhA`NT} zq*{bjndKj47+!)l41mg5(2*gaJsWm zP<4sjf%0$%+G2O$KajEA7hb&ULUTW~x|}8mu3^B{Wdx+U1odq|<-2Ehw1H=Lu?47a z1G=sisc!?SG12Nv=%nT=576HFv!2}-9J_CNcK>*>RSvv>uZVwJ8z_jIf3uVtw;TX> zyC!{rhOS4i=%x=c3@<8|fxBH*AUF5&&IbvZb%EBHzfOf}=||F150ZC-Xeozi$pHy5 zL$nxy`X~V&t+zolj^|(Wf=-F(WCksmTo1YyvHPk=_lXzJr9ijZyMUTr7N7yo7|=56 z9MH}k*g*&IVL=D54;?o$I_>}sQ@l9y9n_TqRdS_lpk?~;hrtJQfPw|mdwX%}J3j;T z{QMioLA^zW7wlkHICJa-uW;_PIPNR}GVHjs2#9*|;yXVBXsWZ*S;DdV0w~uY#*aX2 z96fr26db!xcyz`vJpl7NYnWbu7%rVIOg|j|AK+i_uL9zGF#8L5bowxTaBTbmGP&sB zi#w3xF%+OxKgNN5E}$C>z(YZxBqBXrf zVhrE|_&C4HfSmne=VpEe$ayn9-4A>^Yma;MvOZn)@4r)b%Z?MO8Vt=pnTpwWf||&$ zxpskazV#`7_fwtV**W9eoxaSSuJ60u6TaW@=!|{taoqJgsJ4(kdEE6sXjgvYL(pD| z>uX~_dvwO0_vnnhe%$pwNdCX5h>Hy9&KFP6Mhl-_-{&6P z;3*B??jzt4iGT`^Uf1oQy1~Gs*Y!Lo+Ti0Sh?!;gFQD{s{zbheXsGZdXosH%t}zA4L$($`Z((+A{Z=UnUP~n^0X5D5VjLqA=&pzVB?=zh zz992m=(c6ZDIA{NSHO<;aDW>m0%?X`gc~Fd zF$m?3<8+W&V4V#hlO6wGK=R?aPax-=f8nPA4lsGhkXX7;?{ZMj%cIkc!>4yWXe(W} zYrRYN=T0}!g=Gg>28^~0~~z(pkhA)w1FZ3)MJA5>pi;LLF@8B z(Qe_<-3}i61CRA}w}X>6czt|#J2*l?r|7+KOZ)%d5qy^(YtbZ+?$Z3-4B*l7+VbXo zps8a9(5`h*--p4YJ2c&;`*inV&{C%E^Wc462OqF_G#^m#U_J)2QQ^f6F;HPxqW1r= z^*oU7qEj0fL5p(0_B9>>Il(a=yd?v)5(S(p!2L6U|CfvoyuJ!5cHtOwE{Os-tAcid zfJa*3cfErKa6w0n8Xo{R%e#NL@^Aal?Zn~I{iFFo0{9T0PS^F0&CexYsDe(Agj}2| z=+Srtq{|Uh+Q)*rNIu=J`HtNVBA^4lKvVFZy%8edg^{2Qe9ab2r99xFRM5!b{MTH^ zT|rxc7&={7JAQNEVDjkYeX;D{f5&bInNHWmpvf7R?j?<&GrLMk9J@V0NBA6gBg4QS ze#xaXb^Cr$u6<#?7IZLGZoWsa=oyIIXMRD~-HzS93NNJB@-u)K9=)PB5OVupFeAiY zAjA*9c)f<70i^r5XK$>CZ}(A6-7+%X|I28bgQce%IFj9=)tm=hPS+_k#T4!S8Yc zWV%bYN@MqVkK?YOtEm{8PqH}jZ#&jpyPkpH<-Du$rEfQUIzz=>Iz#29|2IG9aBQ|< zDyi)bU3}d2Jg9U8UE#~>*nQ}=VCyBwZnB*W3=RyA{Qd_$I$f`~UUCGjMDBFG@7V1i z(CPZzk$<~`NLr`sYY+o;33ukwfB(}uUEjKNroQ*-PR;jBc2NOMr!|0%W^>#D>Y{YI zes=6W^PuwA9|GRXC{)Ri8 z*Rk72h2upaJLojmOCH^^={~)_+g)4Vx^y4+<##y++IR>qqb7lKVs9urC_!6z^onkK zCc^+?8+i1F@`IAPhEK2Wc~F*wbeN%sDb~LR6*s3}+*byT!=HO0&JSwNyo>^`e{^N{ z>CR2}=ma&m|MRyz2H&jerU6>ab@oN>`Tzex;Q>k!j!XXi2XzoYW8mE_;3VqU%>z1@ z#sPBHnrnCSPv%mt<1Q*LoS;j|Vw!)llxi9u011F@DeH7??{w|ov3k|2RgT|NR7Aj& z4GatiUomxtPJZnVngW#Rc3o|JveUP{)3@KF(|0;ZE2z!h={otfUh_|;QVEaU`iJi2cK>~3yk^ny2# ziJ`l8HTXcb?(>fP>wQ!tI{hSGn7#+?B6br1Uz>UI-~a!{mpVh2ci#f7Xa?;zPlK%w z0{guC7igUH6%%NES?PRmg9Ikezy5G9kA(;L+#MUwPTzdbgU?w#J5AU@LXMp=>>LnA z4Lc8r;o4ckE&yUUcKWc3fEb>gA?y+`h6aq`;rPu(g@cK|1+-+tqdQJu7pU%c>^}FR z`W-)Lt5>IsyhQgcSJ3S{x4}j6C&>AbAOpb5Ts*ta`gXgpOZYM$d(nOt5zEnwz*DuL z0tgnny^jA^{`vp^f2nNqPo@&tZrA0VuFar$0L6^Qao2WGqJC`wiXIV=FerLDW1C?T z^3Ao28S22v0(?82Fh~t3qK>;ZgW?W6oD2>i7ZnFktbrEY`*!<)yv^v}?PDn5(>(z+ z;O6-M(*MJr&Bqk1W9RcXf!6D}beGQW_Ra5(T@DTp7XFq_Q1b0|696}yx(|9bA8_#K z<#7OQdhuaC=-GYt#jG>`|ASoQ(aYO^QjGzexr_5N>KtX-L?51-HhJ7BK4plTc7R;pp#$xx_!6;K<;<^f9W*~NDa6gYuN>L z7U(3yUwx~y9hvzlMYh=SI3V3FM$*J|KlJ}Fj)WK zZ&LsJ|NsBPow3WUV^{Mx{rm%33*lPt30j{QrtpGO5md^64@v~phT!GHptS(#)h4)( z2DK<5`-wo)!Qi_Yz^9RcZejT4)BVsgN~O#)4Y_^qF5%IwbHk&z7c^@1LdKT~)PCjt zf7m)+rRbqYZ@kKDUXRXvftR3i!J{`y#iQFj!L$2}OSeCVOSd~qw>a2WpvF$X3%N%i zr-OPYC2`&UD&6i1{|{Q9D3a{uVd%ct>963??Joh|D7N)As623&=;rq5c9-z!v^n9~ zY2VH4*y+ykpV_CgUcj+o5BO{^h7wVqZubPx5ga_8-QfbB-Dh6>kOv*zfjS@54cYpI zdbmE~{5#nAD(pNG1!#Euw2ZPrTi@tz00|FYj~Dzth`_KZdg9R=Z}XbVqcdOQb&N-E zl#NffKlI2y&+hXt9({xR-LBi;rrX^D#qSm#-Tnq(zwdkn_PYVt?*^ED*8p`PQBPI^ zUG@?Oo+d+jAt{tG%4VLxj6}|8P){;+~&JURa21|hx7L)+l53<_#+d+;} z4~YGsJONe+u^+S>7s^GquvFpOL5EUlk6uw5xLv=d@iQPCiEt3aLXXyyC7HpXb;BOb zJE1M!o1js0gA!qnZchQkBrRkiLa(>Qix;31vwFQHUfhQ;B3@hrF}l44KubCdKt^&x zhEu@95vN~Vf58t5K!xbTXTXCqs~H#=Aa;UQp+K$-0WGRQ($o!JyNNCc+Fbdf6J%O< zH)xsdi&_X9v}E>0A%qQD{`w*n!Uip6eGv&^gO;Vf@P)8JONL)KLfD|_d|?V&T{}Aa@FlAf$mdpg%>iQlB4@HXy_pN<^AXUsJDNd0r|f~4dHiA zbR$l`SoItpSfKm`T9=APy*CHQ1h)U8n{^;0(=UsRzfRrM~jJL*%9MC>5 zn0xiHxEFH1B|LwFuL*hU(S5V~tK~{ibd;Hc_7mBFwn;KTcaM8?^RRn#bG}&c7c`dA z4eIlGbn{rgxbTdh;r}sf@D|yklOEmOpuJikH}Sj>1vTwDSAzw*yFmx{K*axo?>Su! z7U=E<-OmOQe+m%?3v_o^fcm4YCrfx1E&>3PNZAE81y1PLtUkE${^}oA8=NN-@@Vtok z0WCIO4HmFm4Z0G!#2;ka9FT36;Pv1r_JLF&?E44~o@THh)IN|#uzeuG7Yo2g1A>n# zg4p-o8*Crw>>`jgpe#~mf?@-x`-!ljAG|IAe6ENG)CQ2AqB9`fphJ?-bc2rFKhfz~m+`0@lCHlVnE@dCmIRi-cQK-eHdUR;2%L3?yw9D%Sw z`wL&}fUrS33ty~(utCf9Uo3#I!I^c+6Mly7ZqS(Qi<`5-R)Lx?pkM(l2J`3!A3f5! z8Z6k|4cg;~AqN)h?gk%?(t5H4MITtOyBjp}fuRp9*zH{alHf%YQJvWZpzX^Tq6(n3 zEf}H#pd%_kqDCMSdP7tc_yt(gZ^|$@?f|vce7Zd(z^8SCwxq!hw}AL5o5Q2qI|HPZ z^Toa}E(VXz>pso+><4oFJ?hR3_QBMEg)(-AR-o^bPOt4Z2t(n;CJ&GY&x0I>yp6^hWDBG&1d*Ut z9r%151>L_{i%53vE_?X3m`MyWDw}(gbL5&wTKv%_ggN~90 ztu6GFcySzE;Mzk_pm=+LYSb4ep_~^7AdG+)+aH1p#_gb7RWujsLXf{e7rcP$P|)6X z=(!l6ss-Fs0XY{`pYXRFVPIeYpTP)ny@f~jOXF{#y#pSWg%V{2V5fs>bO(t0ZOS|j zK4;`%->hz#U7B_ZeIn^o+0o- zoscvM$^?)++kN)M4v^yJBMP8JRv_2H?z?f~0Nq>y8=Cj%7U&M*c%l6ORH=ZPz@^-f zkOJ@d|Igel49;Q)A2Gk!{(zsMoBRJsk4|R}&}pQNkn#9#&_ueoL?dKa9@GnZ(fa^( zXr2K)%#Jx8F8~{l7r-(eFMt@22fGM)NhbgLKnag-PYp-r3m&~JL7>GY9?Xsc@c9Q& zd+$YfuNY{g-J@4@?Hw7=;Cu5Cjh9YyK$!&`9-!D0fbJhj@aVpI9DIZsXvE$4f9Fon zxa&?(clt&BeNfA{88ocw(HnZeqnCAW7HGhw_5x@fRj2C-&_=J$+7F-k>s=ps9Ctn7 z3tB&M-1P>imHNVQ@&ErGoz39(Z0mti&@r`f4`D6VEj^$JW!+m2n$mYYpe+Qt-!$}q z2gK0hu6ICv>f^4Ua+~3}>l+a7#fL>;1Hr?fPy=n@1|~xcoYM(0uo>0B7h52DL1U+& zC2=6f7{c|cL-c-_4bf|lrnds37d-d`wO19c_jNbeBVX1+^iD_9YXi{>9!`epm4xeE z578TO0HXIWnqCHoUeM4r%+0)Ty~SX?p$Cq;o&iOiNB8ODt{1?pzru!^h_hs-@BGRsa1W1DlrNru6v`<72HXnx|OXZLBh?j_*qA&+jR?#qbNaG;y}bZ&u~tLI+);Rnws z*fB9MfCsQaN8y1Y9X!JQBJK{T+yrNK5wvmhm(1Yh$!k==QPu0=;cEQW_>xa&hQf;% zwoDA*5whd%pym$bH2N1pAhSB%Awy)K&ClQ=D6l;q-8Wu*z75Jd&JrHIq3=Dq-35F) zGc=&I2Z;9Qv;a{qof#rfngc{1cK{XI3?QaUX9f?{kv`qf^*FKh;H974uK&RnbvpBO zyRw7UWA?Hx>W55^faWziomq}MgKh|6@Hp-acC$;T_Hk#>UPA_-&TNktp%B-B&$?Fy z&3(OS28nc^e^CvlL4gjfEQ}7k1O>@)$VvP@z3v*vAqVk;RxVq3fG*Fd)^O>_cJSzw zcj?UMcwxBw4Uy+pnP0_4sku^PoZ04(H2x zfS1(Z>h=uiegL0dQBXPN+kLb7Cs%ouNAf|RUf#>Spq$XtXi&_^;K_XQ|3jZ%-t-4D z46kE-dU?x0j1Zq*-dYgD+ozYe1;lXj>E&$(F+dwJxeI`+4#eQ`>E+!BVlex5pXxrVXV{Z}(vz&?<$UpmFdQKRUoYP>aJpy`mW~ zEx|}y$}zM|ZG&pDDq>`CE@EWxDPm*@En;MdD`I3wFJfdUC}L!&EMjD6Dq>{lE@EVu zQp5=E8bjva8?D&EyMlj~s)8y!gYGDS7l-P^7_4uAD^$=uo#$U%{PF+)u?A3|lMzwF zf|SGB3pYKwJHhSI>vo`P;y_E`q4zC>ry<&l&7l5=M>o$859r3)PD{`zRH?26hQ>4>REI;&FL{xJFdr)Z^TmqyAoD?*J-R1@ zM3K!03q#EZ?ZL)0AJm_Nny>MK2Vp)`{O5}q;J^oI_UH!h?nX8rEDSc^qq`dv+u#%e zZWO=#Zv(v*1Cm!kBshJ5n#GVty(4HH%Po)YpRO$jN|Zgiy#!#XpxGQ0kaheXkOQ|o zx-Y*Fc=i9kPq(u`_chSDZ9)e?rI@n-#6I{{9O&f(>UasLG;0ASc}bU8d>-I$!eKi@Tt0G~M8(F0k_^K}%k`K`Y=vdy}!Q=ZB1EgBFH> z#sPi1AA*<0wq7cg2j59M=Og$imDby(F)!Ax2Q@%izJo+wdo}-MgsTA`InjE%)Z#@a zR1HYvwOaFECjM4V(Akh6&(HY?K60t`cB#ONM5sEjNcW9yAC-h%pr$KmsN3O1@`nHa zyMsAgx_>ZVX#53QSW{Hu(ajB7N7L;o0G?j-@&GMDzUa}-4B7^AyaCkz1kH-PUhmJLNpo2ADL##N~Vh1`t ziV3r~7u-VbKL27mgbS%o&%fw^aKY`^?(;7yMHm>2 zZ(Gg>^)t$pJ-VlZBFUrseD`4w<^vwxA%{3#mw`r~y)2y2q8WC_CrIwarAwd&8@M#@ zh7`%&V2($p3F!I>(2yW<0RhjjFK=2Pl@ieM0eO5=!K3@7M>pJ2T^0f$@5iZ>NrBG? z2$KNc94T_^g~5ODkVBkG(MykRzl0YbE`s9HPvXUMFyq{d`(U~kQA$B_CMZXOL&P81 zC7{v@vi}h!zHdUD0v>buZw?9{&>&oQcMPafLJA+y2pcSXKyoiOfh_L?AEn#f4blTW zR~HgK5CQNpx@ZO3%bn)v;S&xj7d*NpJ-UB_R^EYzmK0tTfgBSo!Y{xM?lT{J#L6$o z!UVY~%7;ndzq1HvcCIcV4gloCK*hMixJBmO}~f~(Z-?lWlq1J#o-|AFLQT)F^` zf3SErxYmSLz2NwV2q0AuNbzrm?mxu-0H{x2g6}qi#Ko|ipl+W`+4}AgEJw-D>13U%Yt_h$)mhU&DFS#0@YWbs+b8Bl-k>9GDAFxFdRZJidSwoJbo(3>c=5tmfT5e&(wU`59264pYkHVptUC+JBhDP%-Yg#7 zps_HM6aSrAKm*h-E*pdLWesRiEHrb1g8*a|Qu))}2)e@!Tm;>;Yy`EvixffTcS6NG zK?DBaSyyMURgh5b1}TJ127$99L;z$FJRd?l4YdzZ{x-e=-ALfr{lf#)3i;^R_=A<9 zs-qM%hz1^k=Lh#U8$c(pIR3xT{R6aV7_^Cp0dy>`!*0;BSXbkdoiQpJF5SmLU0xRz zg`EsS3=IE8cL;*kj+Po*fY&USh`WH+^NC(M1RA(F3hDZst>k9_9oN*$yZaC*!CrmQ z9m~(~I@bCyztauS_-U{A|ArbK2ZegJ?whSAOFuyGY3x3H%!S2)p+pwEU;(s0)2I8W zN3ZDALo(3aS;b(J!RM(tcywR&=;f_EB*XARCzhW9v@{#!X~=bg*%F@J#h@e!9^?gw z52#c!0Bz0v`9f#$|Nr3R2x{_l-*_Pd8nlDl)(lBoo$cTjc;|dj!`!1=7_{6<0ool0 zZ;;Ud2Ve)NvIkE#fR0CQK4Jj24O;(z>{EbV-U>QSp!-*e6R6;~1sz7i^$xU#?yyI% zsDqpggGVo~qa5f!HxI@a497v`9=`|ZV(%M1-Hrwx-RHr}Tu;BadI}^3ihpn|0IBOh zB&a{_+kMfuo6{5A;aB+Pz>&Z|^+1P43HzY zx_^0eb98%hyx9HV|9?EEZuNjq%>vmB!353AegJB5<2;4S2D^EP^xXVL!T7dk_YY8m z;-#ZyghZJpC>_E2qdvVX(cRZT>sdh88!)>IypV#lD&i%I9z$zpaC08kXnIiYaLkcr->-k*Rt#zOA?oj2#s|75f=;6H=>FMysYKYPyAd=S?`bJ>pd|AD0qa9W zU%DGXr$Sp_C{_G_p!-56nCH>m2~q|wIyg>(N~v}bzq=n~6f}W@MZgC)LAKuiZwE=f zSg8p)=O1Yn2N5V}@#)bGb|2{2DTMn#D*?dn3xl~2bcQs-eITAkcPB_0*nJr%!0rR_ zyZb>#!Q2NDfw<3G<9|Cy<^>Nv$06bi7Je?>ji3%K=wi1|9^E%Vn|Y)>x+j9V!jSnG z4@;9nC0_pzI9eYl`rO?JI>y??`T#5>L0pgSPLOi2OZS0tU}rOk-`x!|*rOZFfwcJ` z0-#KYD1@D!g2pH4@G^w^Kr22_-3K~f9N|6?&!f8&qzvr78OOl!3F3G6gN%Z? z4Y50kWn!A zfkdG0^Z4Hml6f&ljim5%>23rKDudG7FQoJangNETH=9Exq44wuYOW!rHxSpOyAz}w z>{36lOPfJ_$YlT?-Cz!A(#@m$^#5j%Wggw)FOL2OjZ~l}J#ZO@nE&k+RX7c*ay>I% zY&YX#0Bz|}^XLtZ@aX0Jze@(Z#j8TpquV_0~KbVyET1vH5Uo`?hO zznuVT+Bp8d1W^ZDuhQMwI5kB2_JR0ACmiB>c_3d>Q@C5Dt0S$2XiiYo!VQ@U| z%mJF=2iLk#yX!#LzJnGog05}^EiV8~&wg z=O^f-S@0l|gMy=_gH91Ecs-y;_gY9Z$3>-}+gFEwy|0Q#cdUR1^Gy$CUkQ&+j@EA_ z4nE!dzO5%q^gJOa0s3?w2InWxUV8R!z z^25vMcc5cZK};|Pr&mP#50q#@Eh|V@{k|G#d<0a@b$5fRM&$7$aGiJoRBClLgXCUJ zIshtV!PO(qx)SU7!Av#u@dIf7`3Z{RUM~Ug;g>I%6qy*Be=vepDO?7PA1l3s6@lO! z0rm~Fy^YI1{9ylp+VkDrpec1^|A5jxY&--c_u|lguz$ef-5@<4-OV5lr0$0ZVD-;Q zRdoO0a!MP`~oji{^Wv z==cDd2zRmo-{k_{y=t--+F|qP75%bRhT+BTY|wfEQJKBqzRts~ppp=!LH;t+AJn%w z4@#K^FKR$*0=lPx=5UQ~gK``{DDJO;meO_31BpTp7==sihDd=H(Rp-F19fZRQsDKI zo%6tA;5maAakoK^?guZ%`lKwt(A^I@_n`G;iM~&FJ7~S#gzm$hy&?xZyIBr+SZb7T z{6B1cv*`6}fnLY|V6jf7|6na1-4H|0f^W1r_ri29$PZ^_~Ae9Z&VyMggF6Xc{-bcY{411|qSN8Uk(XF!8U z3ZUv0GDgz?S{4ZE!6GVsw4p+HC;0<-#PDTF5NIX6uSd660wg`$*$oQVb1$acUDcrj9fp=`P^|x_0=iN4LlgkM1CW7nL6%9Ws@oN7zCeQf`CNItYW>J1*T! zF5O-%(4rkQE~VhY?8MO>#N)_(5yaK#3{lYmwTKizMYRgJ`hzqPKx-mFO$4|Hp@#5p zy98Fy0IC)}|33g(1;!v>A=THQ(J1)*)=lv2+9}8G7e3veUMPXnDyXqgYGr}AT<`Nv zL z8u=h*9fz1@0unmy4KnL>wM+Lgs6i*$FbvvmcUd>!8tsbD&F9K!lw-jSUwEm3JR3)J zdh!5;yupi}osjh8avPeSJS^jFP}7qEN_tXwq4^Gyo@|IrPagaNOyI-rR?^)8s*g{<*!uGSe{lE012laaeHf|(WO;!{uV~yF zkTPiJ54^cv3zi5^%Lp)l?tSkSWrUiQiD4FaT{ze*uw%il1Rqup>KlUk4<699tfybZ z^nfPF+aYx}_-0WFm`#Z?0t~2b1e*)lw(rp`1TnS%bV&?o`#;=;ns67^ZwGnf^o!#! zP<`9o46^V40r1SZb+Zm514EHK=ps(gMT*ciFG%pkysh9iBB-&^-3`*?u#M598+<98 zYxf^eul+yRC}_O%w}E!of{LgLpUyQZpq%Hp7u4AY9ghI&^QKL3?fwo96VHRsSbUhb zgOY@2w_dlafc2pg*5)5frOb}qS6sV~xL779l(0AdV07hoIqK2v%K`B%=#YZe0}lM# zzBzWgaX9jOd;#yU2hA(H90g5YfhuB1=yvVhJMxSm62XM>a2V<$MNB3lqB2dogKJC#h^6N$Fy#N0lT8=sJ zPd(-VTCB1IR5=8IYeY!d7a}FV;K0A_m`C#wXp#k2uZaCR#~MN74-7AM{{ppa5Vys8 zK->yyc!5SdKqH3yj?FI^OE?{ye=wFX8yz@|eCjc%eE=GnaNG&rHkN$IqgPZT9lSAG zg8_8OSxZv^=*V>!6$Q`a1E4gn(B0Am+DQ(+D7@1}1$252bWX4JKm}iOjfxIK89R9F z#R9TM&H|~x2h~!L_CXlvzP08z2A;`3JbHDvq=AlgxCyoZ${7J3IhWNLx}_Ef`DU}AXh7UAT!fTjDMSpN`eaG>q8qDU+;s&6^KOm7u0EzfbD-Y@JK%7(`&mg73AxWj@>swes=8s zVf+?kgMv@5Nh>JyL0L=1xx2*<6bF#-0C^o8CScoP{^#j-QBi6AUn;*sq0}DIn1%WP ze99Zh8}W{D@rRrLGnTTgP$;?cTC({+Qz_dDhmwo0`I`STm#{YfXDMZAIZ%1<+hN8M zHvU}?IE%M^J1hZaaul!b_EFLJc37c=rR8Mhyl;mcN?5-gbSRnf?JyHq1z&L|$ejur z8Vq0`fL4a0JGe6kHL>t_1pWX2|Jz}f5$FxzTH6;KA_n`P(*@G+4bo@whLsI zXZN`m@v}gUw@?8PoB272ea#be5-VuRtUCv^W~T&nAXJSC=qzpn$GDgGo}mm@K>I@q z9-Tfa9H2u}VVC>%LeAa+HLiWT4LrMl_;hRebpPsh67cDM*d4{=*?sM}i;4!w9WEU{ zDhjUM9vrUS4m_asww(c89TapMH@L^#6bNjZW9{ZrA+Q z1Ep-;?h2itlRiL_{OeD2`Y!MGmw90YQgs5n((1*(uK)kL!xg$eScc}8a$DakWjDU< z(tY|hhw*L5rLC^r;h<5zv`#gKo6p~-&&a?48LxKf_E&K1 zb^PCYpd{0^`;cq*D;NItxyxPn*SoIv>2!VX*d5N%eVTv0Z@EXe>wS-I2Lb5%Ew5e{ zO_0Pn59SM=%qM)hk9jipfhvR-D=$bhfQ1fbcg0U z{y*sm3J2Haj@=je*N2uncHd&Y;MncT;>aA%p?%2u1HaQT{`Ik|UHI3ZbLl?d+3hOe z*nQH2c>>4+59ZS_tL!dFGjzMlfC2)PQoBR*nZqSqy8T65y4?jjT~C8!5Oe_2e&gH6 zT`z;eA2f>F8KYw0(+x2Uw5A%gk{7gm*P}P|yW{^$5GNjT=?u+xu?|<^Z@T^ulo_sp z_IBGm0Wl%r?%93qMGiQhw1DHGVFzeTnt{J16|{J&SMpbSqwkJOMgbtxkd;0 zTRwuWo+l8CCE$5!&@r0)Esl(!gHL@0_}7;!fa1f0c_KI*y1@(S_}7=KxO5+TVRT*^ zwEIQ?G3gPgzyY0y^>)Is<>UDvep5V>cpkB5| zHzTYWD(=(m0cwMSuk1o@=J2=70?lf4^MhMqKHcunCLE}P)_R~4dJ6v^a7+923zd7| zCTe$#3Vh(&p94HF`d?JygET|)kN>5Es_mNc|G$IM z2XHg(AxQJei=aS*G}G1!fC4K<#RA+`>n>42KVS{gzH(6kA6cjYS`MV(+kL{P`;bTX z#f^+FWSih4>EP%&(-EQ~5b6l42b$j~fKKLD@aT*+@a=x!*nJQ*pndQGvqxvCgGXnr zhimswk6sUc59<@Vgs|^t6QTTP6sDmTWvzyPi+YKcSD@r}P-8lXq^XOy;&3-sqe=oY= z!oSVc!f_{PO@e3lRmbl0|3x$3L831fYVV5Ho-f1j zqAC>Z`REm3&o2N8nOlN94{5@?bUVm+HXl&-YPLDR;MdD?phOl@^?G!lcI4l7@x`gX zpbh~4RM4grh3LcJhBxRW1xR{w{C3lEH>hdv3SN@u*!T!kv^sVlZ2rjzzOLGl-{r6i z_XUv1FGhZsgAg{TuK>Ewh5L|;g^!9x2|q}{k$=iT$6iMVM{d|{=MtRlnEeeT7dcz)0bP)BnOD`8Lzr}n>QVBp{Oqvb#ezYpXxU(m=AH>h6*I{$tdKf{Zf)ncH2)^X4fFle0> z$On*hR>cyY-H)NGo*-cfB0(*3i7-&trSXjdGXsNT_YeMUuUz=Iee~!R-M?0bq5Hh! z2F4em@%#+NC;7L1cu~Cy`;T{<>E z{5M4fRG2$-tN{C~`^52v7FGsO51Zk|rdQx$N_PuzP=L!t|DTAA6+Tyn;e}iV{T)MqgZ0`v$FqArhcQ+h7_=3%``GGzEHc;{d4MZFG^s*+cmtg>{7TpD! znLqe~kAK?<&>5AWGhH1V555$8vGNFL#hqo-3T%ZJ>G%c?64W+r&_vR;CSW_a|n9+v})7I^fs z&XEN(D?EBx6=gt7P_kq2=w%g#@Ia$n9=)urU>$9swHhA1tn3guP=m#zm-Qrs2O4bh z=w*!-0J*LWG#u{H%gQSa=4}8Ki@mJ=U^ljbW|cg8SslTSZvzzo9=)v13Sis88#a1b zO(AmN{TjWj?lNFgz}q!?S$9Ir1TEn7=w;=W1Sbs!$S ztbr0>Iq=quUe?2sU>;~whet1~D1-;@jrFpYgM$iuO`=CHt0#m9>Y#Y^vT8ek^?}+} z9=)uwj$j^WsLG?4bw7j$8U*y{Wi5oLbO3iISSP!KRe~n=JbGDG`M^BTrUj2))^rgt z54;uow z_p;_fVhprc0hIpL!S;a`G zWnBqQ;%%Vy=pMbS)!txz;5{k5tg-B1o&jk0WiM+y=(z39HVX*vqb}GK2MEtt2h8(; z@TNjiYXF3|T@@?`K1a8gRZ<>oW&%V`8WMsT5S}c=lmgHZxyJuJJLk=Sh^s7qnGt3Bvd*eI;$a}GJ%PK;dt{NcF=853=A%vyLYfN zFucf{2OjU<0Ag=q1|6Q$e1L<2;l(lt`vizR3&IAKW-t06Y|wcKFPb3i2Ou?N5cUfY zI}5`80Aj~M*grt*APAd*lY!xd8-&dPVp}l_Fn~|i^5|?9-~_qy4m$$_sLAHix%&pl zWhdtHGwcLiedE#Dd;uh|eJ8xQB@aWzRQuZPjY?6z)ghy|g22{cSqaY6et3-T~ri|FBzYFp#o73+Q0(ZpM43e{QO0P^2cB{O!-$`u<0CNSMYwn z0#k^O0BZvYy+NYOQ6wHR1J{_W50-{`VBiQsy z8xW3p24=&QXF!xIfWq$%g8&0KF?e(~KVS!?t}pBipm9S`9{2!COj)z};py)MSVas6 zJpDz0%mRvk>lR0IQgT zP%#6f;sBD031Ag#5Gq!HRLnzCu>h=M4?+d#XuB6RAQhmr>(SY~0hCfZc1v)A3j_^t z-qYcPgwBiLS)gVLq~YSx*{r|`8l!?70tssGb+1tg0MU&{z`X#_9090%09mgHUGEhr z;Mx7dwcEh~G$4P|5!|f?&Bw@jbf0(aJ^>kTuoU#@_2l5+cEFL}<&dxTsnWMD-R+=O z1xTfeN3XvJxPuPc58#2O{!r;#4@>Y7=OrvH2TE+f`+Q2(J-WR)K>KjO>)DuJ9Gl4x zS}+S*YX%yb0xvKF9exAf_hSRu_Y!%`#qrkjsoa-53rw_ce;R%BJu5h=nLJk zz~43v)OP8NQE>n*U#U^?Fb3Z*9?*KJB$HpB!KM2EV`3J3#YK;7&5X>p|!oR`V~$QsGWPkM4t=;0siaJMw^* znjLQb#a$|YoDoz~dUPK=?#KcXJ?_W>IwAJBBM+$CaM<{O2k4qLM-Go}m~r6r0=|z? z0vx~|-9KMgg70VR2URklgGaQ$*Xn?m2);iLT1avpBh>OFW3!gi0}(`gIg}0;Cs_MSA&{AovXpkkj~YRZ4RpsaDob?)ej&PXt#q$ z=jsy>-U|o?IzQ2)bM*xX?*oJa-4E~4x%vi#_k)vx!J%XI6lPF414=54jEszF$D4ha z7#J8Ck2U*&=(OX_pr!>QBgk8zdcJctxH-|e8r+WPTn%bKcyz7?wHG`(SA!b{ovT3= z2ESl4s42iN*t~#=fq`GJ8Pq}H7i|+W;cy0HHu-0l#2(0)$rpp+NV@b*=_oGz1D-uvqg72n9OSjbE_&1cY}3LcM@c zKOhtb3)of(2&Dm`EFhEzgo=Pr84wDzIE7!Z8?>$iWFJ_tc?E<59b*Er56tVn0ij+% zs2?oQ%f|QxyE#BzO~Gaf2&Dm`EFcuEi@zuz*k=oD2+|t0N#B(3S{(!Di6jA%4MT&;|}r3INM>&j1_Jy#hk*fKVqO)C~yr z0z&+>;_fP{DR$}T9{w38&uVTk^rc+)D1o&HSKtF z1sAB%>(H^f3VirOy9W;g!~YAQRW2p*4i@V{15G7L-6vjbRAOZC0T0@2eg*CE`}DFd z{v^Zj;+g|LXz;BctO7I|+Y7qzp_jMol?=m+P8EIz(1wv573c!ONKOyCOc0eC(GRK|e@NKgAe37 zV9)N4E}e~_Q~=$_k_Fl;o#4@1#o^Pt5!9Y=?0%6pfqxrlp5n4gw?B(#_j#Xg_aC5p z{XnHQXoq1pJE+O_V)`|3j|DVx>e1~X;n~RtT3OsJ@S^S$1A}jG8HY!2y@W^eTgK82 zpn58y8#4CNdY~l8qjxu`An$$wT`%Iozs--s19adOn`ifV(4G=@1_p)~SFeJ~PH?>s z-X7^8;L*ts8jo4?4%FDI=kVw)69C(=4-|SCpsKCFqxpz~V|+ZgUIPc-nKNg=GYp{7 zAPLaoDa3s)pluV4Zy+NJIVuj&#dfa7Z(X}TIPM1x-+Oe%3ix(Ebm?3R8gcLeHNk5c zJi326c7Jf~z7J}R*t>RL^Xz7H?DpjF?e%o%4&ZU=b`ZGy%JK3GN9*g3{La^1tq;3& z|8nJbKJ40k!?XDnW9fOH?q1NCg-fR^gKz7T5>3x;78OVSZ9Xb;SoDK5TOTfF0jUO` z_5KWe&UmSSXK$nhxV_}l?R)}sV?rsbtMN(DiR9i___r~8bYBNW8z?9}yU&4R&iMj3 z>h4@&VCe1#RaYLJE$2a%o=5lj|LtIbZh;qjKQJ(KJHK)KfAoJV$lJ{?n3{humIv`~ zb7u7DzV6cP{l~NWoKLs&2blQ~!+(GcuLm0rsRdikg9iaXhJyvV1zse4U|@h4>-hhu zNAqC^(0&pAR?GjOHK1ETV>dqCOTmLS-LV3oz;S~Fj7Rr%NB(UtDl)F1aFX}!W>Epz z4myMnWIK2?wEOf6MsSy+9o+lxKJU>j@Z$Y@1_qE--BUq9?%RC^bpK5E=@-xUgHl&3 z*ecM;{=Y!O^rZ~0AfL5@lzMbu=mgDOb)N?9deHzc%zN>02S}GIsNu-pavW64f;R4+ ze^L1s)a^X$0b0w~>&Wk6eXyL%V+UgH>A{B=*Fr!OPY+y;Z+rB{s5m$_|6}2AGG_!G z8xFS5vDfX-!52)P%?Ct`PkMA;{(r!w`-Drc40zFtPp=4=2FJH!x5FQg{|7sn9J?7h zomd>Z9aup3$9Fq$bUN{PG#?TG-GTv)HFl5x2cbeXP(2O~5KS%+O&$nM0hpRXU>MM_2hkLpnjT?BKqfPj`m~7bwSF1Z~*wTn}zw zcb|W;;w7kU?y6yY+cLtW%nCf~4DY}7n%wtj-Un(VGeC|l#myr?mHup1Uz{_S%gHl+Cia>C zz5;c7*}Xa;;>Xw+J-S0RJi46}KuSRks1jLFHC6f=;$_g%9cnjJ$g5T z?Cf??iTHoqv-y~SqxIjSF3?I!1)uH|l?;$S6F{{Y=xiem$2iB>c+j#%P*i|1*ncNM zNvtzQ1ysj_rpCch&v`DJ6L?yxnw43Ck@oi{*>(g!S)XSpn)7^6n z)Kuzz;cLxT5(e6;Cg=!i@iBOS>a;U2N>UgYe7pHj#28XQo)-fxC{%q8VzPO3w!8xw zrc*v#ugO9bZMoARZhoF8Z)Q6v*f{I^X4M$M39OmuZr=WNP#pt;g8==Y8 ztFz@B$ShE5gvRGLP}3E|m(4`@5*&ZTr%!Jt1_lD@6V%6mr%&G(pm+hNPmnlT`UG`j zAnEh!3y?ouHK6`^43dGRPmrCIrO&Cb_yaXW6<`OYf!do6j@>Uo{_*ha{^8R7$fFya zG95sR(?C@VC`Lf(Q`x82=9p)<7-*fNr)4{+%L8)vxfg4nfcyteY@VI{An{{uAooJk zn)ThHeW1ML0g4Im@ygIupP;kcVn8iJaQM$exUWP7d?yJw2Z3Dc;M)BY$`JR?-p#EBk94KSdJVykqXJ;Qs0>y=n*7u8cgIot5vVl3V1iT^=lqF)| zBTbMDfhd1LMVA7^ov=Ns&_Wn=jw7fLHok;b0fXnaGFT5p>ywqe1?cK&)p~@aSgp0c~ZS2`cqGx?g%GfAHwG03G_*@rZ%J z6|`2Tmv?Fg=$12{jUL^-pb!GBh5>i_!ePe}V%cQmfwX<=Oebjl5omcs^BV)>|De>{ z{Slmo7DLlefM;(6_y8dA1*;jLoAxw7DO>@z{>J%-Pq#)di@0yE%CYVbpk;BMmMtov zL6=gVZe~x*mTv;g3=Ad4p50eHyU#i9PXhISjy?pXb5{Y-QH7qJ5aph|Eau(Zo}E0$ z9FMhu#)BCDANOcJEMWb&XeKDpEBJKhsAwS9A~7lfj@@mb0heALE$f5)ZU-GZ!Cdg3 z?6~;Y!=%=ipqK;u4o`i_!oUD8kM=$W`2$=Yfd+2S%A*+|kAv$=*C&W<1FkQb85m&Y z5y;NLRUU!Hiy-BZ>;sVhVC4}={8$^vy#rhx%>cy#xIB9E2obQJoqZq)6c>_H9)Xj) z04OU;AeQF!=BS+XXnX@|#Cvozd368u>0SxRnYTQ;y%a##ByziSSMwNOa_N5bn$x8_ z3C#S}Y{^v0?b2PW)BVY{``ByF?qVI6?oTe=$C|4h7)wLDoi$vIPx1>myL7t#=ilZW z%Zi z9<+Gv{0nOh1_qaIXAVcuy`S7KY_@>bl6c3sfck#U3eb)-Xi(p$`$30~ibl7$2B?GS z*?soKf}@}|(HV#x9^Kc$7h-*QQF#ZH26$8)d)*mbx}7Cly1iw(11&m3mxJ&9>kbxi zVLsLAyZ*TAW{^ujf;^qRtGm4gT$m4nmgqW%boy@Z4BhS0S-an*)Ag`Rr|2STSUdT zd#VMvZ0rY>l)l}b5+2<_5}ht879PE>%RNBnxE*&<0j*qd}VjyPV1JKmt92HQKLEN%j?Et%JIo2^I7JMEA zB)vhaK4@|O)1w>F@$l$wMjFJ6YS;}L!(%7`4dT7wgAL-nyM`FVyLV59;f0_sco6Rt zSOsVh@5DV&H;MP?H5rB%M+Cr24!c3qLx|IVj%Fh6*$UxIa2<>OioN)*P`NIO-bNU2Y6Zv{019(KC^&BH;H5{~7i2xse z{-UoAWXuilA>;<2UZyk03$H>k@RpJUkZ5m+O2CU7x?&97J}Lp7-XfqwVLQDgUR;$E zWANxc0otvvT=Nl-nULlmcs>lH z{R6q-w)stfPxnS>8SB$+<=Oqix0}JE`y%)hn3pd6+j>+$3$Q%9&w(;5sO))BdjM2~ z@q=9oYHoORzj&b;#sE6C7jzz=0chuq0c1Tb=%ScT9~BEvXw#{)1ay0&xNrBg2rf__ z2MuYsfYy};34qH1grP6Y!$1noLJCSqyXJ**7^n~s2bH5QZh$h%RS@&;4Nw^nqY{8P z+_Kofv%4C8-8y_BG2!rNd;{{W2fW$=^?UV^wXn1yC1r_-o-Dh8{-46<{^KhSl4xQ`%@S^P+D98k$ zWwA3)r;kcNx3@^Ak4i|lw?wCpN`z-OKd26H0o_B+(dnWB-k{>5lGE)D+PGT)*=AAF z8KUBF+(pF)6gQsTY~3Cf-R?Y{E-ESA?jTK|fpbvl*y*DZ175t@>7r88-J${-xa@?C zsULSy0S)3Zbe5=8_<{;@agXlS1W-BN>7!x*E5)I4h+cmGzu?=A;{J6prE8zb^S^B3KRK%?*)j@=hrjZeCC zA2}TqQ%#`^ z!wYA1aDKXS9h{#sK|&1N;E9;VBOrr716v-TO~Za1FWR?&=3h!3kd_J`K{8JVr1`TN z*t|6m^CUq+8@SNT>)fLP%6~gSgMFYIp+Pk#Xs<75?VnHQ9&l~>Lb4K6gz4+)P>-|HTrGd#NsSQ$WD$3P>1KAoxiT{=^bgSRMs zXgyF8392@CRq!*oSS$twMTs)#Mp#Y`SQW>80U9Viy{yXDWf)%Qsex7@oqO?&9i#+Q z$MHb?^YFY3!;1%;Apg7sFSF|gUAuYBqtkUhcq+$Dz@yW3`El2FA<%?FXKKGoXX^Ch zuCqbIkv^TN>t7t11?uIwYk+DPHPFd9U~e7p=nj|g=mvY@{{@h1c`Cqmq%blt@C&%M zA9sBYT2$cETd%+`;5*%?GxfbsukUkyLD&B-ovGiAFYybwE(dimG$2`yU(gqPgSi5~ zpsTz`x4Q=DtoQC_32u<>zWPwBd^%IjT{=_k|6cYZ*40U539?_)p>s(Wmpa5&-7 zEBfFZBB%sF6+W{nB&c?Sm4Jfk=T&f0+ICKc;l)-Cus7y{s;ORo1LI3CHs4@`n;q|B zvAB=!$8-)8vfWye!6(@nw05~i^WT4dfo9Nbghy{EXm`&iet~Y#N@LINb8g)&4G#=7 z82B|^89aJRR17}x3;GJY;AjBVKioduFN_ZyZw0Nzl?MB+6|@i+Jd)kn3SEU;3OdH9 zvlX-o_js!dBV;XG4(;&~OIG zhKf)<}1Z#7|pEK2j}c6Wdn4qk=|=79|dEqU?ioC@lVI$BHv7Z)`i-R>5a z0Rkn)@bf7gcP^3u738d+FM?9LsLCY}#p@fX#_%G63A_gBPV*1OQpPhNi<&D07)#7R z13<9xFvp!sA^JB%^gjVpytW|y3Ml$rjW7B1%HC1`_usYql#6AsM42bQJcDERLD1fZ z{|9}U4|w#7ICykB3pjQ29B}O9nF3;aCA%EpaO`er{$QZN;MnOhg##q&)a`SC#j(?8 z3X6-iw?xsdZf_0O?nA97OME=KofRCrFF5``;K6*U+vfsE)pgKe&I%sME*HQi73hOa zx(+f)p_}J|V<*pbkhX503p|dUKG%7=y)|5{4;F3dc9!UD1(jT#z2F7Z$=(J&ol8O0 zt*h~qWD1)8W|N()~eSgQ2rk1$^+{5tq)Xpz$}K&b^>TMaNq~HH8Sc zI9&>=CtNz0f^w=$=TcCgs?%S?#Uk1Fcq?c*wisx`=#&FKol8N>u{&G0fVNjSo49l? z1ue)v-a3U5w1NRNGQ1SDLg{!bXe~CV4dK(d6f~22ycM*#UL0ZVgUYalN%WrK&KKka~NnaeC8MMcIgDq zBYPw}+kEC1Y(2xk01|fg_{=ZZ3u@YcqE^BH6l$PpLH=#dKAo+gX+e)<=Kzp~D+~+_ z$H5bBpqa1Ztpdyppr-YIkUmh>?ri-6%3-}=36IWJ&~zdHHs{FBR?td){%y@opt&Gd z(6$lKW#pjAxMb&;0AnGB!EmU0J+B1hksi$XhgcxHN+#?xxl4! zDQH)~@zy_}NjruHdza3oJm6?kXCSyW9?8yNi@+weg5n2Kx`JlBuYppSybGut1ecwT-4{K2c`oq_ zxOA}a3;1-1cy#-8$ar)gbOD_gaPWlyzo07vsPJq#P|D`GgC7*;2OqII{y*q(@FfRG zO}8&YCyS9sGDtwdrPIYo2ILe4P}sN_v4F(8eZkoeD#QU2I`~onq$&cUiU%ar?JEEh zf~pb#2|-msg+x4(4}w%cHAz4`DIZpcaNZ=t$2}XHY}N zIiH`w)nXaA90hggq|ZV#iAS&K?=%^P7l&lP4Myg(-~#joNT{9x+-i^mt+j6jEzkqs zcH9fDF+4h3L2L6sEg_%IrI4)v;3CDNvlX;j&!@K+q{F3iX#%L0=mi%a9-XbAC48W2 zAqBqNA6#U3bhd()^FdloKAlU!OZRYqZgd$Jvv)wfDLpt@aSv>E&B85 z1qYBvXDet6fk!X6M)c@x1+4`1=yo>%H^)E|rV1Y29G=~63gE_9FKC3vv%3$}UiIl* z3tBG-3PbRG)l$&1L6^>@H<&=J7vJu_6Oh&+RJmvO)$R|D|1W|j@j*fRA{P;~O5NvP zSo{SwJwUBAtE13B_UUE4by|kuMXWS<%tj2X0@O%50y+b?msjwp48se7|9qg`d!Wr| zpmoB=mtOFlXM{&us;k8^a3d|IyBkzIdi09Qr^_(Bn56@5r@6sJIn$v{H3kMqQ;p+= znl?WJ)bZd}MyIO+q^Tz1+1&2w$Ac68}a1KuRuqqd;%X{^I|~`KZ8ed7>iFYYpTM({~pPFpe{zT8;7g$|IhpaZW2D- z=N-GJO!xt+TDyBXAaqLugCV%=_S5Ke74}GWrqbyu z?vd;!&>6}N8j0=n<%c%OVTw9kr9G0}L_kKEgO)52y`+ z-{z*<>8kIM?55z;S^M9mvzFbbv(_GD5U2!mH9pYkY7DxQg&UNpAPxO6Q1V%s4eAhq z$NV52q94Ct>E{>hIsuCQA+7wYU?rdgq362#bP%&^@Mf%8F=)HvVcsB*8(RUXNb_plhAZ?9FlHo&%b!50cs}0 zn)t^(I$fW8fSdUDJ-VSy{Oh97CjN2Ic3V&sdUk_))5RK|-PH!ru~10dgIesM_?H0P zcToU3;1hIqix6mS`-?40!ChKsi#B)(_3;EW^LX@%MkdKHyikw;mryrPfPL%+61w{v z396D_1ZRP~!VNz0(WiSFs2dAf90?jB0{3IR zIY5c4(+9Mc4qPaJ#+*RCSkO@uAd^6&#^56-9RFYHe$jfMBpeiZZ!-BA8uo$Q3>vRJ z`@-fYEbixma`psPMR-8npZ{Z+c1WsEO@GNQ8rC<{8PfU={rMyI<>x3f;CyTXf` zrx@W*N&sCG-79JbvcFIR9NWGSA?*{8*mhCz07W;*m!Lip!;4>_fdfdn2ns9@(8zfP zIMzX@9zcr=7nKN59SSNhj(c=NjtT?a%m@l<)Yt$;IuZuWf(n3!kQF?-KlyYY+Qj&x zGY3?SgAT0#?Pq{pA9Z*q$T^_oV(?;m20sJ80Gmhm4SqoeegQuLenAg`Za;-i4}}-I z<@gyoofW$M6k1P~uy#EMb*z}o!p&L953_kGUMuiHfUjrQ~_U!HjDTSOdD)b@@G(Fk;nz8Z$bj10E zNjj)T04sWt@fj2W{ot)=GU=fG`2QWdzq?rO2kqr5vjUw~dfuZ~<|wG?=+WH{TDR=c zEyC>4E%ah;4OlBgh)43p-86m%&^dk}okhnyy8A&gFOH{yO0D~r^Fdp{%Ctf5XEc_E($isF9IzN#0+XTWUG z%Iz1+fABGQboYZckG+@;VS{#tz37LqLEFAwG(*^+g*GqBA#Cu5t?VCs432w1<4)l9 zj~?CYK?_?vncur~mkKyGzhkUO@=QMF(Q5(@-U%MvuAuwP4Z0l_pwS8rE_ilN4LnW7c;hl64GnN%17Y!p;tlWQb`F&>>UTlhRRhQ-Th!&yM6dMURb7reFhVd zc%hNX&*0g7T*I^Z4I_VR)PK-KBUt?lK8RA#Cb1Vx5H@H#*o$u|U?V`=x?a43ut6KR zUfhGQL0h$6T!OGco5NllgRnsxv|j9jut6KJUaW(#!Fx2BPJ_(^@6r4QzCNZOJW2Hm z!UnCnesK@N2Jg|l1Yv{sXdZ*G!Fx1!LD=9un(H8J@E*-Y5H@&^<}?T!JS)=$X18~6 zL)H|6lM^Vhw1X}P1f4Iz|NlaFKj>_L7yi;9C!T-tJsFgF&c1k`4C2Rt&IHR*fu9x+ zS_Tv62wEHV@?C})?4V?58Hkp@L5(2zdAi`KLC|uyi{L}ePCJ4ZYrirqA?@{mto$}Qk zgmA8JH)t{kw1~6&+>0#GHgV8Wtg|ol_k)K2#X%DzDxf9Q-Qer5b5trky0@r+I+z~K zM*=|YRm37D9R4W)yZ;t+vIe{u%!$LN`zLgoX4w>QD*)1)0WZBg>(Tw;1^-^qw2KUE z+66R|5&{~e@llEC_EzY0QHkjEQAz0bR_XLnN$K_$08PtyK&DlkLDMQ8-OiwC70`Kh zpr9}SO}2m63b=yK`GW@v zXqfB&h1c#N-vk)nc5VGuVg_3e6)MonG8?vXx|gLLY7S)55fq{j&HoQOTHhJ6O*@1m{}J@Z(emWmr)7bxUl@Bxb}^KnoR zLi9s|@GLY4L6`Dk3&N<~$Uz9Q5vl!zNPh~TJ*B;{l;PO@&c$*gXg5)r4X8PSRKG&k z40j&|O~Ulb9QWz&25n1wv1um*!~df`otr^C>-8YLMHgK9{?3C7NGsrpxuuAg6*Ik5B!4dkj$v4{FHzbZ!St-S~8F2Mw$GbZ!R? zoBDKa2MwiyYD*8$nRAZF8w%0NM`(KxS}ejAVtaJAtpIQ8F@D?q*Al!ryi5mDe!GAc zT!8lFfwzL5^Xu+84VqATF=Yz_!~f&fyFt@8MYp>DLbjA!g13~H86eIx!J;2Dy8R*q zsvk5NS#-+>azhVfM>;6_1RX&k!T_=Kh58oI;5K-5I4I^iSA&M1L2-v|+c<@L<3Zbt zA=}15W6gBjU=CVu4B86~-qhU;*(lx&*(lx&*(lx&*(lx&*(lx&*(lx(T9gdhvkl&L z-VNE9-hBeXgKSLihHOmlhHOmlhHOl41}&}S7bJFrIcPUCc*{5Vcp8vC2oJOw1+)tq z!h`G)Z-(p4xk{?}qG2?}qG2?}qG2?}qG2?}qG2?}qG2CvR^# zIG2O7IH)BFxyA;(amS0w2n~`;cqhk2Rf2^4|r`DXhjNWIR@zd0MO_*C>TIf(x6dK&?Kx!;}KA* zag2fNbMxqK1P#1(H-H8V4xd4s?+;olyT1**R<_g{Y2j9IFm#yMqgS-pTZZ9<6(e|* z+d3FL%AEib`u+qw%H4cKA^I@?wg8WA4-Qbl9{uv)E{yZXo8M@3PXskGS}&D~L*`K; zf3uu80_;k)j4#*rC=%QCv&KSnjQQM-IGB+ z^XP5{4F`e(0W!hSZF0e*yE%aej41CvAIMwkU=<*5-Q5KCmJ-NYijP5~iX|!$#^5Ulp?(9ER0$rS zF;~c@DhI?^1gOUgiXWu@4JaRiH-JHw)Hc2WB~hR5B`ToR0LBM=x;KG36Q12aJv$k} zH#>ulHht;a`lN)#v6Dr`r+beIXkCDB>;DpF$4++8GH|IDP=6nE9($>^Bhqxts*O<3 zdGv~&@{nP8G4UTC=%UR@8^K=M4ifTv#K&NC;N^AD?w8g|&^Z;~oIN=BTaPd^Ff>#M zGVr&6mNUHg{y~(%qdQE&qc={$x4RG22>`F?1fgoR~rW+M@zmF40gYz)%td-bi`w zh2>n(ePjGB&j0`a2d$De>uv*uqDS|XW1s@fqxBMh3o|pQ6gl^z_Y?yIRQh-eSek)> zf#Ky7CI*IMZh|l=gwB$9&+c=sEpJN{J(>>)Lb|)4Q+|DVS&qG6xC@%|;%_(jXgZ24`-tTn2Ow7_`Yt;s1r!10@Nzug}i11})44-E{CmZw@3V zEdGImg1?0uT-}jve(3^GQe*FSivguJP%2~Vc1v*VWbbYPr_f!Xlgq%1Y7cqz$~1T! ze9Yp(92aohMI}HNyxt*4B?44YB!H@t6wun3<1Q*Wpmok5fdYsJok6=mB|x660M%sy zAeIMo=n_^NfqZNMGReT>IAq~5s15?LL4gZmA8!E{_aLTcciRTg67kL)6%CLch5r}2 zTS1dYmf)oYrHUTiy`VKu{||sKKxF9zOTIAl15FIIf@Hd zJHh%rI}M=TckFcF=msy#vji{L1Dg!00-+`|cY-BfT=xZ=43dE)zV4}@I@Y7R7bN7- z?Q$%`qm$+0f3P9lts#sI43^-v7+?cIi~kS?f+SzGK@0@RcyxnLK<%CiS`Ov{b(lwY zFG$V{bgdxRV34For~C#+q)A=_&+cps&+cO64KJvL6=MG*_&jOQ>F1Efl?P~4t{Xgz zFTEL5AcOkYt(Qtfp~nk?3T2xMos&VruLX924jTj&P4SVSEd0Zx8={qAGpGW%4jMZy zT?>){4^JNlwea8@Fg=>zaDd9eQ$E@!9e0CcxA`E8PxmFygD;sptWWvyyPxp2KF!|* zI`+)7`KJJX6Q~gcDrN<|dqp}tdL3CjI&DRXY&CE zsIY-Y^Faq+>zifEKox<2N4JfNr}e3FaUbo2;Q1rRZWazsMvvx$ES}b<%07BDAK?I1 z+n}lej2(i(8*~gjx<7e#|M2J)eLYczq5I~G5-!l3CVxve7fEG`OAAl^uas@5L0xgF&;1_gta6Hat z2wEZ64q8fR3}U%5m@ZA^omZH0Ifk^wEg5`0Bw2AfGGpV9f$xqO8^wm5}@`9 zc)zs6e+1_o5j|0jLx_-V7?)APPXG)r%yM0?@pxM`tsrFvB>64t53|Bj`9fP#ltR z{M_+o9xet@CC1RXnuCjh;l&$we)##E3|t_0%fJ;#fE1iYQUE$R<#@9WTmk6xkr%6w z6exgAuz@Q8b(CIoA}KHcEAW9U@Bmqnfuz6ztRM!i05oa#!W~IL09Zi|TtNoN1T}Y1 z;%Wx%!*S?X4Qj}B`^$KAy9zAGGKTw6&}|Me2irzyowO zg-2(s1L%5-&QcH1?O)v|Jq|u(_UNn)@W64(Pyr8kojqvPiGpkE$r4_VgD;sqx_^0g zANcIC8q{9r1hvgw6QFCfJUT-aK+D;VyD}(&%828xpxz0CM`x*kOQ)~I{|lfl2!Bg4 zBLf4p8^YgW$_U!A_l3V7RLYms*@_sY9;x>(v9)~>n0TZ_%eF!z9{59U+%i92A`1|zoUI#JUd?07Hzqa-1X~rSAR>#U zO}NI!#PEWRiQz086T=ZUCWhT?Obox+m>BM}F)?gnV`5mz#>B9IjR`)bj8Psoz5#7c zaOn;b@a+BoUPJcMwe?boJZSr0ifi|&;|_m7g}`x8n}NZj*MS3c_)_Uhmu@c!=Ux#( z7wb#K%AjUqievXduU?*u#~uHG+LOl_!Slbpo*W*{FBnT-c2|qI^|J80G9PlZzEErc z*5RUk$fK9%qGR^~#CYa$$3LLaPz>$C3ayt)G{KJQK9z=~-r*1UBvH8YJeprJf}9sE zJpIY=a}{@LAAE3egYl`A920d15)BA;Rrc#yL$@6rJZg9KHbh79=$9lKH2HmStGOIaH zq5;y51tlcU?q~_m?ra6mZqR~7Z1;o2sBnNPPSi=}fbK)!?)1y!E-D6~sU=tbZ67;B zRKU0PI{5U8G=K(zSQ!|0CNMBCc=eiGcyY-Qys`?s$}mE}r?bMrr?bN21^04LQR^P@ z-%S9#;sWaRCyx9K-F^ZfAOAn;(P?vHCn#D$%{Gf;?iP$MS{&i^qq~GlXT8F4cTls8 z;YBuR!*Qp(hEK0Qhf8O@0XQ0uyMwA%&_ydAo#r0ht>BYdAxQ$<4b%ti(0ZZZ$j|WK z55*a=Ak(_fgPie#(Gj%0_a&%6^XT;taBcZkQsvRzY5?wR9)$G8!Z|>TDZw{cK#T{S zKL_eRf!i4_7T}ZuZf6KzfF%^s8Hj}Pce)J23yXK)cE-o^AQhm5@_aftp}YY}zP<=f zC`vw^mOkD7pj!mNV}55}6oHP|?uPW@JUT5vMGxWS9gzLWpji+H;{%{}k`}1A?mh$_ z;sOyCpzs478}r*r z`%E0H0_3x$bHF|m0{Ki3>@!faA9Qw>L;PVd6MWt=q;7?^50TTO2e?!9(zE-gM>iKZ zNq+L^_KbLOWGSdc&*sy8+M~M_)DQuO61WiX?RMY*jcM_9-vBG!xs;!w^)_-gKK-Kf z94PETekh-Y@B@hbV%8h5AA-RuKz>M^2KIyBG#Q2$z8Ao;!vqO^Z1=Bs#;9N%y|G4R z!@K|gcLWGAFucfSfiwcTZyEpR-!=(!5SOd*e^=utuEyVdx?i?jDwTJz*zM26z)&jY zV6hw2ZY$+=u-F|4nxtvD2D&b&yBRbo=Fz!Dr9lYP1t`#Hxy0X+3|iU`I#s9p@{6=& z&;(L5c+#x;RUrul^GZqKy1)HEKu?R zu|dP&Aht&*6G#VW!twuc50HI)3=Dpqb9fU#?cNsN1U?4PWdRIcol|&0JF%?m6!@D$ z{{R0EI*R1EOZO$qFcto`-QXQD436DLe0p0!E(guD{XgP)@FCm(;~=dNUrYh}0%Sct zXMt+OZa)P_=2IY@Apbgb_CWmB%i{nNgZN$KENJ-4hxw3W_o3r0q9B)oeB}855X}94 zoh@KTdvy041|2%)(b*#!0lEyN`6z}AO? z{CFPJ$0;DsC!or?+f9MlO~sKJ91IZ8w17S1-OExB@(d_cJ$gmJk?7Uk@*8vp9LQ7u zkHfs-(^(=?;c?tWv;kDkd3G{@`~?aF7wb9={-!XH4>~r3603{FW>DhfZvoAO`gFSq zcywR(>^}SAa{@TYHGos$4Nx+>VCkmA-v+t|7pZ;V(tREpe=z^zPk)ZxM;!kjaqFA{ z_7JXk_2}hs0Lg)p9H{x>(F=(=$L>Qu%<#B!{Er-oARmGQ1{8A~pyAJBzMTfJ_;axi z)8TLO`~M%DHM_64Sf&~9x2*LCZuTQRmZ{f)r&S-+TdZAa$UCvhf}A|mI%lH z$6Tz-Op2a+cDELQrb2qb1BsrH+T7LnWcPK@(2oMB0s)twpw?;xXvoz9bf^lbWeE~- z@aS#^C3Wxw3aB3S@PJ(K0b&PucDI81!am(>F5qKoA?*e5`PQI17?eUm=0nQwW6hwV zodGoP2&y1FyQ3{UyU|YB0o9BU4DBzJs30Hhv__@j#sB|18YCDPUU2`DVDQj>VEoM$ zR;ze)-}32x>0q%5bS7D;jf2G|(9lk4j)TP}Pf#_J>|n9U3&eHgkS{>i<8v0c z{_@v=)?Xn1f{GBZ-=Osu#P5(&5L8}(>o1T?LB505Um*8`G7-qppj-@EApt7?K>qWD z)?eW|u==aqfWK`!0|NtQ{dLZ#*R=r@C;v(I2&hc#cGqxZKF;i}1ByeCA7IrM$X}q4 z0lN>m`eI>V0Qm`0eSv)8(^(?g0jj1E@@P>4v5{Xpr{0HvB&ZaRex-K_agO9C;u< z#OW=(Ag6xK(ZgKKG2Q??-S^32Je3D zz5!0Z7LcY3_&fkmeeBwO$ff(-|6`y?2i3h^-7SYf`z?;QoCT#ZSZ;uX3M5H`A`%iR zQ+PoxhUQ<7UXfF<0P^T$a{PY?WR?UgC}&Rr2j4DG6U?Ktf}cYD(6Sg;iRzq2o43$bF@qZ=HUAa(@2vBHkE zu>!gw2-H}CRNRoGU>P7s!GhZ?phgFz&4Myf3fmD2YOfH}pZ_uysXq^zX~5l|e>oMi zKfiPztUtfJ4bh+9-zLNG;?x~J(5y}~SOus*zp@S7pRWT+)*c|xpZDo>QGs4f0Xk*2 z@eQaI;%a>0c#8@s&w=uz@d5BAf>$2hKV4f-mU2K=LA+LTZ2res%IeyE?zO06^FJp3 zR?ze;=zIePNAO@5WLX*LZruf-(f!^Yu!*3iCU`j30W?8Y0pejH3~={D@I0@WdnxrGj$A}z0L}dg^#|y-a9-yooD!f4%vSBLNoysm0MImfopu*qx%E+ zHW5$?18wjI?fv%Y+@k^t$ZnB&KD{>ce7b#99KaC?N)#5LbMHDq=Qe@X6M_;Y`ZgP_F(5;~x~1~JZof7@};#%7QeurTmwK9b-F-r*M)d)TpC9;D}q zHa|ndUQi@4lpg-pau*z#r8_}urJ7-3GT}BK!?9M78phZ2L7LWU^D`J7c)c7FG++|E zpbMO-Kqof`haztP4gf9e0{Pju`vrLa*-cP-15G-Cnj3o#g6u>ZdUm|{-m&31qe~}b zA){BX%?01qC#4!5t#3;-Ji0qUyDmX_$m7NIiTn%=d%$U*p~S$m``gP`phVdEw&aFK zujtMum*EZjhU z>^|(FeaMIThkvh*xsUZr{Fx%F+l!V7{0tkIUV@fWc(nfKZ>a$9nq~LxKI_rl15T#C+NXRv zV?bvZ9`b;6a4&$4rt5^*0V<^wUaZSx0NtVkF3UggPd(V-Vc^ky8Z@r$t9{O=yPU&U z`@Apn#~0hGK z_gRF>{GT9|rPrVu9jX~XtNE5QfChhDIiRbJ zL0Qlhw4`Pa*d?HVG5~FHg!u6^sEh>X;HmwsM9>H9C6Gzor(Y~hL-ML{51vsF!lGj1L`uqaq))E_pufRk8 zB`Tmj58zFlu=EK^?>BwA&w^$qAm{3}{{ZPNJpvB*(=Q^bK>mDv2$TV#^>K}gKqzPu zd!q;JRLwv?|6(rX z1M`o&%7ePHuYDbxf3cME?E-O*yUK%F@vki%n}4yE^6dh(AdkDsgTnl^s$=snwo*bjLovz9t zXZ&O?<%ftIcU1;i{o2Q|`6mlV5X3v~stk6BxnuKBR*)dXCCXrzC^5^o~J-ed?JiDtUJi8ym+FD5Q3)^1_ zn)v~3ME2~y>DhhK5wuP8(+dwXP-SxfloS+PKsPagHb1|3^cS=*J_d9?NRA40Lu&I8 z1GE)yAWdlPISlh(n1akd0aB{q0?nppUo;VAzC$o%r7!4CnC?c<)p(xWH$e9YfI`Q! z`zNT%3-Iaw2@2Kj)5e$nU+8vG3Gm1~0lJ*?g`X-vgKzhAkT$5o6QIS@r#-q~IR3xX z9ikFoe4vv(t<#+awCEKyG!3dC5Y<0AS;Y)j;{(Pg z|BFVhQe)_LQOSTs(n@7e^Wy+m3FtPh7ym`gR;e)n=i2(VBmvYzhs}?GmYj9p z^X)cKY5iZKkT#+FFlf;*^e$HBt1tezfFh|x`u}0;`$dmHg(WDLx*9zJEp01s>9lw) z;t0CP=Lm{&=eZj zo?Au-AO<*gu(kd#(M6iy0PA0msy_m(zoZJR_a5k=Z6B42?iiJf4#w8oCHf%m!uRKb zPWj;NN7XL@(Qo(vnDyr(u>KzK?v)NkP+WN_f!3kLs3bV@Z#x3oHUWw;aNQ6Wdw2um z%b@@N|8HP?-L--7^|3Q&j1PbYZ}}~`O8EXC@Mu27;%I%K=;H>)!$t?d>nuSnf9TRY z=zenrm+oI4-9L>lfqI!9u14Sfi}tSo$Eb%#<_XY=nJ=y@f}C&xtiYrD#edPf6`=TZ zZT(*o0!lCri12ka`euCFGDgJ%bWaKRd^>*d-MS!iJeaS(&~XOGC)fYO)-fs`MGs!{ z{XYi2rDz+YqxJV9@J<2;khg=ucIK!AIPz~h25PH=cFu#3ra&pNpzB2yjQ@jt<^UQC z@2pV?aOL0j!=wA7gT*e;f$=569^I2b%k*CK&ISzw?gp_vy8A#2ctLAGJzj*i^D}h6 zx7-a{JyxgV1G*#_vL3~wdopMhnMe0I&u$U17iY^ro2WroELyJysja!+3DyHO?1e7W z98eFpPRpnJyGM63X!d#+sFwBY=3(<_K4|b_dLtvl|DzC7Kq_l)cE9i34PsgD22Cu~ z8TfR6hn82}&7f6w$ofNGgd^z(sfXwXu`G9k*5IM)2Q9)w*3a=m97#V&Jw!i0i>o<5Y9Z5e(Jw!ii-XPI)V;U28)4CtMLRa*Y{fuY+&#shSYN2kmQ(8U1V%^+?69b`PZCxeRY7s||)= zXK-!#59*=@l!64=85mkmme_#`3|RT-(LD`xu2J`KpI(+j-3L7_B}&D59shfDvmEm5 zWcc3)n(FOt1Cjracb~BSQFIPeM1WTAf?5lR{ad#@yDz->ZwzXco(8Fie)&n3pW)1z zZYFTC08xDA%o)#a1`kUn{wa{s0!_cZDU$w8Q2osZ^=ZGcDVb3;||afpf4h9L1hB}lmoC$TyWRmI8P!3Ty#NNwyvN{ zAb&YFKVtOh{^@w|5&JICIasdUx4<_zI5wXKU3umB?EsTw_Xk&gms^hAx0_EZIDR`| z;mGfD`^6d=P-XSO)%Z#G>0O|SJN{iSIXpTmG#tJiW9ckV@$K~!=*&>ycR8JQ+`)u_ zq4_VPXK(uf(7p67DiNRyxji~tz#9j5fDRz!cRd6e$w}Zo;nJC+lHu9i{sMG%NpA@F zXp{=@E}?$VN;Xi7umGf{25CPBWW{GmIH*1kmH{2gxEx%UD|MfLv3ND88wgs_va}dl zq5Jf*-Yt`1cyZz+cwt&2SOsVV?06Y?1gxf5hT%o^TF~aRm!K14LBl|xGhaP>>m*#e z{S-XA&--?}X?TLxZFSbDKn8?fzxn^)hOtE1v%5V5vLg;8@7WD@_5TYXr|pmi9jo~| z2h=g{^)oQODk>5KE}~S#Q=1g8z>AdKzm;}!H4sCf^Nyef7E>pG?jsB0q9aUkLEW9poUTg z|2EJvUyu(SI&xGLUaSDORKYvM1VCj5a$|TGWTAPCiUTdGGg-{0^GQ~6MPI11r7T^Zel2r z@#tl3PzN2;hefwzLoEYCiG)WlYb`_xL@&&67Bk2ovsN!ouwHT^T0)g8hFLRaaT~4$MAyh+yDPNL3ya2v7pYapj>qv9G#$C{QrXG)-Q|< z3?+QW-9hs}49A*5Cv`JgZUyZP0f~ZUg&2-CgU%6RJnk9*sx=%eHg|)L^9J43#Bkh| zVTapXYmZLX2#?NE4$yl3&Qb}F;E9f27`{w1|1pT(dnAOzpc54m4SizL}zIN|F&k3Rm>-jyMoR}XW-w~+y#{@ z;NRBV31T1g=q#;pWIoV+0+c;F!G}+K;K-!AZi6$a(MeFTtl-*mpoGVxmz70DhG8S4 zM<3z&o;vINNE zC48WRtb2I{R6zNK=a38Ns8;ZS+zuAoL1h_#3lr$f@5Tq9EmZt%UqSn=T0u2h#fI6| z9=%gR`?x%MCxOPOJbL><4S0`k#{hl-cNTsDe-VB`rv`ojcNKm?uL=AD{wDl_P7C-2 z++Fwuy*BU*_=oTdIvwB_a8KbE^t!+=z{xM@^nhQ$y@X%T=>xxjqX54k7r%g~0>7Y> z0Kb5v0l%P^0>6N#1HYgXi0$Cf=@iiI7}4nz;n?^CG@4c>;L+O-c2OsI1nV`sN9R^> zRS4U_wHfk$UMXh$zdlLF{2;C9e%Gmp-#6F{SM{BFlQI@>|%&7&9WQBazC&F#_a z&H_4B8lRJ>KifOOl_Ji!|=jnDJWCF1PxGobT=D-trWdq1R6=<15F?Df$sFk z1;tx4XgL;C4NPVp$fVBZ7a(mA-7uMy0V4|WfYkc5E)Rv3e6rr zh&`a56q<|=LCd8ss2W5D z)T4#!hUo$6_vmbfbeK`}NI~>~`qyZBBp@;kpq4LcZ1X{6KEVIMfKJdulM#Z* zfX=!@lM#T(fKG8klY!a;Is^z!25Jvz;1*4W3u4+1OjmP2WDa1;ut8)_V9NZ72B+Q& zC^DVRH$ePe(SIOWNYHq6!}E_oHdxOCkQ#_2EEcBagJr;d2~?RLNM87WsizAf1KQ|< z=2MPBuxSk7gJn_T^jjWS26Pk#nw}Jpi#wYIF!daQ zz?8{@$gIGW$$`jhz?8{?$n3zB$$-clz?4aY$bhaVK=V%uMCJmfo+OCO4NRE?Na}rn zDI*3+Z!a)qbRedEz?9K~$o#;RQGm!W@PI}`P{LXcBEx|xBLk5Uz?6}K$VgzyKg7sKn>Is141qV!-a}YhC%RSLdI|Gpkz|^w~k{dx| zBM3d6;B#r9e2-qyr6BEyl5ZJ^+u59fX<7}$G|*CRsBT!9*agv3fvM+2I@qV6Q$*18 zPG!ZX?N4@d^I#{evIzyM;3jbnF9?*%Bw0kk2bmj%2L#jP`j^+T`YKga)vK^nh+ zx?G^aw;zmU?7Kn3;jdFXy8~IgdwFiVbf)wgIQ~EU{}{3xJ6(FgPV_kL(rW|KecYuN z?9}5f;L|<8&Hy>E)1}wqxJxhC(Z^lD*S3JYvjwEdqt|tVkQRK)eLs*8inkAXdQ3`3#`p261TU zg58YGxh|b^!PkcTKMZmcsB;K%6Nm-{KFqzI$?iPITS4dUz+^xH+Ue43;)^EpMR0`BU3r>1_e}L8i zcc!RRc=Ed(ap_EL0IBu>b@&QAdR+}%I%8WrI$b+JD-3#FR1}W8g6_Fu@aS}%;o02= zsy$sgQy2JjrmleQ7xaPM!~^P5a88GHDY)YiT?+10(EW#7!Q%war-4*}x)fhiz+H+* zaWV`q9?k%bOul9Z?Z#yS6{T}jKnMGIG#&w^d>lgrko8v_o}IRp+Y89x zQ!l6!+cS-{a6=n!1)!A z=>5>sU~uZ5q9*~q2+!ZZkzb(Yr~#N0ZsN!<=x*`iYc=Rv^dBt;N+m%$IKYzr29C$v zJs4lyfJpi#m-F~^`+B%^y9Ri6Uv%#7+3KLH!SG@xSo(uQ%YXhBdv=Hu&Dj|kTr5*L z_*)nuEFS)r?`)v67X3xKT?M*#x3DrWSf423wDy(YclVX(KIqu(FX7nf9@FhA0uh(t zclVX)KIqu#p3v>e(t4nT)%pj&`w#0{27aen2FK=qOr<=a(>fVI!pFORbcgCd4n6&L zh_QryAE;`1&E?o~!Lj>`Bfskh&u;c^4-XIiT@U4oSX#f88h<;)RKmUwRAj$a|8|I_ zgnb`qMbT?%$Ce8vtd89uUW1OH>4lXrFPJxjMsD2|e0$3^JUU$~9J}2OI$J?wK91e) zCY`OIWde@f?lGOMpp!BjyWJByTR~$g-L4v)t)Q|2R04Ny1zqiD{O!1F!i%%BK-YqT zE^uoF1tVm97ko3^UeJKj@mA1@7a(7F90#v>1>Fhh(zz6r8hkpJf=ZL);CuN%N_;xE zg6dLNi*&&fPLIy5pfPCBs#G@kP-Qc?4bmG5I}5}YI%4C|Jr$(5`-eyCr4kXJ?(PXZ zpjN;E=#e3g|1Y{&raF{ydUX3*ywGRj2gPatnCtNZeBa~$k^s+6GuQ>SpqZo0iLfFl zI}(wV7K4i5zV+ZCA9t_{P*&=V0~bL~kunS~94GTJyabOxb~l4sJHEZ{5uV**;FUSx z69=K=OTNgK{h0u>>|X@JGCz=IiV(|gO#lsZiCV{jE*L-H(aU=^LWbeRl}UUIFQr*Q zDbhW{qnD?_uCJKY076BW`P-QczwsGfpda_iY?_VO_cRNuh|%&?nH zxjc5l?nZ@OaC+gG1cL{{FCN+tK`R;@JUV+p+1{u7Bs7pA{^D;{0c|Vle&=eL9>L!x z4BDS9&*0hZ9>5=dz_I(QPp`=~&x6lc9Qg%VKqp7Juz`+_a$y6V9p%Di;K(oN!sY-{ z?%I*U<^f8Ip56Wdj-4)iJYYt*djg0f08-+3+=UH1h2+S;E!@Mg+n?jbm|$uz~60E^MF;M_|V|cKWc%?2G`nP22-O27#7ZFnD&?2fUDH;AimabTQX3 zz68?e+3mxo;n58~WzD0TH-im7?g%;&i2;1e6+~GLo5qWr|9lJ{ zo$ekG5wLq5Jx~nlcJ$~hKr$H2=Rs0m=>cAT|3VRBlz=NF^gySAKztU$rope-3OZ}h zqua>?wD;7b7s3VI*$rOg>Y}0nE>K)l6kc?G2hAn%w}7s~bo_tR)jB_dzv;{0|NlWn z&+%5!_%mpVrTZUre7AEeXw;Wq9#m?8(i>zS%!L_x9<;Kxm*<2>cQeRZsFnXObbn|)P-^}ExTAG_MA2#2j&uR=MunHFL7O(a z_ks&6(9%?J_JZp2=obHf!K2gsWeZplSPDFWEe2Ka|AKF)9wPIfd-1;qmiZY&5t%1*4$~%yh8-SF5UkO%T5CJZXWkEt)dO?k4k8W^N#G`j9Xu}Y;CUQrJia=;E z(yG1Q9F-Fujc-7C*VXu&XZHukW(y{t?w|WX^;9XRYj=W(OZWTN?5^DzA}-y}cY#V0 zm(I1IGzOZl?)lBf&>hACDJZ*dyy!{(|KFq6I|Ou7ID<=PvJJnWvqrZYN2jyH3x!xl zhHgKW=9g9_lFcs}OGH2fKZxK0tUqLR_= z2D;QHr`t`S(?zAA+fAa=MWwq6RaQt>4f#2mIbO{8c zv*p>{4jKXlmjIsK=UWeyM0s>yexV`8z~Bh$M1WKLvQAjWS`mmy@e$!N3@=VEhotys zuo6%m?idbEHg$nA3@>WCLCNN2BMYd16)fS?>n!lX@+^3TN1SJOJ80++T$u)guG9hb zdO)KqmqFWS7K5gIFg7w$53=rF$zl z9d$-nd~@TFkCkjyME|qJMId)gqXplv-C&v59U(V zPS*>s)tY~>fL4-U0Hvze5}<=|!Qy<)KNxp{HXrf3{Oqi~;0fu8`1E=!K%>T^H*^E2 zqXIsCtt1+}OY!`RDI!S00cuqVcfg`VGyobfKE14eLqX^NECaWyKDL8YfMVo%C^(4T z_{%W7c-;w(k@rlXCd;{9pxze$dOwLyZlmFqI`@LM0)h7kae_|M1yA6D z_oKLUyGghje*=&G+ygB;yYAS1?!_?!28M5L9850VFI+m;f||MfEucVh>^=joJH)^j zx_Nte^@@NtJTrJQU-jwLxe5wKuTB?D0mtS)jAiM@|I;RTbUS;vcAo=x)1ef-UhBca3-WSnF7QP43YpeuT=fwh3!liki99=)E-9=$v#Kuh$I?D6bA4=Obj zUhIcD8q^&8=ElK7*fYh$fCzDZ zlm?xcb=;K!w4}-ddb;3?Ti}ipcsUp7@IlauA!x3XfUUxE1x=GO{J+q!7t{=4C~*Q6 z2#;bxhsvJ@7Z(>iLE8#`ywD2*l`EG)6$Nt`h|yZvRgm?_p`iVjy=zns{QLjkqwx)>G3nAB#o^OyT5(O4!T6gaXrI6( zkM5r?-RE3eZ}Yc+#^ZdtnLw*05$lf~`2{!}yDvKO3pfb)_ByD5h8_$YyB+?3haGxZ zE_w9wfcxSuojq4Um1r7&-3iD42Rlo6H+07E?(mp#+=X`!s26(Ng%`APgyFag?-3B+ zv74o>(}j1-aTnebpt|$83-1|__;DBB3t+nCDrgx$i0KMCkhci5lD`*xAv$CeLZ@p( zX9?(l)e@Bgm(CcKiq6s*9-XBN94(3jN^%^#54v>rf`(Nb{~tUKzV;q8GU(CEbHFp% ziKnxqcSC1P?~daxyL+d>vd5{01XP6fW$m}dV3+~LA8U%06{U|S=s?Q;RH0S2=bH$ z==c-ZC|GBSN&rYO0y?bY<6yBJye0`WNcf})R2YKB!Jc^`ipysKG7K*`7lOxg4uMsG zipvWD;No(xmkh&;JuRT(5@Kzd-Omf!y9plxLmmGz=)UFA z{c{(n#Q)i0@^)-00 zKbVoB^*{;l|HIbtB1KO;dgDc2b9!{@zb^FXjS}(b76)fD&}qFcDjNLT+$CJPy%b!! zom4!!gCMIl?_L3AO3=Z_CAQuEBHiu+{|{Q9D3a{uVd%ct=`Y~X?GHJMFys@sU&YbQ z4RV1`r_Bk^PWx_V$4+;S|I9v}_8`v&fEGid-S7roR*4e6kn??EZA{P!ZpODgyMOqA zcZN7xMwpZt!uLCPbh}%4K>Qo>;(QRozb0V+n!M)n=*-u6UFg{xVdB$$+y}IHAJkht z^TOyW$ZIFSJ&voM-DiBdf4tb|3)+(RALLh)Zg&H)UnM-c{VkXefR8d~?sPYJk@*qq zRSU3JEik-VuK`|g4e~JfRAkV-1qzVuu<@YFm$9CgsNm7U zA1|cC`5C(VKkBi)T(cs9y07@DLMK8hU8#;UdUAW*c z@xmO;Xah|^f|77IX#Z&+to7y}@uEBov<~(B3x3dvm97H+PqL>F7-)SsXuWo~qsj`#((n~bC0yV(H+Y%$3YHQs z@NPQ@kE4VObaf5`geOqK1-fwx%2O!e+5u{sgXKVHvObe$0Iy1X!8aG$(*jF@5*frk zhZT&afh#~}g2n*Bl3?56rhsh+Ey0Dzf$Rgd=^#9XQu!4QrP3a~qR*bfY+5phj{)I$ zgyS60J4+8e8sC66)E{dEZ4Y4d>Hc`E3AAH?(Fb&MA$ZgA3-wTb23JU=yBh!ZghaRF z|C6rW&s{oe^S!!FPPlf02^@@=nMfBR{@1EV@yGngJYoGgc*1q=uT~*rYqoUy1-3uCq z`hNj*k3D!i0czZKuyMf_pyQsZy+G}P>mX)<7Xw3cy#k|0x3h&uw}3~dIEdBl!O`i@ zQOX5kdvtqPycPlHwN9H89-w{p8B3WxIxS%eK!L;J(dlmiaw*95FRU0CUcLn_ z*{uj*;BS2lniB110F@%=UcC7L@+~BU{(>c(K?i-gbo!=yb_?(eaCJK=@C!Hzbh@(h z3;I6i7j*sZYU$y^-xkZrzyNL=fEU!J@fY775cY3!wN2lw2mrmEkplecHXLtMabi01O{KC=tfFr-tflk-+V3F@& z5s%K$!=0h0K_LQ>yzJ7MdL452YNzjJk6z#Dpia8$ZkJBi{oQUn;1;kaB>p;Gw|jQC zK~{wYNw{=^#=gKA1XR<5avUgv&p|F|f<|zfJ1A1cL6OSs17eDSm<&Fk#<*{~BRI%> zx}7aR1zx9bx~sK^3xCtafB*lxbf@Nfb_;lPm)3j2qu;U9AJh=G09^~z?F25dJ-WRu zK&K*EduWuhdv>$?bXI79JO>I59N*?-6Xpqb2k7wa?y{-&jWK%=GL0`0}hKz@b| zj2?|gK-n0jwdn~d@?NwD@`KiO|M&qd9XxtPcRZ42cu_wCG@U@Mg+P6=7fB=lLYI1ormen2fzvKox6Y85YXHfS?fDDB!P5R`~9Rxo6wi`V8`Tv6PTgyBd{GDb9S}CCQ}Ln(!UnCWd{F>l zgVsvENP)0HYam}lK-i$QjW2v4Y*6Za;Q(fzeqr&FkKzAO>pU6$rd&`XyBmCOhM&L- zd9Z?Wpk|B(Xv?4jBnUWOf?^611gPyp1rN~P$B!P}K?M$pP8aHR?j2XM%? zUIJ|)Yc{%D!SQC0-%2U=+cTOiOa^2_o6MbJW(0f>nV-8N71^bYOvkW8BMy&-ob6fc$6(%QK)f1rh*-D`+(vnx|jngG_1$ z-3kT@DlmqHS0iM-+AWW6Av9f}IE{X30dAga<4F4gdSkP$Li7e8@^PobFiy)e3h%D6N3qgXVs3ju#crK*0>P zGaITA?E5p|@N)*mD+e^wgE}xT%s{!YJ6Ho0n9?5I?eIxKa5w({1&`y-pn)U?NF0Ig zH3t_qp!5UU2!D!^fgv~yRP=zdKWLLIDA9O$bbkb|Y;iSy;@JJhr?W&Q!l$<=0@Maq zaJ5w92On3`ebl4Zrop4zIlzPYzel&v4-JoQM-OllH9)|lTj+(A8K}r{4gg0JTpFB1 zJi0+j+91mag+N1#&H*0XAs{2XJUqHR1zzMn1qB626s*(J<3%)B#5=&F+vlgo3*V=p zMCfR($KO=^|NnoV-r@+4Zts8>rce18d^(c@Ji3E3K!GCb(cK1G5eRk!*zW%qd^(de zJbJ4mKy9dh9^JtOp55<2YNfENE%4}m@6jDxfk#P&Pxn{H?mwXN#lh85t;{uTLicf> zUK{XwC(wzZ;8{2kc90QrSZskR@$FP$2TjG;6&-|ls2em&`XccOXcJZqs2^GbT6v-d z+SD51)43QV3p%n0v_(uK4zX7slw=%&LFvQ-bV!f^c=L0KiU#O{t=^5Gx&a)OKD|33 zG4RvHGRuX(4SeQmXAZQp4oU$Di18DzUKZ#G;ZcuX9jM2gJv^FgGz1vV`^2RIVJDchqvL_@%%yB%Z*$n^gg{vWe0wkf)aYOqH)XlN7R@NS=j0xyKX*V8$B zc=hr?eRS5NJLH4}C~~+xyV=1lG4R@J3^m}&Knpag6${=m8|(pdv~M@RC-YIyZa%OZ zLk=l8{=fK|57jk}|Bt#@XS?t>Z2+w@>rR1OF#_&u27p}pqT&%K(FZGl&Z08FbWX4Y zsDlc21HT7+jNTKnS~6Gwlq$dl0SCx|F(#ng2P#V};-g>6Jwh+QKph6u38CgU9-tL2 z1|Hpw0igXD;57(0!T#Zd%zT$bBkvf|Dg^Z_KqEIgmWYv?H<~gGFZ}z#1Kk{86`+xu zYntGZ8)i!xh8Il5pvII(Z>j`J8?4(kq4hwiut%@xNlmD6FUWG`QrBJtx+-X>8xe=f1&vYD}O6DX!5aFG!O2iB@_448?xDT{i(Xupw zzfI@=|No#=kH{~+-7J5=XQ+3FX888nxO?=v7Wj6b_w7~r0~$h805!^1NP>n$OVm8O zMO1uxeJel*7Il_ZfTVK8!BX5V-MIxWpwj|MD}1_BIsPB_>8@q4u1zSK@7VnBKYz>S zfB*k`CSL=M2Z4Ou%j4M1*x3wPoWZ}{k;Sw7Oj;*+hgiezE^t4%o9CiOZ?M2|rb^Jx zs7`MVm(JCorKu&p9=**GpibuT<^<4SAZQB}!-C_W-D=Jfpyd^u3=FTWK`TrDfkvTE zywJ`EML#HV7iz%btG%C(;iUp-oVL3ea`k$!g2!=Z3DA53sFZI8UEA)_J9z(_}a{57+$m%fD<3MWeBbg!8IfJE&>I#^CLn*1*ik4A=nwBlHt*P z6Etm?;nCgsgB`TA)+}Lh$f9uSd5F^d`^P=)*ff(~_XBUBQbD_xKpP zyFtMWGC~0q{|TQCVUI$hI3XBw6a9~uL$}qgB z$On}-B`O8RpdI!O@v+f|AztV{?a^rgW`b@52KlNpLk7(E=*$rC=nhdyc%eN7G}BTl z1LlE}?5@wCu>us+AnPqQ-sNL(+{ozBeZiyC0(ANeXl)ZH5MN9$1UUc{Xx$|$1s=^u zz-|ClUuQreCjlAy&r#Xw0on1~?Ihy?x)7q1ffLl#`_}3D+@t$bx06Dr>+5bOl}^|9 z-A)>vuAjS|bUIzXcRLw$y8ia*EKPsW=L{P7>X+aE#hh!pM{nr!7r*ksu_o%#-48PE zMHg6&Yx+x8CI*IG7T_qD13p6$GDJKJbe^Q2$}Uj6x`1XQ_y#octkC24FrM1Lo!V*s8KGw62H0ClZFx)oluf)>1XI)m1x zbh{ZKYw2`RvG9OQNI`6ZXb6F5kN_(UO$QH=fcndwzW+VCodi4}Y<9?USPzbFHyMvk zU;a)f&;?WC9^J0#-F^z49x4!)N~ebggr(8xp#x#*bb`)q1F19U^f2-0b^Y(t?VIia zJ`SuMw6*5AtGFC!HF0ODyh~@P`f*onQ2F7~S!(XnS!xfRPJj;mr+9RO+<5-Q-%p^# z0tt9QCw>MO_>{ou7Zt;Fe|6nJG1MVN^fYMco3ZzdA>mGpTFCbn6bqN$g9Ydg}J@u|p5%>e1iTl99 zz|g%HbaT5;_s8yD2Nnhf*Y1}t-Ae;N61QBs_kyl-ckKQEIzi8~yN?6ZsyN=N02;bw zU|{GBQBmkDQBeU+E9rFBsF;8j*BgND)v63z>_h4BX($u|fAC#Xuwbg}EI+ zgCpYTfYUF&rNOfH4?RTI{$VJ?@Ity3oVBljRe-YgBhX=3y}al3WEftY%K&BVmnT7s zc|aZ77qQntHHVLi19(W$qZ5)wz_|jMuU_qJ}L&_f~DI>#iG+g z!UtlfXE!(jzu1@sT9FJ+{x4K*K@}0$TF{gwC<`GDQLgp?O{IN77u_XB7aJi+)jh$`S0bZy`lbe+I2=(>Pk&~*d9peyKV(+e*c|4T8rbk-WU zg3bf&0~hsMR4#zV%zI-$`1FSJICg)Z;Mwi<#j(5Uk4yLQW=p10cGqqr<4dpE96`f0 z-(KW#fLFDE4?^nZIpNvK?b+=m0~)ZGb?g>$=|29#hl7Ek+qVLu0<;m~ti^xV3eV=l z9G=aG96)E_mCgZOSr4+;qkAuCC8b9{m{Y&bgp$@LIu@f18VnoFo6X5EXgP zZXT5vpTQfkJQO@SdqFC?TS51Ndv^DJ;9y{YtOoA}&&5O5gTF|z29-R$9FUR+6rLWv zp&wqHO@|abOBop$!1sH;xP66>0Ti6z0QLag&~9nQ$N0?N%GX%$eny1NxL z7u4yZ63`7^7T@Wj65`q2D!|PE+9{);3Th0&P8f!5_5iieEIMOU9FDuFfbL*ofYkB) zt)Lr+cY;#bi|v;|E5Up}IBsO*7XUQ?`2`vH1v~{nl`y}6qXNI61L&*-1Aajd1AYNV z2Yx{Z2Yvz10DeJ_0Db|-1b#t>1bzX>0)9b<0)Bx`Q2g-=c7Q2?M(}DT!3GfJ(+!RV z&u(zMy>LheWjJsQzu004&Tt^#zfSgm1j7sd%LoONEkR|}UQlBibkpDI7ePs|GAcw1 zQAT|Ml~Lsl;4;bptO8U<-Gh`-+FCLUFSJrXWt2zb5l~)qjE9`W7Y)nCpwN&2s8tKvaM0}}0%_I$;9y{IHU8h}dfl`8L${NJPxq%z*W2ArGM%pX!HwLn&@8p#q! zjbsH7+Y#gla4Q+y8g}gVlYlmd9lQNxpzUEtaKqW8+fM}4PVV%u00$H}$i+dOI}e*~ zKN*OW1Be1Eck$?T{SIzFLpD)iYev_~yL8rqn$e(kl1pc;xld=UJtS|Hz}wGzpM%@a z;P|{~25LX=2c_T=rS8)&CdR`O@MPGruS(VExm3k{IK=)9(O#FJy{&Pd%8gD4;?!_ z{&ai%aqQ&i=5XxvVDaeoU;))XVjxA`q1rHYojy~!|GR2?HXq>eXg=TozGQW?XE)n% zS7%TQ(j(bH#u2)Vx6{?Rvy|PV^>(RKXRQ8lS7T5c@wlrwNZoN)YY5LC#Cz=x)82Z! z~ z++_j^?|#sU!#=&>bhrG4S|T{BOL#!lYy+zS#R?W&vyq4xO5)_ zHKH>>*S3P!k9C93c>^ttYd&HS|1yVx0e&|y$OBOON>sqxSwU8THuXD#uD1N?+kFsf zk!SZuh%E^&-KV?5z_*5i1`|BG&x6L1K)L4yXg`_<#7d;KYEbjx=S4e$Dkbopn;(t; zcXxtD=s-=#gAbV;yI;6;f9k&f;^k@3o`^P(lu!2sm+lyq1efmfpxqI^X%k%e7oRIO zbL>9Yeb$lteD{=NOIR5gx(_NJvOZWU@7Q{|RLTW(gzqKC?vpPHR)RXEB^=#{{~vbk z=5|Ddb&iK49#Gu<3PCK`1ggqd|n`Ka~LQbot^`diT)~Ar&cVPuS_w5Av*wvAL z@xNlz?w)^8e}dem=Gc0^RMAoSw4?RuQb~yOy3fC8L^95?)28YFaqE4cKrGq~8dA#u z%^E>Y8tjzt>^=mED%ff(cz+x=e+XW0uwD|>x&saFD@4C^It5CfKHaClD{Z=i99l1x zD0+g@{UN0Jlk5ZX9=)C%%#J@mcMFt$aO|E4YVx&SDiQVU_4Js4koRbQ#aQ|w`-Hq> zH@J<(d=SKD?gXto&ps&c$lN%Gfq?<;Fi>Iz<)2RQ`nVbuf$k~?U+|J#N9zg)e(>(d z?pYwa9Ia=7DE`()@P?+7p52!{wJ*7LA8h?!BH`J6%A=b_(8H3kG}RGwLh(Tk7wh9i zuUl`INP6~yW(6UV9*+MHdNhM1PZz!R>~01%|2!?5Kvb!YV|O#im5!E8AgWZxvAY@M zR!7Sw5Cu9&v>W8g?iv*V@Bxb)pfj049MJj)kW42mKY&|mj$xpl6*B`v!_Hdp=y@;e zR{B!BS!i>Xs{j7QRBp*IhuzzlVU1R&SgD z8vW=#3(A%O4;ER2@}I{43zjh|2Hid?3H+|7UyFKlH$q0u!8*?VztHWY5@0dEj+KF- zgs0c>fAbF}{&vvO4Iaq{o%px$7jBWnNRJ9=Ax8IwZbuG&0nQbSB^+rU{B?_Zf@a!&D@a(SE0CiO34wvZ_aG4)c~u~Vc>5C9RS%}D*@)qFz~m6Y;3Oe0rNqt-9QJBHtYtC5HgfV zL3XSk_vpUt(S7bkfhK5jiNED718Ak$IiGHrMEL?x>_B!jdUUrXfRb$QRFFyF;pOxH zFLbwpc%ZA_K>J5<9UWNT4Vs91-~rJKGYNEmYKn@2Z}$<G z6Ax{fLgPCavcBu4NAoY1A`ehg(HVMYgo}y=Gm|nqr~?f?i$CnvN(#`lMuCD!eF(cT_A;>tdl`h>jAJ!!co-Egs7hdRUZXX z*vXm=qM+)Rqo~gWsfXn(Q2EDUeEXQA1%prbMaxJ7{l6GfpgPI3`2|PwE5^#p-F_yHz3z;iZU#QRWd_y<%Ot@8;->)(4L6e)a}I)n!c7Cx zS@k;zO8!4QIx9H9GnAbMj@@D&-F_PXPkAurIe2ukTy*T_`+u_2L&74?g1==GxG%)k zeHoO%Tw70;NcwgMNPw2=@*MK8%oHf%{D1iWA~pYJgqO*>9k&| z)9~nK^XT@F@alFs_`|D{wF@1Ou;bbCnnblO~W z?2MQ3?Cu4HI4GH-Zpi?z%m)uRy*#1@8ov~|^qRx7TjY{QcNK?6ca(r<_gN3-yD!`Y zK_dgF!3F*`(8^q~fB*l#UI8lcaHV&j?vIGL_65cDuNMw#{0!ahDwggFrJzj~5{OL} zDlb?Lfa1knVkhXd^%vXrgL-W~pp`B+JUTrjK=aob9-STvAVz^lr-ue;N*Eez-Qfxz z-To3DjQJj*2>b7@09%*)UKP~g19zCf?Kbf8LeQ!wu*bpk_Mq`Ka92s8(TW{3CkkG` zS*i!}mqB-wzzgeCQ3mT9ps+Ilx%%7-u228}A9E03?DiMw^bqOxmjJu3LJsBi{Y(7{RYJLT#`2`5`IbQG}%!i0W%)fdSty3!&QSvG;(;e`@O&@gd?*D^&_Kf{(9M=DCrhL~yE(x3lc<9oQO6B#N1lHnaT2tL zg4?6}nhW?crtb4EN~eMv{>%`I;H#exL;DAa`V`i`YJLN?3TnbjkM7fs-4|WEKfbVf z_y2!GjYZf^~6cA6^#3XVEO@Ju)O8msD)pj`wmpm|{M?Qp-} zf?V+FkEF;LGL)YkwtdTT)UT_MkZJH|n)f28mLIaR_Dv`SV1a*viz z_s18u-~RtMzT~(AbmJJ z0igRHia|qs$K60}Wd@(_W5?ZOKtqiDQx6|^;{mZeyRUV|>2#leaWe1!e^9%5d~q-nv_|Ts0u$(1JJ4Cd65KKj z|3#}D)EGR$X9wS4l40=dYy%zk{9iN~F3iad76u(V{a@4vF3bfHb^tYQL`~tshZ(`D zL05MD7nOqxvp`gX7UumIWrqv%LWCp0hJ3JxxkL>j4C<)-7rhA=HirmjfK?xY3kN`i z3&6sw;lha!VNjR(zvvXWa27-u)Fb~dS_>C0h6s0n4M~Fww?KqJz5M^8{&3;7!eC#{ z0IRlu3yX<>g+Ui|{})w+3#&tfSAbP>!G#?lW^Vusf3|~pJ`f_j11x+8E*u3B2Hh+C zU-T$QxU&s(hX&}(5s*|j-+$3{AYpJ^=75Ac+b)0&nQo`X;L&}}v-_N9XWI=<28I`) z@~Z{X_)mf-kOk?W1oD~*bd)7HD}fg?fv&g%4O>C75V*cX&+m}?S-_)=jiB_~{mG@f zMkT@cl5h7z@CNP)plM*&-tzyh%%2>)k2!w-?l~_(0R|dyk9kp( z1)6bcc@GkK?bZB`5v~U0agZ8|7ZFf3Ad%N<;H!9Vf!6Ur%mN=r-g>)K;DrHH9ayCM zMt3leM>lihA<$v%j?C9QtOGQP0zhkOIY8<_m&Ajnx>~=L3VL+T0XyJWJLu|l#@AXP zcYsAfRyuTS2OT~6S_E_iS_()l$bw_-prbMwJ-V5FyN|ncd-J$-dUJSm2S|8yGkJ7- z1b8reNqBZ&@nk;v;>8Uq1{cO+p4M-roX6U|m>3usU+aRb;B@HN?#sl$@LC>ZH0QDQ zK(HL>Aha_Zp?jBJoC43yfVL_lhMK!;RN&WTIl`_+0apT`_=4=WN4}XAG{ON&Uq0QB zx+flB2Nei6JwTW7`KSbVg6`t{@&5v7Re5K&g-d6)gHLC+hf8O6fQx00Nb?6;&3H zVR-q9k%8fxvkqe^D5yMPPI_@Z1=LJ!2jx4TUT4r{+MeCl5f(au{Dy3)KHO46BugDZ zmWDtq<%L+P2ePyj)X(W|2W4NMUgrStu~P`s`CCB;e04iJfY#Q6%XskJ3@@s;fEv=y z7Czl4JU~*QOV2?o-Z?=_7@ZwZ9GC*y&GN!>3m=0IG$z2Y01bYn?z1myongUL56i|r zy{!HGG7K*kC4z$~8ms~|f>6m1j*>8L8HN|3uHYyE-9O*$8~}0$=t6q%^$|=jZfpiS z(F5W{&{9xuix-TJrC^kI*>`--X1SXp}L_d$pNGv5%OnW zY;}V9V>=fjy5IB3Fub^x0QSdZC-6y9clcl@JoRzOFudq>0r>+`WaX$tfZ8Vspq*eD zpwga>otRTNbwuzm8p$?G-4OT;?K@kqu%>j`Hi9w{n2WSMH0X1YmOpvRg zyZ2((f)-6f-3p>W`4`gvX{a(~@BsCGZi1GQcY@n}pyL=`bV`7FE1*VycXtk`D}XfA z0O~V9JJ-!1xfeE@Kylj)7Vie>fps`KZBG0L_ePGnn=*PF2d!*lfHp5*xJ!WgX(cKK zAeTZmzM-|JVB_o1kbMbuDA0YqE!Rx%ckz082FBge}TE3w0 zLTc}Nbk77;NFLoEyPLt6rX8?uzQfMIP$cis-3`8I?Emvl%Sj4N~sW z4d!@snwrclRE&m;p8FVKD=ed$DK( zIA*}&-5@<4-OV5l#BzuLQfnXH2!FX!4CHZ8Vu8-r2!I>44OIaQV7J^XErdD<)Z{gI z5eaq`s1w@V9fRg7P#+fNDv;a@9*C>J;*gGOH>3j$4ibQ`Dk^14(DCIE(1v-iI&dP3cI5*dst}{1QuG*RRyo)# z9~F%kch`Yxh!_>npo0UboB+osG!_5!=)MKLcl?ElDCpieX2*sK3x<*c-);ua?hBv= zI?X>A%i>(Ry=6d$E}SS1cI^#h1oh+jq2ryN-2oDg-3NW3+grT4c`mv31~Gbe@(6&I z26S_HbUT8^Fd1ArJ!L?1VBO3f-2$M2OeY1fkwts|dntHy3wJvifb3H1_Llg6!umvs zEa*%S(6xXboh+w3x|zF!LF-*KJi1vfc7hrm%>O~_ySc$DgEbw&gVrC`f;`&~8*73V zIawk|$p_Lu!sdSwkpH=j54d(aDu8B6HGI20CDJB%TFM;s>=ij!!ukII=<3n;ulXJS zpK!E3P{Qur&2!MBlgk5iE{C&#hbCwj;dzg4=KmfFKHc5|KHbh79^Jw(vR;GALFVQP z1%^`gW9=*085kHrL+nmiUAspZ*|n(Uc_Zjv0dNl&yqDLb`xmI2)GZ8}N^-O`xx3Vxh{sBuv=UYMN3PQDaf@%q{35}qsAoMv{P!*GX05Ka2 zPLH5`E6`m9a;c+rMFM~87X}7~?pYvv9j#}8DE`)m;1+NLXhIY^E!ujHfq?Cc*v-Oi$q1R;1<9~jI(NUTPmS(ZOT=dSdy8+}0N6SVKRqEr|-2n2wqh%wA zDz$O!2CwaNv;@yWgC=(yKmp-s2@Vg?%P_9 z=>l4I+U9^-y7gIrL?H!!8%V_qz15(irVT9K2T~1AFkrq%r_2e*?gRh9hFCgtfNC#L zrWKA8%@BY zQJ*}zZ(24Qa4;|wDT0Q5JE7v88X#%VXgD*(dJw<68>G;qyBWlRSPv11Q86$+;L+*E zfm}l(!UDwdXnqsXuoKjMU?_2I*a0IDM(2b#I4 zfYyjJfR;>y7N>&7DL{7}H6Mw9wMIbqn|3y8fR4~}V(Dzu0W&x{8$p|`x}A7DdMAS9 zIvY*ET@i3!)uX!;G{fuD-Ee@5fx+|t1CT2bxSPqRw^IUicwZ+Y*dZdFjUr4844?T0oLD~dM>z37t@+F^*vJBr@ZvGP#2?Pv z!zsh?nP0Gz2XsR~_XNn@Lts}xT!}M&BtUbYq{R;x_%crql=wlUKTx425$e&Kqp}gY z4a}!IwjOjg_kUebfdjgFvy>gwkUZ`x4{9ko?f~`NeY=G{L3aRjx~e;NJ6UwP>N|Ej zb9A~|J9dK?)*W}X2aT3N*Xx1C0U*m&OZhuX#b1KX^lkplSSse&ec`w(KWGWsaaVEB zk&!QVGB7YS|7I!`cI>|3(&@^7+*KUZ2nMg2YyQn#DzOVxo*j4P2Q^KPyNZKWj=Thw zz0JQ_N=4BmK~8v`)%=^aRCE`_5|}oyOhEH*HiS$9Xj7)EI9SH4`8PXAhJ}Fv|$Vs$buD#gEp0bCR0m=kGl#(ERzQN2s|j#{FA9vz@^hw z__(Vy*gr==f!q9(xm40|2gFCh5Fdd~<7Rld6e7)nDGhSpOK@G#{FAj*%y9?AE|_kR z^y@6g=AUdxauBacgXR1jn}4!{<-qP1ZUB2u8tgeE$L60LU^%eYgc;aCK9mM|?X{R= z^H0uF562x03JeULAYV$qIy=i6ban?9Xkqn9k6z#ZpaX6^K%2inhC;7t02R9ype_=K z0Xn));s1r#QXajc-~UN7yk__472Wp_HmXt*#K!QVSw8?x zzsUU^0}s%==}pgWPRKa&3yrOyA?pJmr3x3<+9YJd>UlFwL8L9Tc>Nl6}M#$xWpuWCiufzY=0~N9!$rn7j8$n0ac=YmI@UWCD ziS=lH$pLDxRetPl=iy>taIrp6ss!3W$_1*GK^hJ|V(tV>z4*BZ)M#i2>rd_n84oUD zJh~x5pwm8ky$$}igJfRJVFqnA0u3y{J8UQs4vIvi{;ErNBjoZwO!tD0%E9VhA0+pJ z6#YK{cP~ilg(t+lASsXJevt7n_kxAs?gh!bc*8`hdm&d4V!9V}oDWv_#vr*DqzK8q zAgLEK7lOkVB;}FZ4>BI+Ua%0vy&V7BK{79FNOmveLPkvYf{rD^>RuZp_kt85xfdk$ z;^hLcdqGkj$^9VXVeSPBLEP){za1p=qKA>x@P%ADiRoU@kxE$ItApfTkRl}af}~zp zLfi|I@<{Fn84q(WSP0@?j{of-nHP5$NOdpdVoglRuTn_kt85xfdk$qH{ht zd_htk$^9VXVeSPBLEIbiza1p=LWgAcLN39?bZ-LaibZJo5QSVmfbcK(Qxc$a5Xwk>y>&_%cOf@}6}2LZ>8jGRt3j{MsWf>xFt_G~^N;L$q~ zw0Gmh+`#|;9XB$<>r!*L=@xKxa3K?9ArY{XLFe`ga60M0WkCLitUpGsZxujQ zPJ}0DJIP^B(0Zj`FRuOj|DS)`iIxMU0o}~aKMYIEntvFVs5JjDEtLXIVXJ~J5VmD7 zU|=ZX^5_lq@aXjwcrC@h?ci$#kKSpZbK^XE{RCcfc=U$bc=Y-UfX_`Y4EX;aJ{1P9 z-#{Y=NF_L^{D$s#0WT%%U88aVRM9uSF<@q3=w|Zlz6rJ*?A%X2-9K$Xjo4yAk6tep z(An=fObiS!L9Z2(1y$8pygpg8e3?z#b# zSdP1%07ck~zel7PKx>;5j=Khc(h}&tVUOO>0FPeR2cR>bK*!#D^tv{9bh^Iq=yjdp z(dpU&IYQWVfk&_F36D zin;+h%lpMVevoG!l#V+n9rNghBp*;K7L@i>K$nKWH_*gGcW8mqD|q}>0X(?*)1&ny ze~T4pA1dhJFhh0*hGt8K4U8oc%~lNHQ+upe!kWl|o}jsw=6V)}63OOj7Kn5WT-pdK z%>kC?fJpC!OAAA#dBD;<5b1w#=`S7-!v(<70uX8YRWQ4+LZwB((jpM)2DtP#sI&xF zS^^?{5H39(DlG$+mVrn!t%ez10hLw&ODjO6o#E1vP-zvgvSlR+2eG@J{ zA1ZAFmbQUNORa_3-2jz#082YSq@&@|iBM@5u(S(AdJbIL2`cRYmiB;1--SynL#2Jd z(moJrxpgqRS)kGZVCevebUa-8DR|1bxjqCe9RiWw0GB=nm5u;QM?j<**TW274wa4p zOUFQ@gW%E~Q0WA)bOJz2(4wrrlo|kQ|F9A!JK%_n3bN}a{(iLFo3W)Sfxb%9cbPZU#1|t0m zE13CiZY-kfyM&Biogu8qP1{E&QL|515?3@ zzzndW7jQ*#P(`5I;=qc)46q{QtuQzJbOsjz`#~!Kz>2^Ou%bM;qAO5Epq;m1MPLS4 z(N4Ic^-x8iOYXpmzzndWFK|U&P(?c!7#P5czznb=`)x2cr9u_$fhhtrz>2!yiX5Pd zK$|teCV?4XMOWd9q@jvHjZ?59FaxYeVLQyaZ%&XP0JX%xiogu8qHMULi%>;pU~U34 zz>2oP6|I3P0@e0llfVqHBE}ss>)N4;K%;?RMPLS4kq=x^5>yeW-3(R)W`Gqx7iRZi zs5DA^^}(f=K&4UQ>pon%6)KGqUk3YNhNnTLQR1r*F6|DLMv1RYaA^&wG)jDZhD&oo zrBUK5WIxRAS9TD8qqIu4!lh3`rBPZXVh3Ql*FdFFS|#Oh>0YQbN~`1sTsjXbjnXQy zJP0$~A1aN~DwzeBHh@Z_v`T)%r3InVD6Nv1LomZX*+Tq{(kj^tm%a>@MroDE9fs-N z0+mK-mDIzfr$VJsS|tzQ(q&L-lvau35t!lOP-&D_$s)M41ymZPRlLNd z`lTK&tqPS!sb4O@rP-j;DD{irS(xF^Eg=3zsb7-d(kGzODD}%?xb#Y>G)n#Q1uoqM zl}4#wT+hMm&W1{()GuvtX&v{L67bR z(4GXSlRf@F0EYs^ZV>6w{Kf)wa-@Q9_X(HoL%Tq;!!O#;|NrmNe8d8@->CTw75ooc z#*f4QX!e6~<}eCB2L6_gdk;P?d1e?t}#gN{2!tWWiS!^hCw4BBqj-8~0&tyDK?Qyy$3 zC`j%FQyXYnqZusT4blTTJsPw+2)q&$B7k*$D(4%}K_;NcMGGJB`pRA}4)E;^FN&Tq zFf{*QEQRetJ9G<_xyL30mi(;&<}Ah{QdTEOlBi+6+ccyu>| zIFJQa5CN?2S&4k(3*PvS2fGKf{js}y4VrsEn9j4&X&Hw*`@okUJI0cXHegV+7tbH%|7`pp+urn~Uo-DEU>2BY^&cFa# zW(i-f*?kyvwH){^IZKTaj{k?PZ=&5V2i6WVu=fQhsLs9k+6bc0zUb8#1)YD@D_ZkV zn&E}MIcR(RQIB5HsfYgm2cNs~!n>aZdaVfR`g&+N4GI&a^$NzfJ14e)PksMsITPgW zGF^{uu&Y6bWp|t0@aVqwqT}5E|E&i~R6%$0vK(_0VEljBdOk>T(Pdach*%r}t~)^o zdVn^cA?JKZ0RXBW_yw52bsOleSA`c`H!#Xyj7a|I+5G}^p+NVq7q1udF+h*5_2|A) z;?=MZQj0ozbo(oK^ae1#kZc4k1#)Ke=yX@`=)UUFed5Kl<&ZQgQYPim9nRs?eH1jQ z1KPu&a~+aKMT(w*T@E_+3F$7P!!LJVM=6hA{zm0P!xNT2KyzHs^*A2gHyuH!B?dk6zKo<~^?EZ;r}IkH$CP$=vRppq(l{-9NkAL3yL~K#5Sp&Pvc4 z%2LkO10}4kMsHs;J8ot4= zRCJ(x11N0*r7gg;Ycqsuhfv)Rsvkm4hEUTX)NBYfA3`k#QI3}LL1+Dxg@6hu*nWrZ z%b?Qj;3F1K=II)s`>LHdAon0Mc^rJmVtmPi*(2bE`3BGi^AnDsEr<-B-Pb|oBi>-zk->vPcgouD~$1&>ZwcCdQS?sm|HXda!e{~f#ALG!+y zuHQYo+dV+_2za4tdjKN?L#L~}PiN};V zBKYDXJ_Z+y<=~tSKL3*&)GP#TiJW{H>Sv!`*2QcOrXmrwy1!nlzlq4sDNU}wfl>!<#JFg^0%>qE zc7O9Y_>9Gqc{@mHcNm9HFKA^qn@4vCXyWL&>vpg=K!+`My6*Sr4P6d8*QEJ?#&Or< zV3|(W^FE!f*L^xu?|XE&&j2@uk$tLZ`}*uG>k=hf5u?;2CDOJGW~oQ`TNi->t(y&W zgog)+5@dYs;?XVU*$s}U?k>=F>Y)|6N<&^0(Xr?XYME?EwQH z0dk|l8*=}nM|V4DdzeQz&kc|6c1Qz%A}F1BKu>-JHS${zl!|$DPX{Rk#!ErBW8Lm(FcF=i4zRX`7yW<3!Uo%!1 zc_bh9=rsXf&6GC5vl|o#JO-dkKTAPJX+aPDH0cBx{*I&hHDl#%&*mc6!e&qx;m053B$GcQE=7I$6uw!D2T!V}YvB4L6`J^yn2`P$13lB3%t!h0eGE zc2_S*NCo1qF7N?E4hp`l2TCoF&G11oBL<{F8DfSB#0*c6&;w48-(GuqbO&>QPT2=v z78HF5|!ns4{f3G&!}haPm(*0BP{y3(p0su!rZ05=3|g6JaF_4mJX_Y^4!eGLZZ?jEThdKwHbD&K(?kNs#lP$~ct+$&cV8P;N9oVs!1k*lp8(@DY4zk?_T;rd85#kRjvBW^dj^rg!rU2cI^@0z~j8Q27 zHM=W7_qu?xgGcj`0MOoVkl(QS2U0LNb~|u@wwFMB<_S96)Cl4s&~_n^_gp%BK$}U= zx^{c;_;xdZPb=pJ`4M!<3h4Ti9LJrYJr&*F3Y|VG1>N2%ojxih-QEJ7J}L>_-Xfho zDkl*L!gz;|p6wkYV7FM@W!3go1Zu z^ya7-cyz`JfX350OC=mZCxzB3bpLbV-*(EQm*p#{(1BfL$K|mTe#>3+!w(+a2Va<3 zfDY1p=+hgbV$k}nMBcOelCSn5P&?YIn}x}vH;BWdo5Q2i>j&tVu+rBa-OUx?rs5&! zy<*+hzzZ8eyP~jN;g=4&!~nS*p8GO5Kw#hVZjbsc;QOsoKCbO6a6pcsI+2S63N{F48W+8n75JGl^1 zaa_)jW_U464qS0m7lQqH03;O71okJm$>7r60BQkxHXji5YPLDR;MdD?phOl@T!9X) z;@@`h1^Yixox(pAJjfb-7?OOV!4+il&oA|LB_)kNL2b=?=Mu}tpDzLvkCbRO{;beQ zIZ`6o_)~#B^@vBWXx4F%16Z3u6u--%!ydh?p!rP@egBv=1Bjjuq8oqyH%$d=1ht1f zdPNr=18ej`()bOe(4&{t@2E7x;l`h!_HKPaNm}zkuI8Vd1j}U9h5!>rLRHhIH>*GK=g#@ zJ4_7OcbFK0?=UfV-(g~KzQe>&eTRu5`3@6<^&KV#<2y_Y+IN`1=b(FZdvd%y-pm5# zfXbI{F9Gnpfv157XzwLb{BpjSe-)Hrq32;6<%5P@LFcQ2qW%aA1E{qMJ9ZS5G{6|9 zpZE4xRR)jlTQ9P~W_VYCPM5F)4e^2x?l@4w;?e0*;nD3~0Tb(N1eJ%NV?a)ObT)(7 z9-Yn=$DKhNH5p!{fO{pptsqlD>E@;JRgiPefa@3ND8o;WZq66KuYlYBXop{t3Y``eMnmw$qW z?>S#g0jq^sQ!4GzE$#vu+VSUj;dzd17sP>01&zFc&gexSdj|zDEPQW*{K^kj?#=Py z+If(b+@M*X=$DdLz##)tedY{``tzWBW4b}=FM!lTBQ`P@Nj-9SItqZ!i0F((oW$p!_Ga^_#Ix8|fy1h9(I(LJ@{Y5+2cy2_s@v`+Y)DB4c;obXL zmElFeWj+S}ZLB*#t1`44D9s014ZdAl!T3LXyw#&yR`ZK01L)wXa*uA&*3YU8jynuW zK@}gb#1~bD|Ex-1R2g1eJ;TS)%_|NPIN8a|{{>_se=BIO255bCH)vJ)Hr9a8pd<+j z)$SSW@7Id@PepY3$WVQaR%21o+(#>o2S(U-3mv#MFX@*^(-YTduWAI`|H>iYV z4a}AR-Ll}*%bT7h0lLr#bVx^tih)NjZ`;5B|6e$Q&QonYP|6CPcLWWq-apL8@SpYW zCr~in|D+1Z&`6uPA@0%e=;i(TQI+Avgj1j+^7vaoO?psdDZJ=YV`AuK0aa$8siRtU z@WIQkxxm*?SRdr~KiJ7y4f1suC_!|x9{&i6$pa;FFHFIAQm}@BLag;biO36<|DYni zgk>}1Yg>iAxydP&H7@9A{Pj1iCQ^9GEp=qfV9xy!Zt&`#5X*M~EE% zw#y#9ysjYk2AlweH8?*jfMXI|aiE?+j+8%mH9(qnU*KbCuvGz>Rs!lE!U~|r;O(8f zEFgQq1<)pty}hj5Ac0Qj3Xg8q1~3y+bhUy@xQGgmPT5S5u`1x(TX|DKY>hLZbiupx zgDL|g$EII^<_>sy18@I>PRjCI#&(U>sAM45ez%Rh6a$1^U10%m6JHG(0 z#%XB=enEeMPy7O`I;W)>KJg2>D|mFqYrH;)TK>K`_ZJ+CPP;&}FcA0c&Vaj5`-LCE zePS;RPlG1hoH;-)lLfiV0P3<68Q|st_>duRqmy5NHRTk-JsGDU?%@|;%{?W};L#Zm zJ{ZXW>@2VbNZAJ>Uvi^f00J(5dU;jft1`SWH~~q|@{qbk^F1j0#;7Q~*bZ`LH|vJ? z;BI5-oRCeI3wPOl2+fSgBnK!rzV7g)Ocgh%HLFsn17;4d<@Oi989I!4b=(^4%-<)Wvw5_i}orO z2GFjWZa9rqdUdh3? z`&f522e?~$zWFa>DfaIF;dRusO^SyWl&W)!*83A%#2q;g2yRR?b|A3Byfl?9#gZz)SKU~41 zSJ(7}Gz0kTlfR&G2652QrJLHpC)e};KkU(bT%h?kOVKmq1FyM3qlwH1Ji1+ua)7Kf z06E11G$Md@Q7FVZr1~3Fkxd1qRM5iM9?;IT1EBB#EjIzRPb`eTfhMmUJi0CU1)2B- zodoy=ofJGeoeVs>k2_dw2d$m*;CDUd(aF^9Xwm7!)9uL73A($>QNyDXbfK-Igh!{7 zgh#idg9qpu+iph>k4`5Ik8Z~Rh#~m~po>rEfHG~jcLJ<7jPU4mjPU68j_~MqPVne- zOz`L|2H^;g?(Lw3UmmUBN=iJe@0H|xH17wM3Jj&G9=+}s9-VFxph0O+Yp~NT0aRkK zcyty-cyw+DsoDkVczbmF33xOgw0Lp-D5%VLmjD-O{u=);v>Ygv2g!n0E`XJ60V_HC zLgq9dgTq$F*VZ7%@3k>2dT@-ld|z6Gm_2KPF6eK1u?f>d>a?i}ha zQOWRV{RTc~Rv)5XW|tJhi|=1}8D3g~PO1P6(u0z$12_l0&;uO~*$t{J_*+27BYJdN z7$5NItd?+X`R37?tpOU8>MR!M1f2}!qLSdz>FfaNoP%1(0Uq7{1~2BGy9CwZYj}Cym^X>#F)=$3(O9IU=dbHjK^)Vr5IDo@92YfIY;xzO#XB^;tjn2S0!3tr;fo)~z!j+hC=*G;PHsN` z!m;`9|CR%#${yX`1~0B0hxin7-xuVdAmmAZTzw8u5d$gjL8S|HYTOfa;Km0R{%xR> ztUX#!f)n7Yec)t0d%G0Fi?UC=3@;7Ag%u=qPCN__r85O%f9nxOi1-bP`XY4_4hh+R4PD4 zsz>J*@CfCL&I908hdH3YFYxKyq5>*ZT#dg$&--(ifP_Z3zX7N$1;t2-nnyQ>i^WDz zVOzrM(e0t};!7Op_|jqx&{#RBS^Yx!=l}m6z5W(2w7|yKZ}aJfm<$Su0*`KY4N&la zOg#T$dmJdPAOSF4GwBPS8P! zy`mZiq#1lb=jON?eS6UjE*`+4S`BJ4cGjpQ9BTlDEaMA%@KqzAB`FnN9=#rnpaLc0 z#mrbxXn_ip5`CY}8Wjzn?(?8&(9Rqc1&{6vE*&Q9pcE0rz`)?bzwJZIfl>}odnE|0 ztwbflxBI+L_fg|ZAVq({w%33znut*eaOB^1%%>Z44r%idkf#oxIrH*&4X3!|c zYOo0Z6!4i3FRwB~uN{P>PtWd~zO5%qv^{!7FYg1j6i>gHTnlO*mP#CBEqJWT!02(D zHTE&22MfuY$5=KC67TdAzaM|+EAayuYa)Y(kFfaUeJCYxDZ1=Z8wbObv4x>r;Ql=ymih4+E#`yadv9+sx_ zAE`2w2)_6M?vUK@V3zHBq{{G`*`xd3izEO3{|6aUYUN>RTK-6tp_J95``&BC7pFmr zt#6d^dUT)m&_40v^jSWz7La!TN2&}jx}Z8sj)5%i6h#kywe`4GPra@hP7WZ?q&d$77D24Q{x-Z z>4>hzCqc7J|Nk>EfcyU7fgi|J(+kdr%%D}_c^;i}R6u7adUWnl0i6d3DW7{mH{tyN zr65Np@H#OL5IYnUdCjjI!1EiA@R`2)0m$_F?V#fgK&FBgB!F#cJOXkU!sn1c_Gq@< z@IaM;0XBgRsx)Bh0l){;yQlbUffn5y_UPp;0;#|L{~9Q~dU<2O>bq~eIK30(s}ir)+of(h85|fGUR2)T z1@$O}K=<47f_A99SbmThG{UF`Ud`^&%PS8u`O!`Wh8>{g?Vt(=(Uy+~+4b)}D5k(8 zg`kEJXiVW{(@s#928|!IoGf8|arpr=!;3gbT0DPWmElFwPH;rKdUW$12Wjt&QBn9W zy5v6CU%kAm?}MYd`^F1Nu!}(#fALNODTMd76?QT(K*oK+y>D>P!qU?z&{%ps1K6*c zFP?$dwVr;__xJz*Mr%+iEENHJ*Y!SVd=!)_Uu@a|9idl1PEZi@x^IG2&;S4b|BGD@ znHfB~d4=z*GIU@5FZ%nQDuc&yR)+gXh0)7pcX*)_2HlLT|NnuO2C|lmdGw0@<@yVn z#&PlxFbhJ^;BSew&LZ!wzWOYyfJ|gs6D5~Et)HTl*Csb#EJ){O z=xzqJDQy?9G6Qqf+6~y$0M$0<}ouUe-P5W!TlB30mk?qf!8A zpzR6;RmY%8n!g29gn|w_aZyoVU}&)C4+rIH6A%-;MMUMei;4%F=X2aeB?iRf7jRKg z_zXHa#e!eJN5z0&ut7(YfdM4!z%STg17`cE1n>(s_<-1g9Wj~=ppHmqdk)ww?IoHF z3@;9H^D%T^=xqPM#=y{h?!_T4(C8QFl(q9O!a^Y8Vx%ldIKNX!{j7^;~r(4&`?w;9X>ZIJWmW%XYI=7Bc3dGxY6E&%gDm7GT} z>){R%&so8v(^fdA*iUkS#L7ToFMgc>bIQS-w;&FOgMt*OkbVH- zFmf;mgE*H@a4~>rX-00y3i3%eq!}D{fJ?k|F+PUwYaX4e!D~LcPrnG00F_1jts0>6 zsr&ScG6x7>;@|)O7VSkE3=AcXyCTC3jX)+=f~@h33=IQuazGqEs7ySBV`K=D2?B8f z3=9oG9M=z3|DG6Q;_4O}|p{DhVc#s?0AX9y01%iY5}m_Zlb z?f{*Yc^I_hmf`RY(Av(!J3vQ!9tNGb&TtsKMD;Kzuh$>e{mH~&@RNzb>?ae0%}*u< zCy=>6nHcUsg2H@X@1FAVgw@8L4*v55N!U*Si%M|5^5pD zA)v|t>Of=Y@~bmG-FG}1-+t&-?;e9Q+zbK0ES9f=+vlV)^XIFW{lTuW=b9 z6d>TpuUY)!GrvF)&u9LK3!nKT&w>;<7<}fBJm$!+S$)HmU(@-7E5D}q4p)B7;1#a? zn$a^{`8AU}T=+F}R1{qJHA_?kT=+F@R6g@ZT>Q*0P$dI0!9(S71VDz~0oet$2J8!XaDZYS!%GTa{SZHcy>#g_e+1Y|AE3@a_7XUO z9tK(S5M<3~e!)n1h*^B*2YCjRxIigXFi-=euEGZ7E#F>gkM4sYpBjLCXaPz$j{K1V zP%FSb1^dnhPTuKXI&GeE3|uKXI_J78|% z7mNf49oVm5K=R<2g+?eSFe1J?@@rIs(~t$ohc=G<8pSU>yB~wwVxTgm@uy#ykzsi? zf6ICX28PC;EDGgf<$fh@jXyyJb%_N?#7wM221J*Ml~y$V0<{@-fErUfwL#O+E(Z@o z#dH`L7t!lgS_wr&oYfcK0W+F);iW z?YyGO(0v2EIGw)*w2vOLK)q!q0|NtO<$6Zzfszz(OICJ+G{cL8*WiY~a`)*MS3^Y^ ze7aBg^s;hq1P#TAYJiS-0@XAxxPI|6oasLOViQ;iXbIMf4Im}FtROS?+~oze4iRI( z;65a1Pn8A(Lw7&eE8RRNx(|DFLcD;XvJF%Te{=9~DCGhTtNgZLU;thESEAwpY1@P5 zc@W)Fr1obx_%b{Lk8W@fdUk*G=sxe;{h|BSi|cNnp5cB0&|1e5S$qvWg@_*`y9AqZ+r=~fGq&j?uIP${4bgX zGN?O7B?7eSD@P^4qxpz|V_ZDi1tK8#BF%px4GMd7&jdxiC+K3+7cSkOd_lJwfsTpj zZhoS{z+l<@K!bsy)DN_nO@o1(0WROaa?(Q2J3=GYO zKq{C$I-4(OFfhDehA1pa_zyPDqq7;LsJk0vD(IRR4F(36PLmF}07%xOQ|H8gu)Uxu zAiwVBFJOm!069d{qr3YB+#$>_7JGpmQp#d<;I-O+uu6~4W{`^RZjc7hY5(9P3%ZI1 zBmfE~a1RmhfUQUO5s%IY@a?%_pc}v-H=To9x7~A8Kn+a(@B^;hKRr4Fc6fBZa_Mw9 z;L-i_xWfV-P}{S+6O6zk*&sbHlk8$Ae(Gfp;w^sf&WopabWIKi@#P;oOTQU?rg3@M;Z6 z3Geqc(hM)w-Qs2FKK4=z)a>sDEt&@{Cx+xt{_q3F2lxd+0-)uy|3xQV0(EeER6yGl zJbGJHK#kz;5ETbk(2bDi!Ku!ra|u}Z#WojEN48WHG&pwL z&mNb}BTa0lptO$QZIYrv+9HiFJA z1Un!Z>Hu!A5|9Hr!Af}JKxT+S954}_NQ6Cloh6{Q`*fcL1+@k^p`?IDAe3NfBM}-L zGi{;4@nRL|zBq(y76ib8!whVd=x5Lgj$qeZ{Q?P&TCft3YlOi{crSp=Xukmpj@N7+ zo!J7$2SB?bKndKlJKDgrJKMsu`!Q%b-7yAKmNsci;9IJ=wN>r6(5kY|DrF?f$Edi10_-5O!8`_G{Xzsr_i`K{bG?n%=bG^f?`_q zE9h`ckjXEue+K#f^ox415|Hnwf|c-I0-4cy9Xjim02+w^d7=480%&XjRLO$MO99Yv z5E7x_{2vNlHPM@+(%{kf26O^HwAcjQ_SgN>rTft?&{6BY-5*`Ln<14=vjeE+*&U$4 zz~I%*a=-($(zmx2-2DVCb9aP9c!5u64k#z&sKkJRAOkc6blgQHKnb+LqjN2&U)#7l z1ayCg00RTR^QmHKkM3?r;nE6{1kK9?{1;U{tIE)QqV;4+W_LHp`v1p0x|=;T7#OT= zI{2HnfpaI=K|Z|@ZQU#}Nv z%W%*}Jg{$EI#+`n^uHNIf?~V76;x*I0y*6$dFl&r+TIIxT&HUT=(g5=Vtcr|SXGR7r)$an}w5P;|RaPzGu2tX<&KnY*Ghbi;AiEucu`7j!+rFX(!M zU(odhzo6?6enD3benD3WenD3aenD3Y-_}d~eX~HJ)!hmy!dwGn`1=Ji51n zLflvT256CZ8sh$Wd==9*|KK1{Q z$H9ke#~lPfC6r625AO=lRa2cVygNLa4@ew$;e|T7hIfHWXAbY0<1V}#K*4a_g?9^x z_H2H|SULq7v_8GA6I_i?f+Aeuzi9JW&`>2bGUlk907X&b5m3qkXFAaJdvTy8-X##y6nNpdQ_OK|@CT;U`_Xmrejpdv*UZ2Ib=TWzr0;-7h>kT`l+p`8~RC zx`L`Sf6y9N1;_65{NV>&I@47gyFY>w$%}`7c^N!9-9hWs_*?s!K<67D@aS}%0ICE7 zTsm`9VqA^if;b7s*cp9#{W+lV1C6QkDBS>x%$nma zDh_<0H0+`h0*ZA|y%y0~qLOgjMFq6}8C2xKGIkC~0Vt;zfEb-FDi!}l4Nf8Io$H`c z8h#6CN&jz&G{XzW2hg(a+>32qu(GaYDY&fTTq@156O>I}ynY8N>(0HH3|0aPr9`k2 z-e({)=3WAo^e=CN8wBATKE192P+vmZ1FixdovsT1MSDPQ303guZ3P85bU8n$SO-^3 zYe9k_7p}E|H3Yy8jx&cf1S-KcxC;36`b$7<@aPTw;L+&{TI1RcHnr20!>2R%i%Vzj zAD7Ntp5v|`K-ufRXvPV&a9}rwhQqhT(hM&w@594kohK|DM3#WVfpG~e93H=gghMx2 z2`C&sE(R&#y$3R5>P2ukTn0A)+$F#*fN)rZ{}=st9L)u-W>6QDfOK!a2X}!E*mzJ2 zfD7V+`o%C8Btl)l304Af!E=ZUVnAjHLtGFD%J0493a{lH!NX=Ay`nc4OEWljpZDl3 zS9qcOo0p-J&DHpAvmI-R4JgFBtw6()?i`@=&P!A*9Ct!iDY~c_IPL&VfPt!4P%wIQ zp9YQ0gJfTn7en-bi{5VVO=Uivxl4RHbJw_Z=5FB^VDRW}1&xt;9Cv*IN{`1~7x04; zvMZ=P$KcYLdc@kW{M$8pyOAR1I0gVw7EgEF5-ud9Yfr|XL2t{R{|D>S}+di@2! zQ+}Zf{)@)ILNw6>w7Kr|3u9Agh$=0TW_Xc$7apRw++lJ0V-YCAM0FRzLX`gvBu=-3 zm4HI@Dp(0G7s!l*=RtA$nhDZ^0TmpO7EG~)XLq#&tQ8aM7=wHv4Y)m1;M3jt1Khj4 z=+Zs215{tn?9pIg0L}SwxOPVtICe*tv|cKa1nu|~0g1ACb_W`~miFkL$idFQ@LC8a zrtzBHqkAF)=sfVwiJ(3mRKnBZwP1HAs0Z!Y-Sh+8OXfLYd;nAc7=VTqd|Sbdqm)h; zl^jqj$pSx*GpK?)n{+nmk%B z`E=I)_U-=Y(^<>x+5N+%vv#>h_s8R|>p`gi+79&Sbxi4rNmFx23uA2oIplv``exJ_T?Z;jBgG_+#bwBQU7{WUZQg+<+I%q8Sxa)n0 z;B5%?7$V0FY99UFxtHu{?TRr-Rxzov!wvdJ}pzmaFlB-m$gIo!^H9-2ftGFCE`)GrNJUVOj|BEKWoErviz3PCh%D)A7?h_Z7bB(}m z5jBT9R}$*ngJ2~f=kkM<@QQ%UIDH1>Tv)0H#U5l!VzGf|cQvf-j!5wip~2yfp`e2^ zZg@1l(Eyb`kbZynFQ4w0V5d!-C(ZEU%1vH|4%YzC)E%os6KIjPYr>0sdr{Cltg=V1 z=o8S1!Jx=~;q`(S()sgfJOVP$F*ZIr_VA0(cA}txfl`p->u|-gSQUe(R+wJ|B!ViF zl1;~&3qTEB$L?0p+#P5gQv}GJy{74&(hQI}Ja$_KH3p$lJ@AUs(=U!WGB9+2b+sHQ zl>`a)@-}UkW_YpoG}Lh~+t?Wxd^(qak8kkk6}9mMt0BTWyPR3w(@x(@yq1(4%7w9(F z=7UT=-9KJ1TJnK}e7ZllbRTOyS)v4L`Z{)>aQuJ3qgUiCXza+Vo5#wdlZUC>x535w zV9_H7i_M^*FA?oN=+Vpj!(E!evyN8bs_kio$~sK_jrj0yYK)Sh&mk^s-)= zCC#u4G|L8R3)CBc1DpL=bCCuE10%$qT@dY$Kl3v9^n$yHo}G*!&m);M z_;k8HfVH;y1$|F+x?Ta-i~NGFANU1b8LTgq$R2ln0n*VK`scVSsBgpI)9K0q(gYH1 zISCr*1+8fTcV}R=D`?b00dxTjXtV-csCR=BLWoKLIHaEKS7iXLj^b~b4@ ztOVrh2Cx#|T96qg$9O@m{Q*uer(Ybk1Z9vCevoC7Aj=NCybC(r=pX2?&0ZH33s8S9 zLf1&>c}GiZbWl<~HGgRF+*Z%z95|NnkaD&m(1HMK!A`rsS1z$bgfD=;v4 z{67X>r1cEsb-9OJ4B&g4dqtZ!Ni%ex=>GAd>pL$zmP{zb$$u!x37ujpKe zNE%p8Go&#hx&a~>_??%*1roC!y`sAzf->L0f}l+6(JOilBFGM^y$-z2136)~0?02O zy}YZYNi)27dl4MfDvsUfUL@Lpk{>9p&qL;1woHS?^|S}zV)on%Td*2XWUmIR;hg|7 z#r+7Vm_7EI7i58z0<;eZS`Z8>YJIvPwXRP$q>cq0GXbv9k=qNPu{IC}jR!#1tB1md z+mS{Be7ZM+<|sURT?^9q^I7#Bq`~KcYz6gQT)TgGbh-+-bUy+e+TjAKQXM?N*DZyp z6nONyegG}U0c8e{PS+Wrc@$9I23-vW6vkk;sb zQH5R5ybEdhKAa-W@IvJRI3htM%}gs;JhFr1Nc7DVSUjG)2g$Q#R-z0Zy`s-IfY)Ss z^zxnrnbB|voM%C2${cr5@d4TC)9c3pwHK7v3c#h^f}IfiOB=ekf(HVQyKVqYka~2+ z9_Wm{(i!{4qce7gXLlQ5b0eY*F8hMIl4mx6~> zkhg(hM*Dor8x`u_Y{&ey#_XY{w?ULTSZaNGJtZf1PhoK+rTrVqK_xRym%C}Ah7%Ni(If0P<~DZE8#r= zGNb$eF9YZZN$|liC7|sDpo4Be>nsaEvu1D+(0cLC7!?7Oq46~;2SBSE8{as98&2TK zQ2y`({NX2kl0Weax(2u!zda5fgOFhWt#b3}TswgYGK4!dRwrciwAb~5M`tT!l~*hH%&pE=$ht1q z2_Bu`v1yOq)&!8QPVj)GM{g@AU3zpv2aH=mxzD2$Jj4kqFhEz7d31uuKS4K_9d~sQ z0?qbAE-y=fUSxKGU(oddzo732enDRbenGIs{DR=?%=iUcL5*{MLEj1dg1!s*1${U0 z3;G`57X&+kU$7O_I_4K_1(gQ;g1sQO@C){WhFACnd%@R~3HE}nuI3l)6#xxa3ig6- z%jOpZyOUqA6;w#@3$}trn)wA=Wf(yd3@zU!Ku4Ymwt{LSk51PJenHoQ{Z(RVoPWv2WObE16xYJd`qqnsIq@dH4!=twqthN*E zWl#xi0IlJ{o;dER!U!6`?*z?WA9qp7NC%DecIK#*9CuNv0C7MiB1p+`7ZuQ%zYH#& zxh=CD~Z(wTeYxa$efa?j)7 z=#>B)5ArUkLO9+Ey1E8p5h$J|!3oJl#o;(OGNr(Z*T7uh0zNX1;YIv$E{5(CFEVcY z|KEKMbQRzWU5H2+OvK^E?qgszS70JGFJ3}Kj9?-bFSbKO6ksAQFH#{Q^KShA4>~mo zRNR9G{Cs+QLB+90H+Ve)s03;S^@<@&3_xSSOrTl%wV+zvqjN5(Duhm3g4$>rph0kj z|DuVTQ3ht5`lK0Nw4Q_(yr*CMGKQ5(9{u2g*S8N=D(T+<6}+ckTn8%wl}f5$CA?Z7 zGal{+Pe2_6rOD*>2vGmLyFUR${XgK5eIeq-0xi%=-3y?;&UFu{itG~+E}bTVNZig6 zK@%jdOJ|Ls1rooz71UzxbP=>c67=Y9g_Kb)f&oavKAkCo9!PwT?pAP^bh-#SfUe#J zxvg_L$cep?D9#AU?fx+XG4$yHn(4lt$ppht0 z2MAn8901kI3ZP5`Y6gRvADp1z0Zq#M7vCPT$h8KU1!y}^52o@3L;28qZ zBR#N)SauB(5q@ALpoj33f zm~#_WfYXgA+_~Scf}DH)#eA?5kaKOpN_anYOEbJ!xf9f^@n}2(a)o2OBWOx3I`%MV zT&V*z{@=Mp1vFUfYW&T|a`OVv+FCcq?tdH;TX?4&>Ij}h(qq#@=XL5G5a)^nft z=oUEv+71Pqj{&!|+BP6raRp=r8w10O45$@s3=BS&n>#>OSa@_#26X@tuKX{`xe+v8 z(G8M+VG7X#V*7M%1`QFrbZ!Ps1o~KR1`S7-gdw@n9MydwdGHaOnC^SG9?g9qwJ%Pn zfr9|V_OaXynuUa{wsY+M1`SpIwn|U|DDS`koxTLw-u=y~*=7SnnIkBOVCUg_bc3g> zyU%-dvwXlBMnUUA-ULr_|3B_zZL^{1G;|8ntDEQJ3u`q#hX2PL_kpsDH8@I(x}owf z8Qo!2@wSXlB%-c{gaS8$(G{GdPYJ9J~LOVTnJGA{^nvh8{j3wJ%nv zg2M;I_GsR{Lj!b=To{raXyFf1fW!P{>(Ig~00o44mK-cbn z#{c($szp#ZdvrI06nJ!>_5v*fV7~ssN*c8A?6`tQ^E<}U2cX4V>Y#=N&(9YhRQMPi z{~vRK2IDrL?!DkvMt3*Jh!+=CKnE&+^Xc3S;(9diegU$XAH3cVYP)0ix3YAP?&c5b zpaYlxxxk{_5b3<2W{@_I?$h1ZJq|u%^0o2{ShK+%t`2bUAa}8**#KAJI z){`Y{o!uawV|P2KvF^A7wBXaV`x(|1N@n{~$9iSDUj=MY( z=2*LQcUNdIFgP~@bKwA=xWJw*t3`Aa4AQ30E?sbr4r8n2OX_X7Cn6}&^Z~T z!K0hOqZ4d&_v9UH3=A&TkBa!an-8#o!u*Ph^#gwQ3*Fs&K*L3oL33R$)-OTwN5JxD zU94a5yPxQ8z5tT%2F-$XHctR8=lj7_!r{_=sQCv+sbFU}SY!9W?o*wUL26uE50vt? zo-F0s0XoO+y`eQ{F})NDX;mrwTzkM0luMf27`M}?rv zRLejH?mPf?6nM-;7i=YH%;fh%aHZ7H3UgHw$W@?m6;7}kkh89X)$qoEOcCA;+NXH# z#cV}B2FLDWFHdkVFmyMALaOyZsjEwOFQ`N8*nI{R{qc_AtrnpC+I_HFq^FowBxXV|lIwK+(hW|wovxq*4MEAoqto@zaaR^l;}c*3=t&*R`j<`>5h8o@~mGK|@M%%igzqQexbqa+_@SF=2*i~<{Ie95I# z4KyFqB+c-`dLP^;8#G`(IW`~c6K1$io}PjDq*nv%lV$T^13eEwW=!7zY7xB*1vNat zu?C(t>gMZoQAq(U%X9$^Lim7cOb`#eJ~IZiKnoOwphYgAt^!C2=;Cb#5TgL37R0Ck zDFI!Y4x&MWYaseXIp_$B~m*>NO(XY!u85X?V`5dSr+zmGG z|8ciYl?~Q*MH_uOQ>TDE>(ZGz=eR4VU}FHCh6hPw3tT!=S9CXn8g!kmYr4BZj2F9P zL6HuQF^}HR2|nEiJUW{}4XOX4>z6{}nZM-_=nC@gvoCD9p`)uljnWJ+`uD)&ibWk3 zS61`DaTVSOOLdl~A#wFk4W#6NN3W z;90UoVC|ry=s+XbhOZ4U8?K)M58s}DQ3qB7vSJQc4ev#eDIM#08D6@AW`e*z28Yj! z!!mpf@LC%bF$>rj7|H^S4}eyJxgPN74c!2W1yIQzet=)l6*Ojd+;szJ{_!|u*@#as z&k1Pc{1>$W1r>N`o{y0M(QMw}(YqTwO4uz9%FM!0_29Zu!C(ScSxfEQL6cyu;{TBjfnfRmAn ziUu^=L2J}1UjF~@0-4T%#cL`jG}ue(r5Rpq-vy3WaIkBuf?^F6>=WmJgS`%PcL#W8 zJmDlX*xA8qK*631R>KVt;kMD08O}j{Qw#Q z@#!@IPg{F*cY}0zcCzq!bb~c}Hruc<@V6`hH!;9XYLKq|AO8RM>SQtZ=mwh#Ra6g} zcmikg|HrI96fJ-`>!Ku5ivI%IprFpcP^JcLA%o9r>^|qwYjdLe)QhE(pa!Q$Cp)w) ze9NP|`++(G!;3SLD8c)p2Em8=6|5{3AqZd85 z-Di(C|50aP`2YX^f0xe1KR_NleHwHm_SqM~$GAYVPoN^wqgV9kOwerBi+Q&}6G6v8 zGd$p~bvLAIjnVf8%@YZ+LFb8HUjT8L*%%mJA3o#JeZ-~HK?1bwHZ(ZQ5j2VbUJaVD z!lUsG=;{rZZYGcJPu&wiO>&>^hdz+qHjdpV_%#bwypTQh|G#JRe$Yf2g9~V+p^T+F zj>C~(U^{3hb*Z37FYlz8(hM)AuHB+>v;M)2YeEQLnnc$qW6(m^!lGI^hU;rP3 z=+U_cyh;R|_Ft?4-xvqk4gMdLki@A1zj5)n_n=Nq=88T$L1HzB>`Zz zmt*q}<`NOd?u#D1ytyDtC#>LQcxeNfib??`!`BuNSC)zy-v&*HgTz1+9^j*cN?yA) z{&rwuU?}GT$${F9ui?|?pli5dKugzRR7#*B!2$7kslag;l^oC%|8WkiSF$w8>W#M2La9PJ*CzMGdHd@mjPqMx_R9X$>gV z9(M(eoHKYr_HFp|dQ^ahKaRVCXUjk>hJgQ~Zx({<4I1Dbo&%JO5s{s|Tv0yd4vp}WjlX0^A!*UT8;^#J7XUlcYOjLb#?`s;tipf@-a)>TL|y!f~o915WAc4>03Kv*&z90)rrV1Y3E5U6!>`h_!C z2`CI2r%N-u{0`okJ{{yIpWc4Z1c6U)JLq63&=;tS%P`{mLMFO(48nJx?SPVZE(cV3mlymRIt#5*NmB_Qu) zO_gSN3E60W?uG0z&;-3ZhexmIrfJfk!S~bGco{(M<8N&P%?g07kLe8;@aT2daP0cE)AXncBup0rAknj zo&qZYxzu2aG{eifzyJSlV0_sM-MJ6So{0HK1JIC(C+NPjpB}xlB0$SfnQwY@Uw#2< zzd-5(kOmFM9iWJVITEy9uKWB8!IPllO=DCXKquFEfVL0D9|oTfD*-woO94LBc@uOR z=NHf@QTO>5IYpqMnQjTtKq~mM3efhS7vBzwFo14g0i89_9in3K;_1u(|Btn6XfiM` zwjL;9Ki2*NvJweo8|ZWv`2Jk*d1l)<7#Kjuc_@G!YXCl%b0&D+zx6hMOF#Gy#Tt+^ zcY+oxgSL-&c(nd6kp}gT!K;hUz4!_`0HS+8XvEi}^?&J0=&nUq<8PpIr+8kd3W0i8 zn?XAhK_gtCMqum75}p^l5OMJ4L&*L@i2ARBVD+HwgrJ(9je!9qF8tyyMEn70n5A=b z3CJ8sUlAnD^I{)F8q~-0=!WzgLEUiVX6)x#pjPf?P@fVuUK|G+4TTOr+jk#_U0wug zt%5A>7GVQ5hG83kz-{H&S)e{~GpLR3(`mv6AC^7{8#6Y6xCE>KI?5f4WQ_^Zcq^!X zhGV>uZx-5kBS`Iw8v@|K0kJ)xy*zMW9)O60dUUX1W`86*4IuFaZi(ZtuWu%reV|tR ziwualAht*MWCl>6qlaqiOmL`z<+>+xU{jI=Q396ho-BY(i9JLKSgw1r1U4ly5G7!_ z?#T++l>D3lb_-apd$I;LCD$NIz;fM_4X`QM3{e7>>z-_ZP00j^60ltFZcy&u2ddij4wIvU{GLScwu4zI?Z%4xG#ntmNCbYtzx<8>IF{1s^zlf!IEln?e19l5ix$EkNlA zDgA;J;4r@o-F%SR7ZMQjL2RFH@O%kq)xM1jr03!RnOTA6+5e(Z(?MActn9@-Ua-qR zqXDSXDlkpxK{<6AI4yvtYCwk;S-|Hwf2AX|kfs1U@6; z(arJ#>x_uQG>{9yeYyX~t!-8moqbgMN_zR#iFGP63od=Lzu&EG6 zi042;9^I2c%L*`}T@T_Nuw3_K@Ja%7A9F*LfaSU;D}bsbbR{pQf&&FC*FD(+o06jt zC1APk$r{*{EP^Nj%XLq7z^0@gq6940JsG^158W+15G7!_?#ThzOp$~r0m(s9A!sVP z&cL(#8~D8M$q5>u!S4gm1mn>iVifRS^v)De%J%3ji?H4eQeSfoBo7)?oW%`JLm*u) zotr^&K9-w7okaeYP6p7BJ#5mfEF5fpGe{1e9_lop{Zml)I~hD>;=wHP;st2A0cg$v z)O!P^ff~?^33y%xlm^tekLzNH>iIKcVC$)SQ=R#WD0zK2khA6ptf%}bbbevU_rB~5M?|sUsQ4-Id(p5 zS|^zc>{yUxuxXtDh+{!Qpuh#!mEd*)Xor96$r1?{i_M@F(53vwm;Q?iO$MhrP*)Lj zWH~r(yI2$}lnR2b!T{H*@>4)ciX}h-pbA~c#iCfCln12y4_J3G2k1CW575de@QovJ zhe0hC4rqJnmPhYSi19%jAmc?my7|H8wod|``QQv15Mc1=76!@jz~q=Gt1^I=O9?Xb z3pxwHO@^I=h{JpVkQs3E(;?=AI{pmco$a8#OAXcxpyS&iF0h5DfVv=90;F9KMMd=_ zuse(o@IzhF>8ya^8pQo1Q39ZoE@eErJHZXL?#nNNKt~jIL+>cr$^kle`UuKVcF^?# zF)Fa|g0%6ve}YU>g2iC#$r8T*qE{z^inQ}D?tTTeQBS`}1(}DqU;u0sm;i;31gL0L zfHWYxXMsBB9-up_H-cRTYC>v(hKV|BK<7iA12rElUZ@I!nz83z%uNT;mq8OElfXTk z;0kb?@luJ12W0srI0ENQ0w;_LP%#fmyO2@@yjch=&o&VxzZulX_UN7r>K%asSRC1i z%M-v#z;fM_K|Lo7B@GZIV7cC42au!Yf|k~G2U~b_gIwQ==B#+IhGGkk?qCg&X((>a zf=Ft3bO#$?Ncut~LGASyoa~@HzZDd2pww*viggFjvAv)^fkGU-sSXZrhhWg+KX6!s zuDM8l<~1k?=*1S{bc1DSDlI=Bzsd_)0s)Jbgg;cgd|0MMbi37}a% zQ0oUY%g4yT@ZvKo=vrGp4Y1>Ux=$Ei^6CEZU(^NWupF?%re=cHzb}D1%ol7cXms~B zc)(nAK_<*$O`9PO(*i32Icx`532!aP43p`gRr}{(>|q5>tJSC^K+Z0Px)L<465-SR zwDoOWknvlGmTx8Au14RCZ(GKw1e6(qN=!ukFW!CFBl84k`plF0{0kX%KG3dwuK$Ov zV^ji)9=v9D+{Wmr^v&b{QIF>19G=#1YBqqn;4WZ$Q&b{+x@%Mt9Qd~#1072XwH_RE z5CU?48#vQ?c3*VuJ^|_!f(BclYreWWL5oHHi|X`(_Yqp4#y&LvJ9sqj1Sw0cO$52~7&_+mTSE1QvB7;va%S6y&BH*bW$bwgo zZk7wimtHGDPElyKX=Ew^-982CNjdHWEvp78*aga9prx}GpxO^KO5nHyG$aICEejeQ z0sDo8f#F4&1!zqJXuT46J(Yq>_e9XP9@p+0uH2`M4|L!1=|1QR%ES}+7auO>a-}3VmvB3Fb2uuWcCF`N4JkkKqn*k0vwb=)B!e18t&2k#-sU7gsbs?kKRxZkM55yowXjI>%v@( z54d)}cj>G>;oAM&rL*?Jf6=gBXm(5jJ8yoPG{cKW3&G9<4F`quz_Md1_`-3~RcTQ7 zzUbKiN%baRC7@LA1XjY^4l=`T3TQJT=zb!|I;*(o*u&kfpbKIG!4{c;6jeej0)>NG z9n@TpUeUB)QVcJ2LB@OZit<7X4FZY1oDAK=hia}z_X$wh?E#)(O=SYL2K+ccUI)+6 zx!&*rP2lJDKs}o1*?sPXJ`?yVm0sR;si5(%1#l0ial<@ZQVWUz(VeMKhrO7+9^zqV zuo94m1Hnpor-97yoec8uOJUHyug)5k0LSkCKAm+ME}gXjE|#?({B58GpdP((2C)1L zT0C~yrL)$;rL)$-x7!9Z==ERpUbiYkH?t}O!-4;{plyBpO`y%O9=+2*snoOk{D09S z-Kq>8z0*J&&%pd8-Kq?r(azpb3ow5T$OKmlP^kwR{P6KTU>zoGKNYZ+#q!i|Uk6xbW z4R|)jskug^Uf(m_m%+}{?S>A+^0$gI zGB8-Wo+;t&oCh)-tgDo}JJjO;Ve4B(^ItP}hg$e_m)_{E4X^||g1-f{7uOQ(6#kY) z;EhcueR^FTj4y%BZtQ}@F@LKFXs*lEq4hvXy`}4gVl~h1GcT+eKmp(YEkZk8FTAj1 z0Qvs`*#ED=M{b=#GR+un8fcG-rK>}kF>-m_eHb)9%O}kMHPDm!%!>|1P?^l%0$Mly z|FCteL(xr8l>a~8SsP$o>%rf=80_Z%FaQ4q&7GWkvHU-%ayav1{(or7et8zuBI)+M z@uCMTb@oLIm_GBO=07jwsOjHH(hM)`=7Ezecl;D`#i0A2zezE?NC(;P(JOks3gj@}9*~&w1ejkRg6GQ5 zy;%4U6bffw%mmYCUQGN4^{N2K{9uUrpyKERJItqHU;{;^lb{y9_`4dCJC}l$fO4lX zSPAcsL}`W>>-#~u^K~)EW5!@x&c4tF(`Q~N!)#jwQu%Za*f${CqQFLhs{9v~Am@v& zO@!Ij54Fvl9UQDDDq*WCx5CsTLw8Tp13zZSrIV0z`k=?0f|~2l15O)XCTq{NE)i}1 z$yNHW^%7XYPEei4?{e_4@qyM${8JBj{6BDblOHp~0zYPkWq!;IYoIg(3m7nhNi>29 z%xA(zfn{I>L;;Kkp_xJZL7I1hPEue1PZ5{0bvJ^RSRgeTK<#s+^XEW4r2^w`dqFOD zZ9U-9ea)l$X7@2i{warCx^Hz)Q2})}U98XU1WiTpyBzi5zR-Ql`YON6K_Bi5UcEM# zJuJ6_2Ko3~Z9zGxvqVM35p;J~iHZ(rZ>b50Z~zezAR+_QAOKCYbe5>tfI0~vLC{oM z2xtZcc2Wyy{=~KQK#3)23Q8Ju*sK`nKF85mTYgVfMk*euo6%v z*#}m_dl_U#R}aWTpmQtQK^FS-#;6oPE=13k@a!&D@a#su6df9W(DNb{Jh}rVJbE{R z);W4~-}C`3$MgiP>iaLM-3nP7Q<7zT={RUP1cOH}uNla~%9&6{pMUX=8RqCSW#GK# z2zRtH*wN=-oCYfaIeH~n39lT;jH}(CRWYER3G&JB-E7v)pfUI|4d@_!Cz$)f{1-1n zcQ;4|Tmf4A0`2f_1`XQ#baz9jW8g7>ZqPdPLRdf}ySye=n&HL%8Bmv>eqjQ37O0dE z0y|5zJr)++nad%;EeKWua{2pGkmq<)KxRmTTn@g|5ZUEmpMY*Pg&kK9%QDE}-S`HS z8=&jxJ-UB77=3$j=Gp)M-IGB_f`evdrtcuSM#TWK6A$V-a39g3>>jK=)_oW>dk5(sdN7}V@kavG7Ab-B4;_jgyxsyz z7iKWCK->4=J_UuiM|UH5Smby^2522R0|Udc1_sbH9W((p|70p*Z~n=_KjpyT4UCZa zKm~BA?a@0E)T0AkIn>P!I)+vNlz!)^fR>wjG#@F5KkU)D27K3$@mtVd3s3^_uv`y1 z6sLsuzv$yS&~1%iu17bwN9THw{m?1G|Dtc}RT;Yb!DoZ^ZU-MV+bsqvuvI{W4u~)T z5jNlg6LfSWsMrOGM1Y8d-Sf+D5$ZfBsK-#5_L-%WePR#`MNI|s< zc%7MpM|VGHqdsWNLBZAdB)I?hUo@c}JecLtsn>nug?1=t#OeHt&xRm+3pgKvA{82t z-H;%J1n3!Pe_H{3KZ)oLXV4`E;3G!=i*|zy?PL|H1z*ux3h8$qi;!k`!8rw-C_yc? zxOix$@aPr&_C|`~#ok4bey3|ZDAVvh0*O_&fpY}t)+Nx@<=_#_UQy)`X@>uzst{YY z)garF0J3HAWVkIBNVZG>nHUbWMIK^H4M9-}@~axzFH=CaT%QE@%NtmQOxK~S`JvNoaE@+VZ9;e|cI z78fL2bU-G4o)7VhHpCVQkl6ZWY#~+%wj~;3iwcS@(?GV|oB;O=sI38BMd#5gdhDeX z!;4<1Evyh*Hi5)EvD#t{w&g1*LONNGRU(I&0mznOge^Z{O$U!&(FBl*>QGzm$AVL` z4@m5B6E?rRwE~4$Kg5;{6kAS(NHe_PMc8r*$(CO)q!?ZtoCgW9jSyR&fy8RD+HxFh zizdVtE)-i*K(;LJhlkh_BwMC{OpJ!w(haet0VF1l)s~%LTMmOFq?2_`1#*b}3kIEk zh_Iy&$re43iC^bJ{E`Z>MG7Rgu@PH{WrJ;rh1lYUV#^GWEw}sNeu+S`<-~I-h8O)% zTkIjWYypXRW3|N>83S(?BN1LT%X#v84$lCW+OS+c6+pj)Eejll58|a)>d2Y;i`|astT~ z1CWW|XG8q59%73ONNjUGwh(It`z0P?O9hH8vjU|VUfk`0`(+W5EvKGJF}#=vwWSkc z%QldhFIHRp!M6Ma1yv`j6pAe-AX~~2wv-^*k^(YO8){25#FhY%*z-DUei8Hlh1g_> zEqh9lL+o6DG{Xx)ge`7Jw)}e{#qi?jEJ%pyLTq^j5^Kb2i?HOpJ%x@;@4!##%sP(pYWz>ISmqI4Gz(Ss74lVFKCWim>GqtR3yqD{2HX z@#jp4Uv5Hdkpqcst;H5%%fYrJLTp)7f*fLV{G}OQ-0y<>1=KfymHcNOOEJ8d47Fu9 z#FiZ(F@LPK+ysZ%Z;&TCSzSLEpHx4F}!HTYKy2RC|>j-wsfG_k_ED5 zZ6`d$l8|hf1u`)aYKtetmNt->ELL0gyMt^w2@0xCRxK1;SU|S8BW$rjvc&{s;_vAY zzbHd&Q2>c;uf`T)A6-DUBtvXDQ-mC1^L(WlUOeo8`-Kn5mU9oK7+y?;+VV9DoRW8e z!~(I}k_@)xFUS*}ta&K5Sb%J)M%eNo3Q;C!fJ_ASXF;<-$04?afW%%`Ve`vfa7vyI zu|)vImPIfD7LVHZ1F_cl7?i98OX%HQz3rw zh1jA565CmcEyNCkLo5|y%eMk#zbx>UW_a#pri?Brq$(AgTiH1;Henx`RSQtp`Z3Q;J*c*dFY$n7OD->I< zcu6z75J%YZCK8dxSU@J8o&pK6%Me>W+>>H>(T>%Ymqs94j3Kt%$wv;cJdiCLTj3$L z56PB!AQMxewk(C%(ghMz#A?fBuq|gnp6Fz)L$QSeWQ#Y#mKjL4Sb$9YKN;eedWbD5 zAhF%$*h0({Y)d-C76lYr7I{iDym;CI_e&O%Etl>}F}#=wwIvW@%RZ1;C{|mZ8-hZN z5n{`sJme4qoj3ZT9$||Mk}WwP6OEy^XhUp?0ExXX!{(QbU|VK`JkiOTf?~@x4{3%M zk_cPWkZfTCnRs>*B*b_jwtTuH#qgpNt1Z!BTTCIgu%Xye0J3FsGd#q8L?F`G0+5O6 zP+RUtfKzf0NK6^4Exce`&V!8aWL=Sq9AaD`TYM3=Ttc$N3S=T9)RvtPThu^edrPr} z*meU@yktUb@j|g>iMuqzi|0*nzbrwr<;ra-h8MFZLPD$?V#@)LSU6T&GQqYmLu`4I zgX|YOkS&b}Tk4Q($pe{a3biE_VoMZA>|+TwzZipUnG5nnCu<*yEjQdi=YJt=2|%)i z17za)2@t=SLu~nS3pAdA)t0CFpb#^M*kXWUOA*MHt&Q*y(?YUk5y-?$s4apJTlzp^ zs#tBA4z}eY$oNjyOWDXF#sjj&A7Kj%k}WnM6Pcm5ybcGaF%6K|{$gw)<_WeX8)8cd ziY?1rr5RqlY=HaaS~wylU%M&A@M3O1B*gYYY&irHi^OWnZ#__mu|jMSL$SpHWJ@!` zmJLX@6o5=LhuSh7VoMB2>~j$|zuX1;Wj@IGPSzb+$RT#iMVjG-EW(y9BwM&ZCSL4= z_@xkH%eNb#@eHiCxI2OTVhOP&3dNQZkS*Km;USiSWXlqeiP=zFydkzs0Eww%wPhoC z6z(#}_)gY8naF3$bclkY92kw#-AZWrede z!;9B-aK8v3*>dB$6vK=8y^s+59tKWhM?hlHSZ&b-+rkd9#R0_@Cy*_z2wPr-A<|e8 z$V5x1Ef*oS#DT=V7GU#>JlK|nAmck(A7vni*c~Tnh8OY(TaF;v!UHn#au38Wt0A`h zxCR=}z-r4)9Z-l_Lu_e5v84=T%g$POh^<4iWf{oCT&OKmA+}5ciD_cBg&St^#F9#S^#8AFv6AzNVYhDOk{`JQVy|22PAelA6tlB)du+`A7p$d>xp#a5L@L4 zI{&l=?ibKFCalMI>#7vPi-p~g5c7oCattIEi`AC-;BgpEh%H$twzz<7X-C*%g5;MH zkcrk%TcjbjB!I-e=V9~9MH7%;7K4oMWaR--@DRJ_AkFYX5n&4-k}Z576R&nb{PHyv zoRWWC0gY#1wdMCKDTe=|wjkp>S=Xf@hgb#3mfh9x5PJ}cNXaWeCgwwJIS#R93P?;F zt1Y^AAirD(8Q;ko0HWZ25dzr~im+u9k}Xak6FH%_%!JsY2NFA)i!H>KgU4VCLB@Bo zeo965%Nl!Wh8ORv;C^XAvgOWYDTWt|J0T&K4YB0}NGu+!EjKkme&L4LG6lsJH;^rz z2wUQiY$*eoXbZK)6=F*gNbF}0HotU(ZCMI3zLV7qM8QMsft@tN3uS~Y7D%=TfK0sJ z0r87G#FjsoK;s!$ZPB#>`NbY&d?)LT6yy-A0@<>+5*}hgNVcp3nOF$50-6zx(3LWn;_#mS*t)4+%F;^Tfz~xJPARhF&B`D+)!IiLu@esi5<_z7GjNHTZ%!( zce2WWD7Y=_Y(eY)D&T(EhGfgVi&6|PmbODeY%au>Qy{TKthR82(-<$v_)gY+$;ct* z0kWkVVao(0TPi>%+CyzAhuD$=68oKn%`d&+*|+5&;~|I8dGv}d1nKHzC3dW88ZNap8&%rb_W&#eJA zKLRB7J`*`CK<2w5%+EqG|Bf}N{zI7Wf@D4q$gIn)5cg|C%>Qv7RR1BFj}mI2nQ;h4 z4!<7?;P3;jsRf7NheTu_MuA)~w+tSFyKE34*afmJ5bA=3Heer?fy8)`T;S0S^5Jce z`?|e3z&1=nvEhdm==>jq4Kt8z&;XhCz6IjPdWa1oAhFdM=wbL#6XXr34K^q?Oas|) zvlQ-!G9(+0oddNOp*F-qY}f=6^Te=0AK4F&5|Bg51Y|=w!iE?m8&W`~X+v#rhS(4Q z5__JG?uWT@NPg%*vEh;>X#5LdgBOwwOd!)vHbX+m5Msl-v!L-W3>&OL=^PdhdMGv& zfNa=Y0uLnvBpVihOiPE_AP%vi2PCG9VS^#E4OilkLx~S$Lmq zPD@%Kv4d&op)?=ahAI>r)>we*zhbx_SdeVEa|TrZH9zVth6y0k!l5>-huBa95);O- zp%GlXLdzu<6dV4Tg64k_Hf%$(K@Viw*LsK_=0a?c0*P%*Mh_*>`U22izW*0Mq(`sl zIgs*B*7-4@1v$)c;rkHb324GUAi|Ak!j&qZ^U7I^;KH4(c`<0!Fr+d8t&at*Zv!na zlYre84c?#zx?rn&B4{NRXctxM?NS+!Ufuvu1>YT`;sIVv3_6g(G4AEZfR1l2QE_a9^K9n{DRI2o}FwS-7YE#od%%AWF??; z7*L%ET{#BvGHBTq(t2Nz&lMm(_e_52)BVY(*NX#uV8vC?V!wlrSUtLLzWDCO#o)*< z;3fmw*3_!J(T7lNGcjgJS94O%euQPmc#EXmJGrxdnOsF)2 ztMLKQBH-q~Ec`v73$Z+UL;rXje8uF^>&D^n|By#7&s5O<1%7!K29O?yAD{Un4t?eq zWdF=B;PJ<&)1Bipf5fTJ{DS^0`~og23jBiZ0-yN>;G&?*)g4$sntVFlH9qqTx~ss{ z8Gwv{D|GnGFW|rfRpat7?ma4?>pnfYKk>Wn z0bhab+x@}?beDkx=yFJYO&`$4%9}pP&po@ZxbSO+s3?GrC3&If3R)a`8gw;P+7T{> zjux;n{M#B=8{ z>9Y%e+zF6W34inf5a+^c4p;v0ldk;Xmwa3Qmx7XrJ?PB&?iR4KeLA1v>DDUx0;?Uy!-wQi%ZQ zD6=Q-Tnzl%rhtPC6jq9k{Oi9t@@pJ)xbqKCDtF}9 z0NV^Y9mwN9*qT2c&4(2{t^e@%fcEIV{0X{-;Vmd2-lKcgr+W|BN5g$5P7L zZL{GupJVesrcyTk?KTCknY#aWALrLN4)ZR*#yO~8c7V-9^D$T*C=?0!`kfo9uhse2 z?*Ruj!so|7JMl-dSb)Ow2Z-rof!*)_kAm#_1HO(2)8F$vHOP$_!1Ex%bf!33=E)H=ld_ZHyE@_csEF- zdk#4AK}Y67Z&B~Q>e0>DS)-ET(GAImppCB~E}b=?JES2ivO#5eH#_KhNKonnr-4ov zl?u?+3jv_>l|W}}fet@s0BN-VX*B?`G(arSC369~phJ&9J0m(l$9sY9UjQ8j=K)<{ z3o;(W25nIWvHy#TfE?UA2b`BWX7B+;kUgXx zy*v|OhmUspfbKg!4c>AJ+EWY)InZ4{8n4dIvIbR|pbe=n1i>4|`TvU=1gkPYuHObP z_=TR^i0o6j#e%b~lwHh|TD){k!ktKnq^nX)U2m%-@3OF3o+hVE|ADrJw}X2=R^f#a^} zp!Li?ovEvRI#W0Mbf)h1=}bNB(wTbNr8D)iOK0liU_X)FAk!E<=4%&$X zIdKwn3o68iKAnp}snn-)F(@v4I#Yjp^zxi==}cwz==A0H=xqia0Oir$4ZhIrxGOt2 z1dh9kgJ_@5RQ=7D zIYaxnmNdf)E`&$wFTgx<6qKKOMK5W=JhG((;*l7z5>T321XjYk9%M#Z1UOBdVgQ{{ z4cggldHmT6o2P)1M0YbNkX^bDxpYD3o?3JK1)IbG2xRmH#0g<+%jt$b(SFFb_yM4m}vnr~9J^=-8o8FJ2t@|KFo|Kd8`VD3S2! z?gz#Ef6-duW{>W6&`vqfounY!KxGxkHK5x|czwDnIDC2&6uL81UMqF? zgUTz9?sm}T_wMzelWl#vZBBS}w}VgC>Q(75zSMp8#iHZ?|9d3+arkt<@JJ5h0TuBM zKK$!nf(k2WJKvLk{Z&WsjzUo6fRYwybBJU$xSh{#eBdRhDgd2LV6kg~Bf2YQy4&{ z76XH8H;W21G{K&NdE&oln-8c1cm74(SheT%`*FB* z=BQ|ZY*%<;_(hljbjqXyINEQ#VB7^do8&Mk`G6u4bnP7|VnJ8Efa)!e#v`CMhGU## zY`w{Oscc)R~unoKBjKt4|gbioGbR(jAC zA{RWmMNYx8rYJv1e>X_~|Kl+I7p-kNicW$~83&z@(;K3qzz;gV*#&&3tb!Kkq**~1 z6@$(a6@&kx&%9tYS@%EaX+j>In?W^Z=jIws1_pqZ}^$9 zotr^N##)+m)Oo}9D}ibdbp{3x_)$eCK&{(jJO2NN6xbk#P6iz})P2I*rm5yar%4lN zZ(IQAOhQm6#UUQNcP^mQqytF^+L$qg2kLmp278dz&823u=9U z41t~N85@1r(XvHFMU#P{M9Q%f!g4&;q5^3`9BWYl2Z^i28Wqq{hb1DQJ;?pSpj$9Y z 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

QB!lU(ni61Ea8-UuE7RGNuU13nOLIdop`H&)! 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 z z4j59G1j&@zc=U>Hr~uh^`UMMUX;|xlQVow@(Irr^51^dTdY}|^SkMfp*d2&iiSP?1 z1&|>nTrWTe8ogi0X`@qK}x>yz~lt_9sS7$Jk2qBI+ zYJ|9g&!c-bsOkotO?u@uv%^-#7v+zc7##Sw9R&pq@*O+fpp&Ybk0>Awn}fRP(Dc#$ z@x{OMpftS?R8V_>Dpt^4CLZ1Ppg=PKbwVr}_JhuZWGLbE==QI8@xPFhVK=CtM(lU? z=#21L42TXS$UiTx%Yu`N z;tRfY|NmRE&RD0wP{Q5GIss(nZaK)+K`#%1*8E|v|7?DvVSMSuR*+=tff5dnZg2=3 zhV?Z;<{MvnF%>G$>Cx>V0hR+3XTbd_<4Z3}q4FHv4xr=IG!BFNxllFGpa)YR^FWJW zEM7Q)v~-^UmHNUS-3}SuAu1L=-4385|1>=RKfqxCq3WA5@2?|6b!V9YZ5NKi33FAvI_CQS#;1_T(@aR4a?|6ewVMXGC z9SwOVVRx5-vVl(I9RNn1)7v;JqI#83yquV*dr`sU_oY_G4 zQ;32>`Nd^1P?Pffi*9yMtKhY)5DQ}`w!5q0wF@+ zET9EivE<>xzx})mXa{ijWsh#h4A4oAP`eOENX2y#fUScmfv`2nLS)+kQIoZ~FiW2yci( zlt2Mt;KIM{oD2W9qYfQ4Dhi-AUy#r!0G-mt4tAFtYT#R8@%*}JD4qx9H_-XlknzE7zd*hQ zojwhYdIykiVHjz-QD08V>gfGix2D!4F8XT>I-YIx|&Cz9bPv;V`x`F=Q4D&K3f4cyL2U} z{<1K>?a^zyT1^3YJ_=I*e3J!bJ|_vR_0LVPBq&w)^1jW2)IX(5VD-;#kZdpSpDb~P z7x7Ct7+$)A3VAnAPtfOr5|^J=Bhy}B|*g= zq>%f`1S-rRQ&w7x44@%JpUySlYg>1LXFIx2ya>I(!Qk1=qXH>uj;nx58fS@P&7cj3 zjE(^!M=7m5P+9`mSfTZ!eUI3LA z4j$dk0-)X$_~;b_k8WoU&~z&31{xJeUux4-P?yBp0i;)ne|xY3zW_tGvyVqNcPD7~ zfHPP*=xQ1l74T68$DKiE6*9btl44-!bdEXhobVrXGUwYmh0fKWT;tQZ8I)5zyIKBu z{6Fr|3CUO1e{0@?x)+=to%2A6<~6%Vr|kZvp!pEUr4Pqiz_&RtfO1j1Fatxw9tfYm z6?C{4sPgjYHNBK24!VP=M5v*Hg8_7GzlKMz?aC~1hSwqFS=y6dAfCP$1x3fbh=!ojh5)}&a*-P-v!RrSptS-wJ(4GaYIKk8PEdq;^omRcb-`b_F@UlV zsBKlsjVJ>Tdn7l5Rd;rSRCn4mZeaWm5kVdTg4zV3AnhfO=E@8PkM5iNEg=2PJ3%Bv zi4wRyJQ-vbc(|z>+-cp#2fBI@tfKTGIQ+X$dvs3#se&{}JdQhq*Vw)|0J_Sh8+^G6 zC?5;FxWDNCe~;tMpzve>4I6ZO7l0&qU#R`(VDLEZTmTgX&8#Ryzgz&)kJ`M0&NqSv z!CFt21iz5g1!X7D?7TB4cy?YU2x)fy{x8syg#)F!pv3b@2d4B#8fdbb_hTSJsRziK zm+OBa9}Nr+AaMBystG{r#lt{@`#U`v-+(;pYW&Ty`l^?m*#Y%UXM?M102|Mt*y{_Vc`FSe{_0u3Rl!UdYa0-#Av zZjWBkwV+)#1i_@$UxJ1bc7krUcv1Kll%OHyI_P*2k4^)R&I%5XURL!?aR!f0*Y7*(SQ!}7I$i(o zU{e5H%HXE7gF^wdB&3wtr?ZsXrL$Dnr?XVwrL)xBr?b?)gmp)T0s{lM)=2AgW%TG} z{hJ}qaNJcJRI+$AiKE|3CHNzVIqK4_rl^oyyW?Ge4*picdZ&KU5}fIN775i&l&mJeE-0+G%FOV>Yh z={{x&ZbsGVd30Yxw6~f;wFv0kD$vnn-9Ah|JUTam@|25pGpL%WxeL1H1JaH-{et%d z$P?ZbFH{miC8jsWi`}3y0d(yCCJ000#Y!-P`^7>q?Je6*Tj}>O0WT5_EnWc4?0*sNeAll#RG#K;`xg=U$%u%qJbYkI(c; z{@DD89W+G=x;vcNCHn-oZ}LT7=3BnZpF#KHy!^qz;0o%Z9QFhaCY|u;{_x_c1Sf;> ze~;uFuC4#;0vx^_XD^ip$@cOXduU(w>1F+rAkN^@eg4H92~Gx&__qft@o)E30L5eisJhGm^{)zE#GV6HQ~a%AWbt1 zNYe~-%_6w53u^T$fm^+f|1Y&1C{_A@9CWx)^M9$LC7|FcQON*BS^{VU5WI9P`mjg$ z(bvxq=@&7609xc?{O!e;^`N0#)~~Z5@uZz*U7=9QmS!EH1X}Y8?;pK*E$Gqh!2xOo zalCi{TDj5v;l+-#Aibat9_UtTSg#r~#s$i}DB~qi`&uCOwGw3?__j)p7X?uJJczf? zqx&OxYxD~duzj+kVEb;D=)=qB-e3dhj>YbCFYH7?#Rka7@M7TJYv%6im={;hK>Y~W z4G9`uQvjtmsQ-}1Lli(`K%jw{?w2oOcY>0??7W$vV7*@IhCIsbmZBSl6%mK>ln?a4f7?l7>i!a;4v%A;wAc* z3(NwIcc(d8dnka{qXj6HcsT9^uW56%K3VF#b0K(9+r?7Fos#Sf3~7#*9!e!@j@=G1 z%|Dn*WSf65mq>t<2WUVYtn@R`nsvJS zf@AlI7x9b1rR!8s`vE$Q0NyVjAON{b&cdTJg2Si#lSgNUghywAf=_3{3!l!62R_{| zeL5>{yx`yV{Xb~FZYikYi_BBy5s+8kM8r`BC}qAP9OkHMLqj}6m%4xqqUAo%`VV%V1#GyT97@jnLWGT zytuN5gQ5F^XZP9eA1^pQ{{IiM6m;sU0qD|njXFh-?tA?5E})}J`9XUtdAMIZ0xgX> z=FuC?VO`2l^ZY;S!l?=jKHcDfPecJ7qY?nRd6C(%)2{pci+AgpKugh@k61XyK{B92 za42ND4}6Hi3*S{t4Bb~jjsC|Bpb^eec8~7apbFL1_?wI6W{{ux`#=l(L3Nq~s7~_$ zO`-?58vlo_X9c&v94&R&OEbIAzSz?T>ZySzT28!}|K$IFi0Mzi{{IgjKGX(l1}#ki zjq-upnIKg>mM`{w{r?|j1o6Rt-d$4^7#eI>Oi^H9C}rJK#g+nj9+Z@%Y@^gGNKXWJ7>Rq69(lvReRLwxh|kM7Ga?5}Y! z@Nd81(d%#UqIo~av!F^8ToOZE4_*I~;L+_U;KINC692Y91CQ>T;PnNr{M%1}2gF?Y zw;uuxZW(xVJHiIV996&z5x{MP7c-ims|=h$>x>h?>x^OMgZvYS%|Ax4kl_LO>M1|i zSF#@6{u(bdpx$}_Ue0kIv?=;U3mYhHU^xE_$ovq5`DxAY05kFFj@0mNyw~3SF8td>*9a&uyk>Rf-xkE-(LEVdpnzO# z?$X^2%KOGAL2G(7k?Xf^CZBGH4A3$OX-Dwrod|5r%gLHYt}U1NThD>ga5wZ;U7xrA z|G!8F-N^>pled`x)Ykx+%mB)p2BndZ{^T~$Q7_%z5-)UTfcy)ZP%G8)=#G|n!Bfk@ z-~(RGdMgxk3Cm${`y7;QKyj%M{gQhY2jmbqP`$TrCTLgxZqR@gDAwMCZvW|Y2Crlh z_2>poD4za*q2)j+c-UYg=uRQfBz>ur2V&HV@5Rf0(4Ej8osfaB?iv+{O_25+xV?XW z0%#EzXi3ydA74@)|P(Ly36vOSuxE#-FE|7#K>qc1S3JYLgqK zDMrX`md2m?d<+aF{*6C*`572W+#7#pi!d;}wr%{Wq{F~aE?;8W_;L@Z1*F^jQmRCw z@#P1Q(F%<}=Yj@M#2SCL8Zj`G2sHk@Z_L0@!qNECwUmLObPl*F1g_J-?L3$d!ATj^ zYk>CuK!;Mi*uI2`p~3b{KgbrI7nZD``@Z*qcplxXi~B*1qyr_&(DJu=2Ply-l(HXd z08I`sAa!*fH`_LVbk!AsuEcyH*bhq!C5fQ3h`{v=Xmp#4e|s?Ke!Lg;UqJ`w9sm`N ziXPo3ASN=t(D?oTf6IXqY0$N>pyU55{`~*{niq6i=Os|8xcLlZZnOue*4qF|H5?QE z|2KXMbze8{$3BpYPx7~b>yhrApurIbiVFrpI`DGWJ29w28vICFiny}}Fgwcr20So8H(h+ncT6c^Jm^|3h$LDWDMvNH^?d`%36& z1jPN|S!vMz#TWNhfB$d%-*PuNJ`+IM)&S%;i|+66{vTv)s+-5~#l}`pEdn}_p+wfB zxmtq()JyV^cwq^?lg?Y?#Rm@1w4SR3s0DtE#TsmC%|3`bx^q;(r|3Y^87wqG?kQ2> z03{>=$FS}i&>iTP8f#PxKs!nytG7P+bRTpCU2e`$YSdh#Vi8-a-Ru5;W&QvE|4S7e zyH9!avTFE?Ggupx@PaCu11!xyrHVejW^>#P8Yp&cJy~i9Gq6-0WPp3ALgRnXI#bYL z5v(x~y?T!S4}nhba%}!3RP^2vw9HM{)%c_%|MqMA+s}c#AOK3N5{_{%v+9@_z*BF? zqKCm8M^JyXMnwW?Jr<2^k`N1}-lQlDBI`mk0IdHZgki^6vH)XLu3U%)!9F?Se-y?~?%N(lPI5 z6fHYW=rS;*fv!4G16@n4(fE@yfq|i1rbNH-B|`!OLy3CxOU4qV=9i%E-cN9M?{MQw zA&?Aj?9EG(f9^bA9!^C+yy#J7d!*<;vo3;Iq+&jC1?om7{aXPAAB{u4K*sYt4g_#xp6YS zW^Mk#QxgwbWUNx<+H$fa1auHU8UMBrm2wwQ>Zt$`r7j?WO3-9#C-|sAAC&;mez;wr zBMd<^s~SGNtjYeMO~9Z#H*SJv%s~exf$HL%FQ5y4{FQcqA_FvQ4hp0+>k}mrI~Wo{ z&7Tt`e!CbGK$lt^Ow&HJ3vvbZp%Q}~%n1-_*&S?9mhcWx+@@KdDAn@l6?O6#XLv2? z(JQJ6VhDKjiVA=j>>j2B2*mr<8cd_o^XJBCHbT2sW4%zhOo&aiOHdr&1l!5l=XqKobywCz2Vby)Y z_|guBQ?so3!@qfc|LD=_oZ;JgvV#4yC%@Lm*J7UC2OXOqGJ0Hm;mLjQvj@M{htK>G z-}p7IfoIe};hZv`i2=k1nGfQJfcYgV3dfyAxL(LuA9t3>U)XI0sx3hq2ocBGLGvYy z0_8uCZpVU#3KoVE-!#XAFE~I+*8p^-gQ4RN&|-!(&^ZO5iz`^uj=QKBGcdSx_^24Y zV0r{fzpN#o`+T>7icQBN4#-+ZaH~@TwEOa&fhfZZO_(^yPLJ-u0{(4IEZ=TOpKN|8 z(0#D^1XDv58w0<~L2%Imc8di=3A;;&1LFopkRdY-L>XQ_DTEXQ;Gz}O-bsM;rWrs- z6Lx17@b~QpcUvIy_MM)#(OO4Au$Ow-cm|-}N9^ zdIxCN8@OoXcRd7-Cs161FnIhcLI5`66%L(GD&W^FxZ&CTgI}}agh%%+7k*8L9Uk2u zUHCOUR`@3Wd@(f$)T(>Izs;S=!db2)wD|{nxxEXhpU9du>HB}D?kOE73OE=%m@oW) zM8ZxX(5?p19MsttDJwyn8n*HK^cKswTJZ6=^n;FgYIw+qP_l73M2X`DM#l>;J-V+s zHaukX=sx>m23&&4@xV)FB$+z6471~bmn=v!DR3E1#{)0fkYv2zGF*-aUb2H1gr0q2 z0ul9Rbg}T3eAZE7ZFnIjt5?{BI(+Okm5jd?(Ahu4By-t8Fw=@fG&SI?YQTEJp)6UE5GX*#|^95Ia4etZ|8a1F%^T(hKZt*W~{uN=EusD~4VMQ(n!`fU9hE2H~4BK-#8203H zFdWR~U^tcwDLX;=)gd$tl1CfgfXW@;damExA}9qSoo=x=zzk~aRWEhIYm(2T#g%fz~v`ga|CEt z*fw`2NY;;Hfn@znuF$M6xD%T7=eQD^^}oG9&idfcSPW|LY;$KOF6VBA834}uU;~mM z1`t_xlpqXXf(C#h!~i184r7D?%uoX!%!9-lyW<{4(7Igy{YM=4f{R_yU4x*)7Ua-0 zSLU-XwnCM%fszFO{xcrkS6%qmpY-fL2bP{TkBPx?52!=!!mr_@;^4xs;i3`%Dkc&@ zWl4cg_Zo0-#UhTQB#?hwI3NGELk*AW54>P+_?6bPE1#OHB#oQj5CqNAhk50dg&aeWH z?zjZk?jxW11;QkJKx-ZSGC*xH=F`Wa7jSxX`Xzww*W2$d{{05HcG&MO$sc_njX&=M z|9*GT&-{^xzTe=FKKU7Z=qgAB=rB?P{^$dsc?N~g{E??XYCiJ|`ly(I6me}Vgj9=(1tzSciHy03#u z{uewyL>NFP7J-UaQ1=N`+F!~3w`Iuve z9B83V_jyp)0X%bW0cy;G$Aui@UglIoJ5nIS&zwQ@?{7PT`u|0Ung*f(-v8eXlD8{G zmk0GfApL)9Q2)Oe*8lHug!TW6QM5qDYxuW^sDPG}g9d&HBPx2sCe5q7NE#kr!cLXsG98C=mhmI+4!>d;0MI{|$_gAOz2c zfte6@Kqf{Z!E*-g9s`f=$^y_n@mJHq{ZMdMl3&o>fnU%)fM3u(fnU(Qpwqdap`MGO zgky&wsG|wuaWj;#H6LIC%kVIiu>L>L>0AImbOh4>tmkDY;X2+7+I<8nBO2=Y7)qQP z>UkMJ6}LhO7pR5y{eT$5YYq@A(n%cLwFD^z`SRxkN=)@Cb7&x9ZDxq*V4gp2dG#9^(7rx`9Xb2=NH>9gZh#zC7vF=yjk|* z3@^SWgZq*ehe6s@LE01?cYwAwf^L9gj#?^o%tb|o4P=Ho1H&;F6-{ubRP9AB*dVUg zTftFp0h%8L^==|a{efabju9QT9M zG}3<0&O8fn_tXVcGJ>udO>?oV2c=KY9oDZ|Ux4nn#%^>X)ad%%KA_FlX&~o=^(V1re8cPAKBZYNNTW?oNHSY(71Vf#mM>k|SLihP@ zp%(%Vkh{0dM>680!RLobfI968j-k-Lp#o^k&B3?(C#Xd7@a(?f!oTg4PxnjXxBT*u z#m6twTsRp#yL&;|)7AK-FKCU;$(jO63}=nUhGJz7ulw^o7r(O|tG!n6B;PxmFC?wg>ASRTg)i>MMdkN*c8|DSYh{wZJM z)nE}->e^7jxU|%sf13wW!%x8yjfS5xC87;K-HGigmaZ*Lptk%Wl8*8~blncm zgfxCQU5yWb+PX-+Q;8W+DNrjOwd4ACI$R3W6GrZ5KSD@>TKKSz_Gzdvm#c-J7v!u? zNIMqPuLt$uR>2g2+RiBB022^0pw>UA%Lmd5(o~9&0=51@X2GPQ5K^E9H?kA$5mKNA zH_V9|P+@jg3qN=MmieG=&4HIpjvKfkW`etl%rHfu<~Hi6#EWT=Kw)>>0P1sqI_VIN zXJ4E}NP+qspx!!6YST0(2FHdvE`}0AP#d4!aRWa@3T)jJghl~y>mEKjQU#UaaJBIB zC=mknQ;aPuE*Kr+MtQQ{0J zMHm1|2B0LM1TjDi*7L_@w-rb$M$iArBuJcz?*=vf`S%}o+`|AGaDlb_L2gWQWj^y_ zH&mg7;|5m#{ii`I?D*H81P!@>Wamx-MD7d^ZEK*4wlRGm+= z5@+yWJ`D=-W-Cz5e$TVhPlA7&yA=O6f9bS?4>{7f4}RtstWi;z0S$1_@k!BPq6{zU zZi6P3+=cix?(uK)7XcX!ZY~=*@@t&JsZ{}_)fu8y7NSQ$_P?b#14tMDHh(#=872t* zF)9k5`2}QOSc)?sJK;vCD8q~2w?KC&yQmnz8seZX0q87K$lb|cqb#6kLR-^ zzkr`c+QA1L{QFPvZ*%A729f;VZ>I6*9pvBUF92%3Lp;vE&7W@u$R(hYtiXmDfCFKh zJ1*s)I=Rq~W zzn$F$2SYlP4HA#71vhg*RS_6N>IaPR+614@1P;&cAHK;yLF*U0Kfd^E z1Fi`+^Mk_A(ZbCedtI=n23!{$=%A!7*ghGO8Mra)0v>4c=fmP+?wI3qN1} z7SJk5&{z>_UGRMZ#OJ)2b-^8k6nb575Fv$L7c83qE=IT*N=!g?0WavpEu_kz9ibDg zGRU34#IRY=v7wHep(G5U6?FvM1E&4oVbBOT$Z$x`d7(D}bo$+E8E`$c8`P(PbbDNG zK#XK=ILrhxmCx0}&#%N3v#xpD4|X^YLkVajsXrgcY$S)D>xTps3uq13Hg`}po#uG( zAqS}Vbm2bnBCZ!A&ju-d`M0^Vg5}d(xKE@xe!rRKYJH}j&2cAa2pmy$Xh3ywIBsC# z-{uag#=*K^rgA{#x%juabAn~Cn+I|Zs3y75191gEye`>w(b|B|uKWUi zIxhU0Au0~8{2CWs_`^l#tBEmy%0^I)45}m`RUE8{evxn$Tsw$@r1`h`i-GLP`2eom zd5;)^Dtkc}6$6j~STrj`Gz&vDi-0uiLp8U8MJ z)&f-s;QF9IA{4ZMy*Fc_2js{B&{%}4@i)+nokckZf2%QQlPzd%duN4!<9>z|1_s#r zBgf`{a{Rq7!E>+BDbdjHjyph?FnJtz{m%M^f#J9-XtfZ-3&Fns|BY`$hFeZ{30mKfQgirq8UHq4L7!gMUVU)}{%x*Y z{M$l7g_SQ4D3x`%bMS9-6-Wcs_OASCo&Ey++kE*zJHb1BR5U;vdpko^6u@U5yij?> z!Qjyw`W$o++m6fs|ATtb0!8Bd+k8b@PnK|lmWXg2bLVAv&2r40m(lV6v4(mM2L2Y_ z|Dd&pkfk3R7(u54fTl^0xpOjty2+qbOYjo{;$shk#5XX$egX<;CX)9}AyHuV{>}IKzwl2cQt+0}VW-dGv|~fW&S;0q@B#Vc#t9 z@(4Jaf|T2Wqz=HPgkG+MOKE|mmcpe(UiQJI#6ePBP^qfTqOZ$5dPTWFf~8QwRF7_u z@&9zh8D1np#aK2og08XziN6Dhd&0$;UYkPH-vfyo!o`_i%RzYTqFZlRxU0!cCa=G31)I}aiQ{HqFfvt zoLpQS9Cvy-7(VoJFtGG-Fi7-qFbMY(kHh;o81nl#7~15V7S|d=uXnx}WExKDSIqm?h5k2nufH`WZj7M+igJZ5w#QCSXKJ_^6`YhPRhr#2xD`*W4 zi2erJN1k@v^&bPni%)If;!nt1`H}YfDR^}M^67r*YW&UB_{odO_22)y8vl2-1aCg$?^^}Bc=YxJ&+b<6 z6ccFEm&pwe(6Q!ju;a-(MJ}c3zC(#o0R`>2L|K)Y%vN?r<=?=Jeo$6$N^^X;|^PI*WUrH4-nY}I)mc%GEjJe zT0@XA)8;n{Mz@XsyYg@U2--I3)BVV!`=up#b9P-gXc#-7`#b3Vl?cbZpoMt+pz{pD z;R)Iq>B_(TxM%kjk8U0|h@}A$;O)-*+irXGmT@@pyWahO9OB8E6QFH);IqO4pi9F* z$NoV)1-WPusXn2Z`x2<*KBV=}koiXA+u%Wkm))N&XM*Ci&KxxKZ_xcaZGs0R{eh<( zdDtQ08QC5nuG+Ot?2+-#0}b#0A16Fe7YuRy?TraBz!_0 zLGwBWkoep7)0KbQ10T>PL|FWRx6LPj;;%#{!-ap_7VuaM)IF~J+s?c4Z#&}BQKF*Y z30esVk3`U6Z!HJ-x7`L`A`Oa3e%BlDh};j_dI`RBB>@_dpbhK>j`83ft+7b+A>rUr zd3Xxj_Q9w77b0~J|f%jw@7$cp> z26m4}Hze{P$0Qn`1jSv;0e;uh|BrRwght^NL=?8(2IXK2(B|#tBMRV!j!5Yn+5X!e zpg8*oO*atRyMH6ihjq6>%CD<1Cm_x;g`6d7JrCsYnrl$o!6^rHEilAl`26%_RdI%w zdBKR19pWIkd@)GAE(~2BK7ajNMx5cryb##@wTmir{<=E^MGJV*I%IDjXc0T_4s&L3 zo4Q2Z=)mDL$L61vrQdcrOTgAggAQgWM=)7!5GLP`+ez_}z0eX1P z3%0GG!WA@|&EHZFY8Q37794Z%5rkN5>8en|=6H;q@im)cgFQouG-v_9`45~_#)|9>e4(%F6Xg#`;}%A3E%6wC+D%7JHO!M!$B1_p)~Y>A+{i@y&v!wgD6 z1)$Vh0XxeJv|J1{gXn7f1a#a|K=TjPqMC*p6$Qo8Qjgve6-5W5|GvHD9-h7NEd1Np z4!mGhVRYcfnNQ7g2EM)xwm~{rUme=S2= z3=FSzn}2YYYJiTp>U9Cl*Mqh`z1Rto5q9Z50a6Y*#q#`%E#S?m;JpTjU;$gD1-7bw zT0?apXh%_Run%NeIH>>iZ!-hKG3P+=$)g1*{VGWAft1H!|0sa_yWPKDaFu`m-z{!* z0J2|?f7=P`kZzU|VQ@fv1Wn9>8kyjxrSXB|?ggNc1n6>l3l~Wd{;3E4ALwicB{Y=v z6)5&0wTB=(<01YB*C`D(k|GQxd>*~L!XQCEkf47I7eJ*8QhyrMj)0se9^lBo?WHg1Fw9#o%vCrUy1iLI2NBKj1Fimtl!Pmo89?`3 z@PTF-Koh+eK+9hoAj8GyK+9JRUd*jz0xN;cHh``wfl9w51rviK|297+{%ye$ zR;P;DI=m(Lw_W7l=4@bfqKvJ>+kk)DLC^%_IcdEUYZBm3?sWAd1ew+mHdZfz_eqE&sNI-!AZPyTI>qk$;=Fl-0#z zwvJ#a{%xoDw>cYGT_|Jg2sQ#a9K*JQFu#C&1-H!?VH+s%fJPU8l|cN%f^3^B$Tn$+ zZPF0ij3KrelVIEZy>P#Q5+umB9;j_>{M&+MAYms12|E)=*qOk?4m2nYn&ZR~HBAV^ zLFo--xIWZycK&U_vJk^%A%>em3^yg#a8-oipd<(~{8BM!nOTjB0cdX20aQ9AfZD3y zwsZlg@di4jG5~4oCb+=z==4$H2nH=`5AkSzli=8W6S1D%K!KCNr~5(kZ&m)D`78_! z4fcxst)rw4WJtQMkbb{%y?Q_DYA-nQzP}&6N(OZ_Eac-QxT$dMpeKt(Qv0 z9r?Fi1^E=zo&q=C&%W5Z^Z$RxZvGcvJwe43s2k1SvV@s|!G(XDH)yL0q-?n0*?r~( zQz>|s$eR&VHi3#S=z8ljFJ6?uWk9o?p!LZheIQL|5mL}%3$AMuLW%{F-{Dfz5mL}X z3NBTHkb)LcaH&Lu6sVA52d{EI^TG=%%;dO%1LQ2IurWfI6I^b=&5=aNfQl$&@BAx< z_!PW02D}IcuIq6zIGY{y={0fS-{#Eh#J?@1Ov36=F^5x!OPK^Hi$g?x$_%UymVreL z__v(^rC40$h%+-%K~l5}n%Tf>n683CSH2Lm2*sHNY?ma=E=h=8AW@$(LzrELgzREL zvWpF77r4*@+qJm>Y!@s4w(u8Lhl<%c++RTKVddY(Z*{PYwS%3I4Xj8uEZGV54fsMX zunmC_8`$`_g};Q@@DgGJ8~-+cMyrEmY#r{5gzR8Lvcmyk2V}|nnHO*K!M+2GN9nA5T0FAIOu_22*h zgBIgEfQq&N(5w-t!~w0j1QjHp#rfdUsQE|&_*m)a!>yM}R)YF4`?mf6?|2+^@-f5f z8Q}7+mnFz!*9|COKHxFqxC@7bhK7blX9$NuT4xA{N!oE24jBzlTM4AWxAkO+6tqou z6V%T;`C_IU2SbN*5NH|$vOW{mKEDO+>~{b3=;d9l0$Pvl0_sPCHeqg20d;JygNkMF zaVqgIom@c8JaBsq+8#yGpAFLQ=MK|ff}!8Y9jw3kjRs`>H!sLOS6KfUr2d6JoZAXA z%>mBk1DV!*MB}BdE65O#N1+%rPRZE-+6&2Sbl|XK^ABcFrx_{Tm`hmJ|oNxUw63;^kpg z28M5KpnJ9$OZYsx&mD6XV0^KTi-F-a|BL66oD3eU7eHsycRGXbS~mdQj}%`33QmjT z?lGV{T|n^x+E*TfRE+qhK*#rJZuKKVx>mK z;KjpY8-N|Mutv-^bMfzJ!Zku=y)Ug_;gXw!F&uJy?zCyO5htrLCiEuSA|l=9Sq!{mcL&?nx(5!sSrql zf16uDM{_7614FZ00n4{$A4UcS#u8qLa0nvDbW)nuqH?{rxer80c~{&+bzoCqvC*FbA#t zj!}W+H@N#U%~0I8OA*C=uT9|YD+&G907_sir9NO6;B^ux{?VNTx@rv7Nx5dA*yA<( zjN<8X6L_uy_1|6`Hw9fQ4hlffZEYHdyE{PP_3fZSi3rq1yFe#W?*QGP!S8aR`%v=< zrf&xw_+1WxyK#uzhcq7G;K;x2rX&BhA1^XZ!AtlJ7(lnoKqG0Z0wfSXBa{yDFP|C1 z0>J?sNo}7X?uAMpHwG0OE-D2+y*?@iuEwAPGfXz|9dl7JWB?t$Z`2W^Vhq|j0NT#} zVy6*kI16k}8mcw*#-KtVMkN3|l;Hr{)BsLTNaG1e^D6}&pdA~%;48jgLKbg8d%CVh zPh7hFMP9u31+94K{?K}$&KkPE+@pH0FSLfjC!%j_y2#8 z*7`FqmWzT`OZap6bpHUAZ#*8>2aDJ}I^#JUw=nwjmPY#4_~LVgRAiYPymApolPvD zT_cYT7#LnFHPj1&ZW1Wr+{FH3AxMPxMU)Y!EIa*TkuC#+tI-pX+ULd$44}gcJ)7S$ z^0!)ot}*z=-wE=9i{)C-Ogw)dsG4#>FG}WviuZDfZhwK+lO?P# zLY)8o_vrNxcyU_^6rAT@1cMb6OL%lwE1>DM081hCO2G8ahw2pvD=1d*=&sg4)B9&0 zs=ardp!Oz1_1*?6DAw@kt~Nl^djKqjuy+AWuR2uke6WII1CQ=%3pBkgU@3&&6qw%E ziV*)MgB288cyw1gpy~AhOCj`X!1S(%>Qx6TD0cAZuJ%CF%LA4|=zZe|^=~m$@9Vjs z04etH=&lYx(|Z9dh0wbJrq>**cRg4^aR8)FfZve>8%qNv3!m;g9?fqu__u-9Jq9s$ zxTpj=@^3q&qHxSbC4iyBMJ33w;SsxI_W{=q=hp{ca5y%cQs{6|332Q`aPWmdhl@(6 z@d3|H=Nq1#&KE$(26^^6zi{pFeh)sx!|~t?3D*wq4=()MyqGpIx^_6fbLHQ52()$$ zbhxf(r}K^%tF^)Rn`J;9)!hiHhMRw|mT)xxU@Kw9I8PFEpOEnZ*X|1*os2%9>h31! za!mu5?i<}F_~k)^X^f8D7n&c{dt83x$$k0%0gp~$pYB_(Ee9&On-8*k{y*qweW>OJ zC`dRCgU=JQ@aSgr>Ana)))ji*2}7EtheByQ|8@tZosYriwjM0ybv)h#YL|ef#$LPZ z1hqpzry^Q8@^5!CNo)SW0#^ZQUAE*Q$6ld7v>uP+!v-{MGW*u<2SR4k|4HnSgf$ZM{?NLg;;n97|r~4wv z_YSVz2chLXDDpfHzG7FY2lqh^@ig#nJK@`U$+6dwk>BN%QwI-oiHPU_11{Yse60`H zT!4gwBWROPj0y+*{xewl0NJ+b(d}|m!lT#ZCa6j_-34j~L6+6=&E{a}h~Q|sUBY#| z0Tgkdc?FM7i{lP4aSRL$#~o^lSU_zMH}DKPbayAx=r8oVPJ`}13yqpKfVbi~T7W|K1t;hjO;*&p!1w^T7U%@uTBGpdnie?lK!$*f zdKsp}06oSIT>gRk5C0tvJi321R~m45blefj$mH4m1GEUv zqx(}D_X+SWY{z}zWxxCXGczza?qOhJU~t@fpq_!Dl9hk^+1Cu5k(TC4CfTpbt zJi0$RHveSg?*Uyo?ATzz$lrPqw5zK5Ctoe-2&pzfn0I@hx6csDgf!=;op9f`vS-SZkO)UAQ3K??&Aj^ za&VvM3{la5+)^xR54Tp-71YvXOY5vN0d;yj(mLbJJi0j`ovZE`6$kL9SqX6OD$UYS zsgxJAG^hE9LEOt*zo6bVhy&fjBMdk5pbNq)pr`|5kgE~rT`72W-vHfBAqKkLvs>Jw z`-4w6mm}mPCB_;u@Bzn*ObI7=Cv<^h++kP#Z4RI#yq55Qwg+uDuy5i7dWkeSRA0l;=+9bvhL2unS-JGa`!njxilbl0euaGwPw zEtl@|APt~(joh$AE$$5J4?(O0OQ+7u!L1xOUHh zF2Jb)@5BWqjx@*4IFmHT&N?$k3qOuhKF@A8k4_H`&u+G34g!ph&2<(`r7Vt}eion= zTuz{ChMb?r&!)jqUCRiFF?Y9iJbd3rg=L2F)+HK!*%5l}I$d;49&2{=rnLxHA}ZE}7KM zL=YvsGYCZS>;$z4UbF68qX6pNho}U+n7R?P+}%ed;Kgg3fB(CK1srzi4;rcyDe#!@!W z;USF=XrKd23cx+@JllPOwaO zGbk2%MH-kdbxsB`8-6Agi}yONU_R6dmU_*F2tQEPN!Y;X(6JiiBhcJc1gKe(;n94= zz%ec!Tv~61Wuq6u_MjXRqmltG3Ly&4oH+wJk08u3#G~;I_+X{*1F-58lwB@>&ogoD zK4|<6#By*odIF*YJUTs2fI>ilU(lh0U(jI&zo5ekenE#FFLEJwR`Yl?9s!x>7!wzL zxVhSb(W7$>cv8KqonYhPObITcD#yN;y4xy#rpB}DU!w&)j?OO#J}Q}Cuo>jkPy7Nc;2Y^b@e4MCHddtZ=O0SrFTTN<#$R{9 zg@4-z(DKwSM$l~D9>^{7-S0qAPysp?6@GrEXSdCJk6zJIcF=gz`4@LLaxj1nG6%;{ zuV@`q_!v}}51eR4`=P??p~BxmS-Mwr22^+kR2Xz{r$?{oN~mxnR2X#k4yZhY3THuu zLE{)6y`sCJ!ogtSl1h(W(GyT12Z&IxN3ZBzsE{s1$i$;p^c7S{3L?bk@&Bl&^*jC^ zssI1~zb=J@I%wO7N3W?lgE+(MB#01b$m?|&gbg}(!=u-<10?MX5dt6b(QDcY5;A}Y zfg1H5y{3=;i!r>Gb?ICUicXJS(@h{gZ|7zx*O&pcmlzU}pcxI&Dm+jmD|obi14R=T zD4HDjryS)69WBJ)!oBMlRH~PE z-hVL$kM8R)(!kQCoUZ)ap1xcSYRN$suJrQuKvlRvRPZ!+gA${_%Qj?1=1@iQ5Jj9W zoU1{qUZ=n!7(GP(B0A{ebcvXo=Yi1_lOD$Z>!|4jgJFCLZ08OyJRcfCD_f z*HH0;vs5^(x#AaR5zjXUjuNOf3Leb|1U#BwGM3(TXn6}dtK$LatXuFbg#~ywP>C35 zgijEZ-dJG`g+43LN!PPMf#LY=utSLqs6OTc4av30g9k~u9h)ETcj*MH014j(EqUuc zjZ~bxyd??i%Yo`xXn$fU6U+*2D`=|}G9v}5f3dFLQE=`4=-K_kqxMP|jiG?~!0+VCeSdd2vz;)USao>0tq#o7MbJuokq2$bb!I={8G{r7uAt3YmXk z;cvMKu3kYMd?x_ z;I%|AcwuV5TVERWeE7v6|_}j-JtVLz&DY=hAKeO1G$g6S5%h; z7F699prC?}(}TLo3So|rRiz5X-yFMN`gZ^D>3#|6Pl49mb$jxFVi7ceFX7QyqvFy1 z8@#O3rTg>2_e_q>&zKLsW@&!T-29li^<+u;3rS6IkD?^kwfopE&}fZo>$egW7wtnO z5+H)d#rjaG_&(5CrLP6{fp3N6+$RaT+kmP2Q|s*#5$jteEXJ2!^B7-pZ2rg0Kjl#K zA?DWqC49~AL5CFnXDs0~zVwexazbrMLj^ErF znM$0R|FYJ|IfBlOZ2rMorV8nmDl@`DQY32o02XTouG=QL=%)c95=9ohPZiy!D-Qt3AA|P!b?xYA*G*#m>9aJ zgJ#iOjsH7#-*3HCSI95V(0#b|b|rJKGyB0G%pS=n__w(jGF!A*{s0vQUe>p2eUTM( zpZ1sm+A+<)EyRF%2PkSTKk(>2+j0S95C7DIE==v9iMbc;aJ&8=w!T%f=QVTlVGiqC zHIrQUxB2ma_g1@cdv;#~?{$Xlf@TVUIGxXN10(-7H(qr4NB$6b0q`zrH-2>aL;j$_ z6F;FH42%p6GaUDV8hdGu+Gia%u(O_MNPI>i0IS?EipyfT#^8mnWg?Iu%q2SHDA9Okh|2AhP$fy*kx9JET znM&h6fj&5Oo`}Jza~|DSU&Q-?4M!fIs*nbcYYD=}wfMLHgb!`~bK&299^Cr}J5A9K z;$n7i0&r&Y=)MX~0O!Eb!3dS-1SbH{yf=z`n&bD2FYfw6%-{wm0%tCCGxkE|c^x+} z^KWzJL6ZlW0cvC88sd6c>x*_{1+;$p$^gsl-NtC;Ukqsey+j3Ev_Y1Z8hCVjal7Zcq!Y^<;?!XdA9f^G~KyJ)dqgg`vOy|9`E6A$;!D z|NpN=F@)9s{{IiJM~{H2;mM$SwD}h!f9qsWwfbL%zt58qyll-+#>Jvr5VVk>#T-;Q ze>*4uIU5pIb9r{3bG-1 zn}0F$yPV+P#$ssEA_-m+(E_?%_ceR-FJ=#ZmlNMu44F%FU>*Qj4qgUy?nNHdZay^U zBPw|x94e42c@3BvSSA132WA&|;XmjU&=<@QMJTNju*54La2A3~fLkSCnF~JPRtd~3 zkM66WCIcwUw)rqIbb}XWtY9qhZvL-OyCH-|NrmhVQ>D) zSEK2Xe9#3{bh=pdNPxnpL>y!&Xe|d)U?lp$4>RuV2C4D{9cy{bhu`V=3)7_{pf%j! zo|l-v>Rljb)X9=)QhaQV}i^52{o6@0sI z_;g<^;RI=XnGRV|$>i95qWL9HNkH>UkrEqF?$7`cBF#TpN<)3S4}+FQfEE>1{Qv(S ziF@)l3bzVX_Vn-n{~fO^@?`GUD{}f;uA=XfnHyL_A7wvi65@~ z+c-VCK?gItSagDdlfPvms8a(YRVk0+#`;BLz)0faV|aAfmyHE*4Wkds+EgmVlfH zny>`5R1Y}vZ#%%l0^05J4Rn!+%Ly0$ZJ=?}13VlMK^8}F#=GdzeV%{YAs!~jZ-+Qs z__v*K;deO&UT1mj#Vl`7CFRWM(S5D?0ch8M^IlK^$5<-ddcbi5mm_Ep`k5yagX0Fy z*McA+PO#8run_2uG;fer$XfgJpul;t1H9N4Ji48uVgVW;1)pvTTJ8azFY0FW=#^dg zQH;U(l27+ZNAR$`PqzT*j+E_D3Tdv^he4}(w|gn2S^7vYm2!h-k~l1UBv?u$K&t?= z55>6fZ)cH6b8S6PdJ$AXaUAx@J{8mLBFW*%*$7H2-7b4#n zA&#BkN!M-{NfAd*N02TPM^49@ZWl=jM^49tZWl=lN6to2d#Kw*QpS02w~M5LBd23Vw~M5MBWELM0JhsjQpJ(eF{j%_(#4Sze6&Hgi=>7lr(;34i=>Am zXCr7CW4DW>jw7dINwGO<(L08LgMk4uFac_PyYO$52c=v7ZI?ln z?pgtGHLqu@T==@(8P|Nnmps(VpHZJz)C{}Oc2IEv`CPyheF1dZULh&sIa|NrGY z2GEKgBy+n!YC+L}qBi9jXw(KpXyTLq|6eDe2H0gJJtQ4u(_bI2i7p1MTByV&-OHW#i^%=io*Moah21^SL0UBXm9* zbQhLKw`ahMyc*D+`05DIb?KcoDi+579W1Ij%e26YG(neQF?e))M|gm4!*Z?x&1g7t zg7(7xKW_b_<|!zn8-V0rsDq5@t^wtJ?}QhUV4ioz3jr{r8M z3-Aj%EAR_C8}JJ{JMarS2Y?1X`30Q|JUW{}>Ordz!S_;v%5%v2O^}-uz}pj0Isv}P zg1+4^U9}H+biefKl@W4m{vp8MGnEN+5KA>9|2F1>&pEh%xL6y5q4i`*1iE$8KyAlvkaf1c-N!)#xUlnuJbPKB zK+EeH7(M?Vz-FNi#6lgAg_roZ6?5}%bLN7FmMzG_Z~QHw-YSa-M$fC-8_mftmlA2-j&nw z|8dXeBOET)KWb+4Z!6{n^=9DCoW=l-R7;Q(yAO8wavglY^8WzyG3(>yb>O9yFH9;S z@ygX3#^`zQ0Snlw6CRze2`_HW7GX$hu4P~>XHRRcWnwIH=HFJ#&%e!?4{Cm~RqMAB zJy3!HrxK_z)6&8yH;}`N35kXu4hie1jhcC~Rs}1W?DyHX`TH1+nku; zPGINX=EaiM>CXh335SciGx2Zp0x9GJXE7I0kb+L~akM_k-vpXlaq09?aq#Fq@6!vS zJ7ZJ~UPM7|*R1qN_EB-LK3iMBzfHvO|G|#%3Xs~COC=uNryyzWKp6)E=xVcePzh%d zUs0x)Ho+tLG{mff4_REgk9sgewhVV)d-3Tn=q#oZMgDE>75@)g->A6)nuSGfWkGM9 z12r5~fBpY&bl~-UP`a`Jg=2{dR2Ek7LusGxJD#219ATg`Gz@&AgM;w_&*TrDoz4p2 z0~3BaZeeuc-~OTbA1i;)8*quqXHxiddrL0xl0+w2yl9_JHTVJ(;h+xOxM$R29N!e&Nyh zlfi+3fxlfBY_5xng7#NXy3*)y7V$_vme%Pl=3)J#Ova`AoJX%{5=jVTf_Lh9QkH3%tskj2_fNwwf!WZPQ=^~&-RK;RxF52Has})|jzXYvmbk=xT1Jbt5M@7NvM2V(L_d${9_vBZq*tlAnIzcGoD&e&Nv#@wTV+ z$r3Feu$kpBGhgJYfQq&4p!Hnm;p@3x@_=Ubx?NN>__sTYdG^|HfI>sl1#~?W*gf#j z&_j05#+(2Dzr4)=T1+1-0ZI~SuG$~cT(m!eE<08NJMk1KE>=zxVc_3>ywh3Xh2IOP z$3d6&g3S*B4W}IP=sx{o(??L0d4tZCd;nU5%lqO(F(Q^B27uO0zu<%#^4bv`haSmi zeR^3eeXNg_i9sTe1Mb~AWe$ed*4khFdRZ*Na?qf3`v^{h4_sTGl*l-KJ1PK5Ts|rV zpkriQx{rgGI=y&!733grk0nN>0yH2ATJh!px)uVoZ3t2ffzIFW2vPC$>And%I^Sy( z7i9k1gW*LZE4Z!94j!+zI1I|h9-uYbp!q(~oz;fS;6-}yrH$Ym2wvZ1@D1EeY4GU2 zS)%CE%d7rEi~*z*blV+h#)$RBS0<3z{4J0pBTm0Cy#^`__*>W*!8-@KPrq0URRP)- z;kZErG0X)zvF`K>m;VqApu@93MzVpT;5_)?i4s-F*poo149Lw6pmXsY7(vU*L2dv| zV7@2=w`2}%;sWV93DG4BS&si;B|=&~AKJ;{)J38(z$YsOE7sJ_%a( z`C>K`14BbK2SW+?-tfOyK+Y z07EHgdTru!F^0})f$q~U?(_Tu-2wqx@(4Kt!T{Vx1P3gXfW}uK$cX`)ctERsLHj;I zehdO{iwFUSG^p$IVge}JHy=TXAZU9Nbg5~WN8=j@4p2MtmrwUcQ0yCm76lj^Ujprc zFmT+#%mKT*&ux|ngGcfll?u?6<+m%PA-CNoJcAY^FRm$oItnjAvt%Bih2V^DnDyz>8lZv}Jf?K)|X?kOq- zU^y2R1CQkMKHY~sm`}VApA1^j2hqlSzhRF`1E`r+V)Ei&J|tNcfRBJ`QJDbN8vnDRA>`Q| zE#cW+tpGYq6KU@dC`v%_;ljVokpmPV9vvYn9-CM}$qY0(@`4}Kp+t=UQ22xQ^91;G z3p(;|yTKL7;kbdZ;k1Hp_f7t7zg~c5t6jh&8ru#VA8_E`b{*te2hdm(Xzf^si;6*a z3wSw1r;Cb)PiKsZ!VC3(pqw6~0-9zB01r!moCd}i_PH7#fZF5;>UrX}32F=I=mkcE zReS!TTIC8_RROvyui+P4Np{08xf1t=UkN43{M#CDFfcIm1~7I^1Tk6;@V9~v20R89 zX5!y==rI4bMo{SsRsv$Q94O5{1{Q)zgDOt2G>Fl1pfuoEBZvi)2F=idr9q6A1Eq$? z8bK_ubi*&sQf8wAAWQDR+yP>=94O^F)(B#Om7M{XR|=pJ2aoQXrDn~YpurY}M$Z^f z8^)uX@i=&B1+-1Yqnm?&d!Q2kc29*DZA#!9WT12DpnD`tVn8Y(6rx|=t%fevgxo#@x-aLV3wXc( zDbIs1S)p@ot}O>jIGtNvx?=dJ9yknQ)PNYE2zTM%HW75hC}@d!>!lKLkM2g$Vi*g7 z5`ItceaZs9)~AX-7#%p=?ZB}@0lYvTWE|VU7c44_hY!ABR$+wH3?S2x_Fuuz52-Tz z{@?h3NAqC`P`}Hkn;BGHa&+@MT6*x5Nc;!Ma5VqmsCf$7MhI%ofyWC#ZD9k??gOBX zFLDZngg z7FICux10mbQ0xa;z`)-My5yXHTRW&P=V}aEMikDmiPNWB-lO|`hl@%f|F(9}Cb&ZH>0El2;h2j`IfF;Hi%J0~O9vin2U`d# z!Wmv{0i}`78qnFk+fI1&vOf9u|37H21xTgECQfiJ1f3Ne0N;GkeHtXE@IvbssLBD= zB)suA#27q4C%nFV`iGt2IM`dDf(TrLCxC+;x@EVQm-&?#!^?FX@Qr(r=sp9NfBaI6 z;pIMVba~KtJ9z)C^(8Te7xy?pgC?N+m$$qGTdnc(G$)D{{_PaM2|Dwk`yzNDb(Jgs_5+aZ zliweJJOXCBXoGgaC@}LgFgRX(;lg|f6vb-)8NNSsJotiB`xK})Rk`@maR+Fh4D+dD zE-D(Y55D9CH_SSGR8&DbL_TJLE-~T+Ux>T(ni#_igWv3+=!0(=@#y6}yHkYWg#=9e z4Cp*ZN3iqKTr3@xz>AttZ&(ElrAmO-v}4?Ndk9n+bz|OlyNVq&%?LeOIYb3pssp!pKt!nRRX^6wivVmgWC~u1kW|lt`V$P-ts^VtltJ| z{9;~t`=|UrNmt&2@;G$p7`7+x*~?fYo{FUa3Bo0);3!J3i3brLhkLT6sk@<~vI!mnAP0=n(e z1(eSbwCHbfJ_Ai-z0<- z==>n$*`rvsZCS%aaEv5`lA-B-5o}LI{ z@G4yvgIzp(_O%iyZ8-94+~kiwz^`%bvkPcltpb1e$rsgS&;uqAA+4bcHW_wvBtG4? zFx}vTJivkQN(Zc)4SMkmKHdLIp>~50=>Y3q1JTW4Q(vNp)6K_0`uKHTxbSa33%+a? zthErV)td|K&27${phIpxJ_h9j0nw+AK?gRS1CJs>J>U2cwDGC&C1~Rl^r)a0c_4#b z_;pTzH#mV!m4=wg12vVKU*jC;DE}#s#TW>grhqUFloUYGc~%=fhunP`aUt%DuWg_q z3k@F?1MtvgQ58e2Sdjb z4u;+*91N45a4<}N0;$$O{sXxw3)E%l{^^_i^TqY+pizr$ zpozr~t`>fbXjjo*2Mw|W>p~JH{J0)?cCK;KXjLaUN0xu)cnPR0M#t6X?*g=mU=Y8W$iZi-Agj$|7hkM3ew(n&3PPyZZI) zYn+;GV44vHz)KCVW<&viQ}h2qsLe?EAEKGvroKc0l>f0g_ykBBM)og)=;VOjtPS@c z*p%o4FD8L>q2_ISh!##t1p&Y<|hXu;V2M!`_!142NEFFdTo$!EgqIp>10b1#W*Pcy?a^ z@A2^HzUiBMa3}a2itqzI)(82+Pk!dFcTrLF;deg>8VynW%wO-LVh9#=d@-*{gu!u# zA*dzQ3muBnP6V~$3`;=gaNj>8#_%HRBe)fp5DnS+n*i;|fGkJ8|8(^|F@~3Vf7zk? zTA|X2_IEc(-i`rM>cC_{?LUuR-h7Z;(m#-1{_QR*8asVh85q)BtWTEm?#zI0cb3|~ zcz9Ipwn%P4j_7Xpz;i9{t?uYPH-^#wgY6MNB2$eG1cI`g>s-# ztX@%`dtwZZJ3uE4y+~{Vt$lak-}a5)r+BSWyEIt1L>FVXVo2G6E~n#l!_Q$vrts1$s0 zVg~h{N*G?~NrML4LKsTxpen&FQOBL2n}9ZbdST!B|9|U&N>Ptq(UQBcv8h|!paG}X zIjA~714f&^zTidZm;~3c0;0pJpD>Rtl`=H7}CS==yogs-M7H$(&-@bQceBGKX#b-U-v4-8;@kY2y;Rht`!qQA!HvnYFO&rt z7+x!aP6=i#)oG|vQT$(`il*d%FzEVSVTMv3P|34MoPpt(yD*~%)_zI~)Z+R+(3BHq zKP4m^v!AjBJS+$9fFA~3?*eLTfOl&_y58VG1%(%E^aqp+;r;2?hr}3O^!;LI;NJ%7 zPxst{_NS|VfwDPRFNlDYU;NvrsDRes?8pUov~H$>&W7gNaq$!=*Ig*_bp#z}zzxpC zU@2Zu$Mr=(K4_$%#N4CxHX^IFo-C1b+zIN8gF|x@^NXLYpkr1!O8FaVRFu@9w<0G% zZ$(Bc&YI-vug#JUS)PEQ1wF`FE9q3L?v3rBW87ORt$W zF?Iw9?gV=Sd=D`=L#0`IE0jv@1bfHQTM4|%#~TzN-KSqKjxclelG4e+ZIDc^cz?naOyx7YM%^z{_{PDlUsQI^W z5mNpD_0wNCgN_!HX#Oo!DvZb$U>Q!(Ib&EeK|Iv-`jyx_>;4&-nP3e(6T}^cHMk*} z06cOIA77e$162QgLrL7o^+DhK~0|$5#aP$Qs>br0Z#PC90VC5c>r42Z~6opeR}b}30$AVdGv~k+obfao>81nC5VE-?eK96&_Ci&YRqK*tE!!wqp|1yxF*q9Pi!DL?KyN@dcX z0ZrpC&ZhqV4^aim{GjnEl=`Di7^D8^##&x46^519p!Ig(S{~X4V(?8q$RB=SKe$oT zebdMKIH=hJ>dN}?yB`O)dr;dzvnoXxU~`P1@j0ys1_tZnCE^~vy!Q`-+CMMY!3Uy& z?lDM+2M@L)9rX=L|IqOo(D|$IO5&$ScVPj4A81<0qZ?dFbaTGo{|ZX_FFZgyFx$b| z1H5_w9PE%V2UV8^#+P2WHbU}2rM5?}sK#|zT-{>^2Xl9fN&&bShn32pAdNo^sw@~v z)m(Z#{(E#^1DUD_+CyW>z`)Q@2dO5`zmOJUU^wO`%y{s%e8Xo({%wa}ZvYzwT7-aH z;KSqRh)bu3f=6e7KyYXnXg7yP^P2#V&I%6K?uR~|1s6O)3yoiSbiaIY@Fb*H$mG%e z!PUZ7hQDPuXi}`33lo!NQwg? z1?s7R&e8;R%Ro|Z<-q0zgO0=2 zh$+J0>lM#~SM!4|**yoAwSda9fi}AAN0*g?%CdvDxnRitk%E{EzAF+#_8wH06STbr zL-v3a=vv2GL57kn&;~IFk6v5VT6qS?{h)bB$8BtmdqCcD1Rqx8k<8wDphOw8N?*d2 zf7>xf{{2TF-Z7lk0>{vGpZKF;FV{GPG&3}`2l184^-WOeEi$ng{nwL%P_ zOH4dKds0D79{!dl@S-GdE&grJnxLIWY1}7XF!Oj%V#UR(`zIe$CmeJwg z=B&*h&Kk8vlmS_R$%_*p1>vlYTSOT^Qy@q;`<{aw4-YoT0+eMS_a~lvaaE3q!87@Y zXRogmJQpvzU_VxwQ4D-l8Ke}M`V4$vwn1@IZsj_^z9UAtd` zPl~?f(f#oS+c9v~<@f1Lmh$L+0XhdH!_|UEg}()~y#cu@t3Z+=h`1?6D) z#n_2Z3DEfKftMiVAdR3B$Q>>N$_t1^`e$G0!eyX?I&jm3;WE%M9k|R-NTTs)bg}T3 z=5N^r%9;((LI!kg^otuX1sJ#3?nB5xM`_@uE=EX!${%D$c1VE+EZi9nzF+~3&scl( ziXLV8{=d7Y>Bb*2M`yt9JOJ^czkuUDa6;zaf6NiQ&kdeILCVrxna{u2Dh|#@{(_(( ze*XREP_Dr~|6&?cnh6vsn9}7?X=YH=U`j_orCC5l3#POsRGQUs1G6Khw3Ij#1GrZf z<+zQ_qgR%x5}rl(g1rU4*xMtS8J0gSp!xGC#1kh#8zw<_d0!M`VsHfI&%^NinWB>6 z(w(DH;hB6ClI%ULL7S01yU&1Aem7)^0Af96Ti{#5cZpc zA^JB5L&9$khSc923|YSsqY(J>#|>y(``ICI{^0iMO(&Q?q9njk#SMxIl>Ffcl>kKo zYW`4%%b@2EUbqZ;{`d@u6>dn?gM6|5O^A#)ql<;VbV)5J6M{>7P-1$q2PTP;Hx?me z(DOz+LJB=^o$yzb;^>(l;CXwIFD|P0*2l|9Kbw z^(WI@m`@>sm{Wv_p~0G=M$CnOTd~j%un7=_AJbfzKY-S>fvae+J$Hn`sl}TaQZ<82 z1kcNZYG057a0R>_s)z-YbofE_Bxvt1Xsa$*dInUQ6_S6?L-G||x)LhQ2FbtZ(ow=p z44`95OCb5zwy6|*{>7+Y(etmMFf{)n>R0Uf_cFfx%bf?#zmNZMFueH3!SMDU2g9d- z91P$8aWMS($HBn(pM!zzKU)4pG{Qmq@f93H93it93ckr7!6$yb0v-CLxF4K}ok91a zxLCN#K`wN6Y<|G+2rAa?JbFdn{rmRcGxpdWu zo)bKlbneA*xUvmg;JXIk=B^cHV)*9F%HrC6#&JLRxW5f7pwsovLv`8;g5^0t@*6;7 z+)&ALFO&r#{$PddyhEOki9lEfYOjN|f!qUXuG%7`K!ptQe2fx83RK9zyvPj|W`gEI z{{6=x8RP`SiQwzOrwKqD1Fhgdt_S5yNXzfci*krGXp=Q4gMm+^0A(;xyYS45NQf+G z=Q*f;L)UC203Xrs^_B9q{@~Gl*_Yqx7-)dR0n~Lu-OLH8jAC9oXM@wRA|oe*8Y3rz zHX|p40V5}aDI+I?6(c8uJtHTB3nM3kM>o;^tHeFv^y`hUe{~lcE13PO!w4Br@FMrG zRv@H6@rB&K>V-&AzkhW^2pVJf`d9oA+p+bpzCa_58J@%7ov51#DQFIZOYMV6!E+c~ zYB5X-p2I-BqZd6;VHRxtt9+;=!T!}ZUWjk8_pfe1WwH0Kc0pya_pjzaWwH0K>Y%dN z`&S9P82u~Oe0bqca{o#YWE`mdhA97QRLJgMEr#^Du=KAwAu_Q3)vsmf{i_U+f^gP{ z%ZTq^l?oEozsgHT?_Z@IJjubo|Df)F(D6?Ec?ZB(+{dw=JPMj>jbz<>REz;MEDjw_ zIdcYfUv7X$cVK}}_rxd_A9sBwz+m*>4D=;Wd;TY&+bzlt~XyCc?=$i3y4K=9qjz!zyk2fc+kls zpru|6F5ONdpfUJb{vDu+CP(c99y5-)uqZG>EOAj$aNG%68TKOg4cJ)35^d0WVz5_1 z7w|z8ftC}47gZd0QBh&|f6PTi{XfXpATNW=^zud@0j>Xg02)I@l19uwT7%^GJw}&@&sSKl0{!4JYUaBul{z|f6bm@+5CV;LLME8cztECqU~uRtmI0{+4XA^i z)x8Bg_);2n+*yc`k&)4%qgd=^DI@5>V*v(`%F;7Cjgor4p_*mrn1jG?&icoV3ZmW@g1#3P*wap#CX9>rBaq- z&Vr0P^7+7Ag;E**?e0oDnITj5C0sk%AuNzGafZ(Fh~w@tAXhh33o(>{wz}UtAO@NM zevuXcnu7+fKsf(GGw}a^Pz;08Z3*{_Rot6C&PJe zPVmT?N4IBzM{^|yLkYL>C6`XegqN$tk>@19;{~Ak2Kaoo6*FWW?gis!@MfwA{_q27 z$DI`z7>q%53i!DGW6o&|{DRG(0}A*Bn?Z{gJvy5~XGNrSHm?EQAY1Z;k)hK$0XlQn zP%Q?Yi8?gKBixu7#W5GCO72bG7& z^PwL-z-LbXc+n>YT2CR&P@?J3^1pw>_fJqMY5+RL40Jx+yB8cALAN~paIxGDI;pQt z(4)H_RH$`xzL2}k$lwDyVHaLf6@X6E+W{)aUtE0g?|=7=)&u-~pc6Aemjr8o_Wkv$ zW_=0w6=WMHv`+o&SPFiaolggIwa%eay4_9B8Qd zMJ(uyUqrczUFn+bhW-M^=~~;r+{jKphx#~P+)s>pYIlW(dYI5f9q}jPS6$+s9pShhe5RuvZ@TP z|NmctZdYkNz~8zQEDMewQ1wvYxDym4n}l8*N(D{9HUD6*srKl0Q7Hu12xZ_Jp%h#h zlz=WiD+bjFMJ)$P#am963b$M;<#z>b$#HGDRLbhwaPgZ3jSm?>c={EI@OS z0i7W#2D?CYq6>H*QZK9caxn%M@b0@_&{Bim5S0K>xGDHRrcKYknC5{zG2M6slolQ1 zMQ2FO-R{%zq({M-Ch_;)>G=ilb8 z?9zSEk$>_*@Zwd_^4_3*q72{xo`VlKT(}P$e96MU&0Y220~YRsAT33#{2JF@GxLXE z`phpF0y+-kYMLW|-T}|K#h2j2u^uvl4#%1a5eJPm9t2I}fV;>bi3Ua{hJ&v`J?@6bjNr*NuwgGU7(qUF zXF*!Oy7cuo$SCXz3D7v&ss9g29Y+J7;5Cm4Y%;4w8@SU4o{a)c)Pk<`1)m!TQq_Iq z#WM!5S3qOoC|)@S6K8Qe_!8uQ&^Q#xD_da_Y>o$Cf-W_LNz8#susa@n37dZf>1bvE zd7j;I0|%<-vl$>x^yy7!U%^wNzk;QN)3L!ug<<3W5>`k4Z9FQD9Xu*Nz4aU`I7&Di z8|)c2{4W6=*ud`C!Ty>BB*DMUoz0>RbVNsqKE!vdAm>2NSnIy=f`fsH;o@t@4cw?U zfBeq~x?YAyWj7;ucK5I&c%}tDc?1d@@aR~@U$8=c@Z|1kaKx<#9X=11jQ-0A8c_#L z=kf1Hm$ZXO`hym6W6CN(Wtl*S7h>pTg35x@3#Q&De;ARn_#PEdY6aal4=Q~5`%Z#$ zxe`N3d_$cKLrEn6Hha+mV%0yTOacYse&RWrWi z(tYT)Ja|bU=&&uYa4%0oFOM&%>FH>F!iC@IAZS+dBLfpdL!ANxe@hf7{I zZuT2r^0@dK)a-w8^Vk3X{M+35z)o`E-{#H_RsfO%7a;kprK`I1MRk*yE z`U})Rc2RKvZI=Ui-KF~wc)OfW_i3;p9+1@XVhtoY3W381WRx&y5ERr80onJ$7h;nL zILJWKqNp}GywHZI5ZeU`EszRvR242SIMLnW1KqlZGS01>+DJ4!Lckp;DZ|r~8v<@(YjdpQWN6y}W_V zA`CC)909LpE^v&Ck3HN_Da%kQ0IH^0Uj*}j7E{VHlw37F0J>rW)Jyj0mInp05{S?O z5k?@w3Pd=82rm#31R|n9L{g`VN)~AQ_W}k61`Fqq5^W22p%OLzZSL}*dS8tPd=S52 zhl`5hK0gNV?sjEn#~mJ^oo3>o4R;Ex>>!0I`xHQP+B>{JXE|6O_3Xap!|#0b#m5j4 z2GG*t5@Sd}A8SzowR{$N^gSwS)v0D16b{-=K3`xkq5YnuOQ^EZLKP;r>7WhFr6~=& zL9xV88r`rPv_OZUG^k4#lyhBzr7o@W~AjniA>u6 zgBuvrI>CI|LI^@l88hWAGfmr8Lm*hzCT@Jr)w z<00Y)G!-TRI+$7kd~6J~zxwmVE%411r7p*vH9%K_8y`sPbXH00bk;fUYyc8S>vT3b z?rZ^N+8lRwfHGZjCC}aUCgsJiX zsR}@-5-3Gh1zCmL4IWG{QSnIQk2>+0U(g$RjUM=jZuls!LuhbVxJPe}%0Z9DH=q;t zAzjv+4Rt~c{4J`i3=GEqp+l2Cy{_A#gJDcBu0;I*-+iL_hcbT;11qQ#9l}tejH!_I z#cG7Y>nxx#4$uH1e?txHc7{?-kN*cetPj?F+zHCOFBUB1VEBK$`9Et-FaI_-Wsk-q zAP2?AMaLfI-{!i5f1B@a(0TDYK~*lO`wJS*1YN`dz8t!93%LCcA7umGQxD4R{M%f2 zrE#C&*MuxqZKZdK{`5T-ot&b3Fj6F4G(jKI7ou=6Wd2h5JLA>!+t{2ieeV6lZ z^SuaG!+nB(o9m^tPT!UM+k7u0gs!A@`mW~R=6e+(bS-o3& z-b4tUP6G{P?!Uml&Gi&F$gYk2+g#5=1VMJ4;Xc8?-7Satq9gzQ6WZrN{XzciZdqyk zd7t>Bzae)DBR_oRkNXI||Al|QZ+iC)?ej0#>^T^i4}-H^_W_WYE<+|ez-aL z2y=8m<`}r}?=P))V?387vrY!BG#URfnWc48Ot#@Wd{EJemXC_Z8;cF zRT;c6M^k0;LKQ=m#S1|+RW>jF+n}4}@Zz-{s*Nr$ZepnNcySa>mCuXK2vwi?W6A>f zHIBWQkD^KgT7qcQs1%@=PeuojODj;r2a3V-KcMqCUnqfQ4XR}sN`;Lt9dnii9hw5! z!chr1rU*Pd0v&H@sFY&>U1ZeS4boHzIt-#l#o(Bu9Ak-)N4F;jxZ(do;W;D2F=s`_ zhH7Dk5)T*tZO-zbVQp`Y9iY359lw77D+AZ9(U)E%Jp*^#Fw}tNhG1&!o-s0j2HQc~ z9SllXjyWqaf-Z|}KB5r)@{k>Pst)2zsP9nEN4eSktNRq_glOsJpNyq)pvCdJ|NsB* ztcKp63Eo--5`F#;T@-GfPxqZ*kLEW8;C({fHybKs7)pG>SG2D3>~!Ab+3CE?v(x#I zXQ%Ti&rat{o}JFOJUg8qd3HL#0=1^Wtzy9gFTSdQhdzZJcYvE&kh!GOFYGkIBT)s2 zJ&7L8Z#=-aF}mCt@|HbPlCNentd`P!8Oe3JPbaP{obcm(7y(6$JO06617gunp+ zb$|041&?k<&+eNZ-9H;DLKsSdK$E0e9=)Qkmw~2$PQQ5U3Tow-ii6WQ`2J5&I~

    uEi=9s!~fVyzjH%g+7FLlI&j>>s4_3!`xFB)j__RP%5!@Ne_6{>Q&9#QHzzKE{h6?q4|T4>(%DT!lB& zXaSek2_D@y9YNPOqt4e0n1kjYN(jx@@AL&_E$Do`27&o{2T=37@eOEz9%-T;bfMde zLM7NleJQsGWDGw(F8Z)Xrv+#>1T;f00Gj{l+@b>N8iU%qpuuj~9KFqpLeQP5%|Ccb z4N>OkQD*1^p)>RWh#C4s2Jj4h00VRq92CO^jypl~|BjG}D35dh{x|<{DB*5BPzRb* zEifzv%~Q+3r}X(-uYu~VYS6GdsKX332~+~X=1VwVO!5H*6MKy>sFW!Jl{dxUqNfB@ zB7tU4LR3KWCO#@<@M5OdM+I{-gsTr$)HFDP0t|U-2DGhnlfnyiuvL0B()`bMUy zukE;B0<17!p_B)@1Oa@F1{R+(zgXc7@~HuT>vB-2)Tk6`@VA0&2YIxFf7=ul@bK0) zAC=M-kQslW6_5#k;T4eievuW>>Hd~Wl^{omHvHr$H}mKf&AamLe|JmQ4;|2;`61Yh zzZ_)7UmV9&KWGX*&Bd}@p)`RXH2p3K@`?4q640H@$4h;VIg2p9c02+1u`ZAuKPQYFW`f(R{$M$Ed1?;^vULj zOx*{YPq2U%E%3V>Y^V}pKw7&1ir z*ad2iynvQ{p!&i9v1&p3#J~UDA3&=XIH9!_=s3(5NBTjHr(%iuJTqOq0|NKg{LBq-* zBMh+`u@Yp2@{38V3=FSjU@CfjR1AH(;WoVpL0t%e6aZ4kp#jj(4qgbcMFkW9kiuw< z3MhC>oLpP~gH}Q~!&gE)C<3p9@Dl^Agh<9%32{sfRDP90S3<1NfE0Blj*yiPAk)-Z z57e1^bR(OnfwJ^rvL@*2s@4Og`rrogi)4-e|6ePEw92)9tCWJShNwebFA=Bt|Np^v z@}P5JLCM6kJKDgZ;Txj^|F&bE-NhE5`ImUd7~~cyxIG0KOYRk&FAiHj5IS3o;YGqO zP}u?6|1Abth{QfejNygXF2wqQwByclpf!E6pmPDiJRuCLi zanU{jng>4!ns^5-A2_Jd{EN9p?K6KQ>#f<4N%*u`Vho32ikg2h*FFNto`K5lfzm1S zKm!_atUG2S7U4qN-%u$7>W`P$H&hBSlvp-Y3Nn-$^KWYe%_8t`n>dSsfdSNjy}-W> zeCZ2}4VrcUvm1XMSUj7dNYmB$0C*h$Sg07tW04m@TKnLerG=Tbiu$g?1?u!RsgEs1cX7Zue z=e>CTkP&$%AHKWeJVYEmlMk2J_K*>ICLeS`=V{R5pm`5L{S{Z_nf%+QLGw7>Jxw`g zphgK9Gx^{hF;^aeO=fkpXln#jN|;mmAZ6V*UP!~-%;gB0%7;6d872;$%7;t5dI0u3 zXg}LQ&{RHL;v!4}I+YKX*zo}5d-zm7-1iF}fZfREXwe3my+NCdhq|x&0VC36JX~)I zL@)bp@Fp6_hB5GTe9M7So^P(KEG29%{M%2z=6C5n0UEw^0c{&|Wj+JmHU={K#ihGo z+c{bel(KzuW#uU4?Y;q0$-n+)nj`ZakZ$m{F|gvLcfo@{z6_w%8{i#b*Fh$N=6XR} zDchjZpm}?c8E89R(xK9ziF+*49#Cn}%)KN3evpMO{OeD7bYBOr7|^`S$nc3@z!ltO zbpWN)0MPhS#3x67LAM(IZLS>PT``Uw;Avjam>A@U_QS>|oD3EwoD8-moD5DToDA+J zoD4oDoD6{`oD5+m(DoMSJO{*nu5jp1t^mh|3Iztw?wg<%CTMuU6Lcx-FOTk*;I+{F zE#jc%c>LP}6+qWZDmg+H;5aL~b{~YU2LesRm^#f8MP3i&2wo86tbFhRizD|zuqN~+ zL9WIpLFLQ=(8Y`Vd7#VGLBrFavD8T3fa#FZsA3w3Ml8w!tqAh$KKCL4oaTd7__ukh zK^>%uV?~g&I;ksyE`u$NWc@uA)pGE9B$w`UFCKyNvPOxDLqokH1L%euZxjA)7Z1K< zX?Vonda^`O`&@~H^|=yu<8LnA$6o7zR}MoLQOJWk01yuUwnG@JC%Qp96JKn+4_e%K z8eBPpE?DTk4q8?58?=@}fEknoDnL`q;KB>kxE1gg;1}!%wKez!Kz9j28o2`A2B7v_ z0l#2BsI}|Sd?WyrTHsX<*76c`9xOaXfI0*qOTa1OlSlVQ{uUWXVu+M?<=+;l=*Yk8 zF*~SaRdDS-gq#{oW}u~pSD>E&%sO@J3kzEXulTR4Tyn209Q2Yka}>V}h}2S zNLlxd7Zxx#L#jBqlNDg%&?*it!48vvu2zFfyt@hYJ+z90OI*DP@;$tYgZqB(O|Tm| z9WB~GH&*etfHED#jnFk`P&ZD2namBYhT#U+z{GhR!HWao63H+LUQns(fw-vI3nsw_ zS!xH@VF;7phb*;&OGv;RFMt|#3=qe&V6S7{Iq=r8Ab-8cy9V|?E4Yqz=fGLVf)zVn z1J|*jm2r?t5^2-*nHS0sS@6<0EYd7cX+#x^qWkGpu-X2g^od3Hv8#*>jtzD44E!z2 zL6^vaRz#PW@^5pO2Cc}F0WIfp;XdHleZf&XtisjOt)jPyfq{{M-}!$68{M+1N`a$MFMG>pppoW6X@yI*{G6QVf_lF+cw>&PscI|Yl zFa{l#<1XOYeGX+Y+Y5s);9FeWg}@{6{M+2oma!SU;Df3V0gv+YZ*vz;133UR*A8CA zX7b_TvuLCl(yLE4&=LBX1nLDia*LCczxLEoB_!Ni)A!O|Mi{sFCD z1NGWLZ5+rFwqMXCY!V*5ynQhu3@>iZWoLlSyEw+fRzXol30Num@8fpSf%Q+Y_fd`fym|Ts&LFVOJ4mfsy0G~eU*?rxSf9f&M|HoPm zcyu2HEl6?Tclqe6eaw^joe$^`kF!4f&Iew|>Ot4E8A8JJSc?j%BMM&A24WbWe8KgF zox!Kq?GNboqYxE`7r#EUGjzI`*t~ei1sY15qXP0-%Yl+?k8XZYr(XdyENuW9h|qYE z2iY-U>Cp{7yx2!Y!`h%!+mU}83!jB6L#d)8|27vsMhjQQQZdlARlOkdyL3euUM%Hj z0A2qk30*el09rP8k%xi7`WXL|1CU$cwy1zZrF)ACC{&Om1T-!N!{GW5x?kv~NB1xO zZCs#X4|VXc2k3HU$LjX0JSY{dr!vYk}s@O41v4gKo%WD9vuz4H{8lC{1eE4LZPwp)|5#H)z=# zLuo+6?x~>h#!`3KaymQ63OVN*e#r7TP~>;JD|R-62O+n+tEP1}gO&n-*0XmsFJfR| zfUScAjlO};LqpnQy;jjZ$KjSI$f8)NHPJ9qATNRCI+_Z2bN4B zOL0o~dvxvrrwsmWwTEGgi$Du~ZbDZJU52eR0xhrsFRTG2aF9n`__viFPdoUGBMrRh z=OJjF&jIj8Kga^0LuugkKaWA;pfx);V9SI+Yj!|Odq5iiT~B~F1A^A-fY<1_aK8W- zFZ`gDIxgG?(hh?4UjofmK-UsoN#h1ByeS8*#o^!PdJVex1~d@_N&x)ZTyKC@8-W%y z@o#fQU66yc913kwj%JNY0rSN){=7?|HCLeZPCG%XPC$#9Knt0`=lPT__vm(A{+T~g zbZVCv!!b7{#x$4C3Kd8G{Rg#A@N1mn-|m{8*6F6>$iE-7NCz}B!@vK$_6h#&uK8)5 zZYGZW`$4NwPC(b0fY#(_pK#>gel*Qd`v7R!O8IAgK|c-fVwE_EDzvpKFF*)TGyneB%_D_p>9W9mT*V!+xRwU2=95_EF_ zI|`2grQUrekD@#R`9F}2T1z%CsEMFx*Yr(*T4;z7taoXYI|?6 z0BAP<#nnTQu9bpEH#cYr&x;gk&>cxNDxjOSk#9XisSk);;`!Cd^ z`wjS*$ZpVGrZ-%=K`U{<%RbaVBd;Y2j^7STlt?vK<}j6r9CyqC1tDan1AOCG>|yW< z9)3aB3m%=WANU1bA9T9@Nb7X{)8YEh!cnBefq$E4TFc2&Hb)Dm^b&Q)hN@HsNB(U= z=_OpC^7WYOH)N?|DBhbvmc$iVQL<(TVl2FGuQ6-qc7d@nK{ zbG-rDa&y|FH}rzz4t?kXBBpPk6a#8OHXlJ8%K%y*1X~+);4k6zLvzs7fa3$&{=mBa zCc7Cl?|S-0vJ$8bfpz_j2Ymfa+(LHj>u*%CufO5LSbqb~ub}mFn;1cBZg>~6GgvvN zlt{Q5ALwvS*#%ma03SHt@E4r6!1DyK_LNUIIqPBAn$g$8=zx~NfY!t4f*7FnFnXZj z`7;pnL6Z?4y}Zwx#27qwoQ2x$`Tc>%!B4{!_jb3!Lh?r`|vSG zZSX-KKHZ`lm&!93AMkCxRAQ1g!PAnj26!&tC`exa6v*1Leu2)14-&j4v7znGEu>wn7u@O}-|rSc3fBEXrq zl+~m8h{j=$Ze9+M;N~>&IxUb8)F?0oGS8!z_u~?Ih8G2izy7x#C=u}J<-NN^9yBGR z@p2C61PLTf9-SpB;PcNFJi32EmUXX;1zm#b&+@_mte?LHd=fh7Ze7s0t%dPhk8Xc~ z7r_aj#T&deAdA$~Kfn^#6iKH}@{kVHO^Z2SFNNcqaV%4=UUg|Fc8;O5ck(7+&*ubn~8DEYI*_Cdi;( zf0h>k383)dZ`Jt^%9+rMN5T6y96%Sw9RV$C0_QJKAc6Oz8+ax|j|_BeJy5Uc(aSrf zQH_1SmzvPh*Xeo?G_c>7CB?4UhzSso0PuLvP zcZsl;DAfbqwynUwjnRU=RLQ6Nut)dx7xxrI7+(AY-Fyyihl2;>LH7t7#2*H290!fa zo&)tJkR)DmF(6M+gU)Ah1)cZdq5|4<#P9;NZomU^$0I08q30VzhvF4HlYjVje*|AX z{L-WGKPY0#lwTAxF)%>Z6M6LVrZtE$bYFj=-w*Zo%lV+y2%xqSD7+jX`&ASFf)*9r z@Mt|y%Jag6i2)KsuZzH0qf-MsIC=fWZ+XyUw~I=GM{h4E`oLog9-Ymgxb55x67lKW z42tv@g>j&GWz||F&j3jPoijjr?lrqdr>rbUuv3n@i3`Tze#eh^qc2S`5$c%zj; z^kGoa6od4#z!#^2vn`weg&*4e7NFA9_>xESL6#TiVt@TNe(TX&EZ||8%~2xd(arb5 zDif6Xyg5Lr%HYMB7?73O93I`g4;RQYyyyY>s=HbNbPrk>zdVD7bu~C=W=nWh9xRN;yiWUpdL;^hdD#X8h9rFwM{2z~Q zUdaXW3@@J~Le2z)uP=126JvNeZw6#l1U&c<=K(2$Nmi2DGY)-W=hfv)#PJ)gbe7dt3L!tM|7=oLK%G7WkkU=}xI zl@fHecr^#gl2uTAbHK|N1<=(Kpn^EyPMK+XYc}`NG_ zapwZisUt6p@;DekB}1n>2k0J9E6_B79w%s;`y`0Z4&uvkf`(ww_o^X68+@LW#tx91 zz?TpDf)5%2r$o?=f<};=SHQ=PfQFO|7#WVas2DSV*rp5&pt%c^7qfnW#tGO<3_W^z z{nEr3Ufk>gZ%+hOb&lY>Jh(vya5q#4Fo16EaOv<61|5K30=ei}<1naNd>O(CDfK+N z4>&geWUS-k-zMPr|D@;t11}>v7#K=Hd{<+T&t7_hFWKeosu5#&ncIaD+mQ9c5}_W= zZxHtpz67nV;qO}kTJ{e)>Kznc1)!;Y(0w3M(?NZOUQjU!@;K^!glCsP7nAf|1kJ#J za>9T9mW3epwh$GC=2wg*r63}@`4=O9D|i$9HXjwm=9lax`pqwmN@T20m6mk`GkSEN z2dzF-_UOLc;mq{n8V3Wz>o||@v&WnT7+yqxcmcqW9uOHnaq4Jecr`fx*N2V3FjD%h}N6!1rhyI=5ca|hkr zrCbsUIzQANe1AIY>Q&$VJ9SU#*bxqzOSwNTDAzyaXYIe$sF!LJIvT?mUDP^f*uWBu+3w3UuBi zJ9M1f1}Y4?UQMZ_*73qi(83MySq@--$-v|tH}E-vkJN{o$cT{QMLTNv**-{UFhLF@ zW%EExKb=NMfet8!xns*dMuy#>qj_D854d!n_UOKr=ECgH0!oFRd!UnQj36P9Ss+nk zm?#rSlmqG=S(qp@NR$gI$_^7{0g3WJML+IlWJqI<=X2b^3R=to6}`Qik->2XXkoKw zub+ai^$(Bk>%RO>INKyIUx|q@q)kW)n!fH0Y+y!p35X46m;%^8Fg zdb-|-kU~$_(-2bV>AD&rg`BQapu#M!7Je$Qdl+D8$9)gB#Ks9qR(EzHCpKHue-N~E0xT4J zgFhTJ6wG@CD)X5?_5sL1(3w2Y6M!UycfDCn^Bckn`;R;F`S&qrL53ISk~tV0cY@9{@#u60-(6&|$r98EIrEix`L{ViI$bWkEDbwA200#lz~tCa$;80#df_GCZbtB^3_?G=e-K?P z#_+PP2d#OB=pR^vCDU?l3Wi7wdXq{R5t2X#Ze#FNzjK|G;P=sDA(oFW7x} zH+O+rB#_Q<$U9JH_y?$qRpQYp0U87AbS`*N%Lg8pP2}J1t&-O1&&9vpTdDEoT>%D$ z60PQ!OeHd)$wa>9pRA>zy>!Qm#28+KE@rw1VhDKjiY^5)KpQH0iXg*$fByaZ4<1+t zl>m@Q#+MdiHN-vK)II7+ViivKSwD&Fi@1KWJgM z^#MnI{{tOPyr519WPc*KnF~syjypg%QG$*^bWu@YW(IYEojYArygOV}{P_hz+bacK zRE%Hz*a14Svy#W7m)EvPjN!$PI&cF&0yH284lhu98l1=sKuvAXEUIRSio%Nn8^8VM z-{zdlAAX?Iy?|fPS%+WH*@j=x*@s`yIfj3mb55tbOGC9d_$Wniw+A%x58g!s8rAnK z5@RTl;ot5o!>@4-G>Z?}wGLX_7kA+W^J>u6SwV&pd5{WlR|#}gA^eEn5BwU}Uff#+ zQY67pV!*%6TdLtFW3k-^#tvtxmIEa`{M&-1K}p#QY>*UV8C=9-HKf>Z0OgVr6%Wvw zECr9|BL?w@9jwlEALMsG*5NE=!&tWCn6otF>ureG0QaXVK(nf#-cCujG3dO27aX9V z?{ra#0)?qnr;ADwC_9y(3uZ=; z7O!J2DppLOzL)I_xwrrSgU2N*K!?N$*oZKAG#{yW8D0xd<38Pv1&;jN90VX+Ed;tR zHlJc~Y^dO4;CH#$eW>{alVd{#KLfwZAy90B-5&vQKR-iBKL0kzDg=;w6`+&E{NV>W zTvSwy4}hGg1aTrL<+y@&@%n<24#=?z%q$=$DuZ0C3L;EjY}^J;M#3Jwym|#<3@DaMU#+=!(cpc{!c)u!$A2@0_150k4_&Ijxf-!6387w-H`>Zpd(U4R2)D@b%K(X zqigrCW6t7?{M&-_yAL%#;P`fkr9`atKnaiIe$cvj$A%L;uSFaiPO!Y@0PVzcY&gN; zxF0n815$0^Vi7D_%I#tiELO_uYIOTGi!1-OoBZ3n3mm&&@o%dZap`{O(*4r0`H6#L z<5N)4>0ps9Tp|oQ>XUshsO*0&2)^I-H5W*TV=u@`7p|j@-Je`rZkGtP9w=c4FKm4+ z0A4iwnz!{p2`9KXaBMhX;M)D^+o1y`QjQHL4tzUkP{Qp9k=khZn#~cc!Lj=i=)_)b z@QNeHhLe1+UIa)ajt9UD%vz2*a*@yiJ=EF2q7GC6kta&3K5BI(-twuBoR0w)i= z<^+4$vEifx|2FT!=7;>CLfjNooU1m!WGNAC{>f1S4ghUO@aiSU&HS$w93i%DW`8Z} z2(fT8^J^|guwAbF+ip4bvg99g&il{&!llDG-=)L5z@;O)5ER)Sy*%qcqi6w+y)1sr zCwfJ?dRfAmFYNgLpMk-#muC|5DeDvb?k7Ow%oZIUHV0pFba>c;7U6VzeJ zSpOKyeNqMBqZ?oObU%EtGa9t7=!H*jZJzM~2c!R>%SZ#Ie_n8FbytHWovNhW}E<(iSe7Iwhhlhg|r#9rx_M;@N%Hk$>vJ z7e6*IGC2G@4mRuG;fCKFMLQk;9rOHu+_B*wOVPrHT5*PwNEiNXVa$&F+t6->gI)lq z0J;DUek&XY|F#p3-wwfUh4bt_3%V7K3H4Su&+aQP_%<;z7~Qsr6)tgd;os)R0b2jN z&5hl&`wIA+8qe;tpmicI*w=wu(0*K?E77*OaiYsVU(3j_nW>>xgrUR@WDbuD|F*;Y z+uXR(74BOLF^KOUNSYU<3~JF8kVT%|XJ5=-%gFHWa6_#q1NincKLL;;{%vmj=w=l` z6^b#GD1s~%f+`e5SLnGG)Wr5cSy#$@5DSCZ}mVma;v9kS`OYPGoYTBnu1guY&x^#nXcX=^&BO}9W3vlXn1)b)5=0!6|L=BvXJ-g4mC;@RH zoBdsl4}e6HKq9PQgZa0)iSlm?69ezH0Zq~;@NaVyf$+Au34<98wLA>`En$odpfgKM zzq*MsbRW`oE%C`b0a~-z8Cv4Q>{|i8%dOM5g1-f{Fp7VhpMv8KP^rMb%}w63`^sm2 z0bdQsGMj_2gZ22g`6f9Ijx4EgNfrD8E>=p2WCGhDuC-}Fy zDTCG~P0SEuNaH>@qxBMh^hro@06Df592!$WS1&+Da6j`$p8L!ndF(TP#QD$s5ywCC zBkj#_QBint9PB?S#xhn{rJLq(&vcBe?~< zP{^a#R|hf%j)f7wzUa*1KphLl#4!mIRa2Dg=<^j~2IOp+ibK>oA&gb9e#Mj|mz`xCjzr(qZf18s)hqDy_HYdRjXKDUz zULa?RyYg>y6ye_%BnsLdA`IFvB!vG+f^uKjkpyoUKy%;VE$Qc8G<^E^A9PRrXMO?M zGwz_M7vMdU2wIeO8Jr}yJ1c?qFoMo+0;QI1&cdJh<4!?uJp=8I=HGU)*9mk_DZk4p z&}sW%)q>tCpZNuNm#2aZjJxrfKMr)lr?&=ZP+W|mgt_4$Q-^mBX!a%H8|buq=RC)q zEDQ_`Y5ejo3=Bpm!7YNzj~rVBN|^sS=l(m`@ROtHmFNEhp3N^AOYie<^UmYnc2MPm z&4*IHhKKy1_F98;?w=0tJkTkf1)kl}0-oK)63`poQPWp~@okUpkKMl!^*8cumsc=ZjNwI10jM7yqf!7e0WOPZ0Kvx( zgj2*AUfMxA5eR9-_`&C7F@~3Z_25nhl01C;;Iyk4!;8FH*!aPbWa#)oG@@?>(uNp6 zDC$QaKlr)Jk%55$5?CVlK<)-lrgMWDeUPsGVWd6W7LGeWN4kQ}6FKgpVgX_wb5XHj zcu~0$9Gc9>m>E5KMWaCu=|2DB@;k^t!FhyfFZth~+`R&FA2@wL*B62InE!gAwdmV_ z{_q1E82JUAL0FJq&{>gR(Af}d&~f(y(4hp-3k_g58Gu(3gN!=^3LkKv%z~jLzy&mF z1nM*yfaeWC9X?}_m=VM);EpV4Fo_i;WAdWl9%wj=wM5XPmsiD0jN!%lJn%q*2BiO| z0q*~SR(DT_iJv(GvWtHk$G4lHiwy)0p8<7su=nr4a*!cjEOY#c9^8q(}x<7#~ z$@}9E%5)zboBwn1_sjxaC}hpd-#QVzMBAAWbbtV8o(;61dIo5cQnN%Q0bH@W@N2rL zIJod@`luKi-71D)mY+Xx@O_?ZZ=-fg8f!plKs!{ua<$cE{=wAmF6O$3b-0&gjb1!NT z!aS%~=_NsBKvNqm{4LK)z6q9U%psw}bCx zezO?jXJ*im=-^vL;Zhe7QfRmSZAZwkBROutVo<~1nZ@`ms7<$s6;uHU*#2@8WBBaC zFTffb4`J{=aT8;(X($D4Xg>Q|wfR5;`22bWevSK%{2CV=`87_0tH0<2FYI3Z`~TU6 zUk9{r78*&f7l18cCC-4qFQEoFg2u|g5wi+n02^@z>_Hg71a(0s!~k}ih7uKgj&B5M z<=1)P!oU5j;|6A^ZtVq-0OtT-Zp**_DB7v(AUA@yNi#tea)OUtKZ~{n`^kKyX+K8r zv>)hJ!Q(Hue+x6X@N4*}7`X6jxTrXQR!s+h8-t)_=AcXm8m$3m!rmAaP<3s9II1Bo z{xH8hLs0=ILwNxwLrnoELt_CaLt6nSLw5lu!-N7(hN%URc^7bDdj{#et;=y@3@`Ia z(d#RCeYY7TUsr)H4=S(0>t%l1i7~vGR|c!kTH>JfS$7$V7Et*E8UF^=YylqKKS7uH zg0IgC>|z9+W1|RKiev>kPova?f4h%Lz>5skSO*^dZtpdn$yBDCNyg+N{APoU+FAj#+Ar+a;KUiyg!RG)Lz>eVxQGwi6 z0vf6-bZq#^SgO-CQ8a%f& zM+Fq57(otBlHl|Ks)PkVF((09M56#c(A@wuW9HF)3p5;{;L-h(Km6N^{WHJ)KjzNK z;M42Q!ykUY_yB0(6Uer+D65|Y-4pl)K@$Y+pg}`^LGWTWenIH+wsug(-q{Z7_3;a~ zgEuM&wuAO4@C&wsR=n^Fwu4S{;}>iPySlR-bovy(U_0oXD}KRt&@DLpg6$Td?y+FI z2ZV|Mtp)0A&j2l4*~Je^5}?DadG$e|Bb5dkmVOD@X2sKbphN^z+U|)I11;nF?7^=E znv?v%zb!Nbbhh=2Xg&spFMJ{MLtMw3pD-|hF4bdz?NIS$gA_Xt3I{Yju5`=IDj6#_@szGyLq7nOzV;1eCeOH<*~xZO1>5ujoRJTc)29|Z*E zcgPwl$5J)d?t>oP7hcQ|0;gNhI%3^uXtp;=1se)lN$kaOupHWj5bfUdUz zwI2&W@e7VbNB(U$U^znplv&z4TvSv+gZ|0}5}=%703slH#uap47(|M}aR=yxt79%I zO3a`(qrwXYh`XdbdU>Ztf$q0S0cCi|?O>oDb^PIucur8gf-D41g$TkSILtB3qwx(m z?zE4ugGcuV(C$i*0*~fu35F65P}o1_ zW?=B_hWBP1Kusx7+JR(Z&~7!*9ZH~v)ei>HAwhdoz^P7iiwZaqYVH9aE#$(l*#h2o z_~I}RDA4&^lvp7nV8!8L432vk9KbwV(I`k=&1w@Y#=zg5@t%2+@L0(FD7>G@c9gOu^Nyaa8NIPj7kv~?fcR=Wn86*HL) zu13L1;cX%4QlIlL#86~G%^}cI3P@As{EHv6koAIEL@e+HKj&ZELXib6`d~(q-Gd?v zTK9oiAa(x5JdkWR)KM&+2Va8L?!c^VM3!XpJou6i$=noVNmkE;FF}hoU^?BACD}a> zz7#{!sf8@b<9YBUXkiCTCoi%jx97o^0!TVP%ml3+fx4E%^WaM%B+1J&L3w>LC@MU= zFL`!@jtS*xe8j-Pz@WnD!oTf+BmcGoJS-lqm-x4x@a(<>8W3-M1Ul{+F)R*|1j#ry zJ_404{M#;ifL0nF;$iY_1?>U{U&IbNbF}-~i;p0;@^9}3l|+u9YoxW$fRPx4ACTcku_*+C785p{qc_3A?2V}IEe}D5k@a)|+4@PeRkM8q6 z-QEJQ0by`kc7O9HP`9>01CRO7=ToRMtu!nqrRW{BhQ0W zf(Ic@KJ$YV3%aOSykMHm$iTn9`31-a;HeCdr5@eaVD`dhoA)=rL9rUN+X7_Z_Zwi# zBMyKqcjS*e@R>gXv|0tLD;)VFPk?m6oDp&0Geis6EoHM989*oc@C*0~@C!DBt2O~w z1%AP9P!Yv1;A_Ay*bJ`X1Y8~X1-n7j+$Vkk-vEBWW>8)CiC?fARN1|*0F@J^W{%DO zS!;3{sudVZ(;BK38A=lxs+E{aqZ+D}8H++1s#O?E{E!P0(89CVCSYA=U|j}aU0PsW zDqvl5AYG`%PXTyB6jJ;k7p;&Y^~FMVa0%J^_ZMiu$Aw=5QgZTZK#Ed+4M@=nI-U{~ zouKA5sOSal;sh1Npk_A6_a2Q$K!v|!9O$gp-YMXMA5{2#Vg&7ke!Uz~SAbaH{Q?T0 zS#ghE(f!~Z>Ni2-S|MT#FC20~^$&ENcQ9ld21Gq*Sp)xePo)>NY@o(Mi7I$ik0?Jk zsA%S05iG{=f;ktm^$M!}3S?&<%HAlD{owW!bpKrexCI)z0nq?;-EhoxV=L$+azWPv z9pJ5X7eL$VUR>p305v~6dLgPold1fIt{XhMPp2Js-Pp&#kEVVps(Mhx3sryIbz?g- z2SbPJR&+gu;Lt$Swcus99?fqmz|IU&Q9!uUMFm{(Zw6KL=&fWekTK0iDxm8LAm>Gu zsDRgpK-b5A0<{5ezDT(F?|;jIQUP#}05pICT}=ckDqKLdUUxUBAJxtIqAU|sZG*ZH zoot{6L5Ye5sDTUGVu~^wj?`X(T6GJ$AJU`sQVDyv&qZ#b#-p!2xNV!2t4drI-TWS`@3{HhrISo>kJ0n2^#{{C70Ie z9EPGRAg$9`fPXv0yw{R0oz4Ls{JS0s7V~-V@A@d{!N2RJ7}PNkt2jYI!XP33{ow-q z`<(?qtMr-!#Te2$gGKoF`-4W^1Niql3#D~>i*@>_WPlD>2OS8U0BWd2bh@ZSyg0)K zZqSHY1d1_$M8RqjUTkFpH8h+#c7l#u>kd%~@a#UI%D}+E;J6F4sMq8B4Oi)tj*SmN zbAgV`7p*VWv22>%IiY7%+R64w<<6&U%NPf}l`@i|8eVIw~Z;qOI-IqOj zc};ym?eTJU$eu4yQ44YeXu1p3yYgr}0&=?}=j(n*hI{n*zU}n?Z-01HZfj1ERkS^^fBY&`>#OjpXWF$cSvE;7)~w z>RXaTj7P;b2T=;nNB@%uk~OA;vjA>$jM zJ!9{zI2b&-gC#t=e|R(=f^2>`RK(}e&Ao~7#Y0f*8TB#+F=uu-34#uWKEXc);!m)D5dCpb;icdRI=u^Y z_MY+W3E)w&voBiz{{P>4pn?l@(h#GI^|2Bj&}acy%>z(z^&eUQ=YVe5ECFwc2Mx`D zLl|m4qWu2l3ED#W5mW(opEthrV)i>>&@Q@T?9c%?s97b@rJ*mm3sL4I`1MXzNtB9x z=8ri9%4_-ui`YK%3&f~s@M|1C{Fy)I;Aj4ri~QjyKl8^O`ph4H;xoShtB#i_!)N~3 zgP-{Yd{i_(^T(Wq%;HBJ2F(Y=sBnOWA_PD~5fY(}ph0u+?sib^>f8N+f7>t6xP$8k zNQ?5A>&9kKE!yGw!K3@;J`H8iZY9jmtS|8Qn=yj6V*N*KPxko! z$hG@8c!zT9r4mKQ?&F}G;L*#|&``s>nY)ywyM%X(C*l7l? zeIeC8sFs0N#XehSoJ?&akHxgB(WF_JN$nh$CW_SQo>#2_JXAb^eo z_2}jO?J36ay1;P8#xkI!?H=_P9@H?RlTh+Uq`@wfB8GYoDjN zbk@Evnbq4))`&yBQ=H7>>Da;&}nOguL}YC7(mf|58PdUf$Cn^943A zz7_+C@O$*~N_v6@?=HWPECvn8z$QPTcZOFRcy>PqO}T?xDd40ECio%4OpN@3jspCG zjtcyOjt2aKjt=~Sjsg6FjtTsNjs^UJji7<1jz&=HqO%b+SpjLRz}8QJa!~@mCg`eG zjYFX6691!p2V z!?zpKmzp1?cy#l>0A0q3Py`P+h;tD8D~&IK&JQ@702y$Gowd977osQz>i{_&vR@Wl zDK@`xFuv{B{Q*4N^>ROGPqsy52xL>b=l^4l%|96Vd$uqzF#JE)`i;MD6?iD7MkT>< zKj^+@et8B*>+dez=lH`9bf0$R_djoZz)|~Sr;7@BNJ@c!$|2A)edZU(e*XXOnfwz} z2`c$?9|zqwG~Eg_1)4ZOq`-mVoLDH!%iKt4u(5)hkg@Ywh4e zcK+~_+|Y&^_!yz+125+O{Qn=6Nx-_mZ8XPD2Nix$Bh8r+vyqkuRqoMzm?_P%(?QLn z`;^1CV-6+q{M(p4dp$TDI~;iVw>dL9b~y0CT<6%~!0*uVt&$gX?!iUJP6ru}=EE$Y zV^%Hpf||RI`$0`y{$0;FitD<$L2YV%H!%jsP7i@@CQvjMfE&Ud-*52mKj+{_&9r=CU zr*-Cwfh-4Q69b=aP(z?QM!N5>mdmn z@$Y)Z1L^2F6tnXSF!Kw#n|L%I@qo6XkzGTJsOa5-Ama8|RjmcevY;#nIA%g}=oX+zJR}0oD0; zKZ3OSOMsSD27(Bs=AVrGtx}+hf4jS6TBoxf|8{rjv`%LO{_XCvFaLsuh9D9ePzf!N z1n53bkpE&-kQ{cHf4{pVXn+c`&dAw>f4{pld^?n&w*~)xcUdHP8~*+7@*w#QjQpTI zRD#|PXkLYRqNK*7HxTRr8IT9IyUV0?I)fYp>PCVbqyTad|9*E3B;!HWYk`c18V<5v z2T2}ey&jUh1OIk+C1?nME-VFwfLdCovk}-)Am4)00yu1O#$UruP;-~T19UO)570PB z3wYjVTM(m5_aVpT2kZ@Y%#iB{n*WQGn08(uOSc9wm60R4gzyJU5+Ipb$3cr9GlXEZ20p1nH^F5Ym9ff3T$S0d#Sn?&B|R-vQMrF)9Y2f*;tN@E$^9?5~6?}D+P0W>WJo!9_Xq6MI`6||q-D*`lDf@43!-&9EN zst(_Jmmi=6-;KqD7yF>vajkb*cY@UQF7WwlVMj5BmwjPq(@#k2wH!d_MMR>@gXX)y z^V`x2Vhk_#g+rPfy}U;ppc7rI!%?(=X0o2Iv6A&%45@P^wJOCyBr=^Ubb=RVaAVJVtaFF1IQc%jkcNzqwe+$`95*F?VI_MOX z%zQzc>u-2;zXJKAN*mN?{=mPD*@nG@qvZg9YZDu2Te34FXmSiRF$+4V5p?HwLjTwVng$T}8R z{_W>pYk;RjG;V@cgt&kjAPW2%*Z4I+D}O<&d|wnFhpt2c58Z)F0);y8QWhrAN))2Z z(1)3USj}>$7HkGH(Pq3p26czy2H1j@84xpAY#K_m3HV|yNH@O@=upNFASWZ%wFE;9 zVFeA3gF?{4l@)RzH_}1b=QE)PWxLF#WHHx?2GCT{Hg8tYlpyLlE!ldgl;Z|QN7VIE zOb97%(AqDLZum;4=XG#hpt(YJ@Sw!G7Z;$yY%UhQY|uqx4G$R+eqIk#;JASgburge zgbZi~5fsvpDYGhb{7j@cEo;o#6=H0 zFa?eq*ioJMsTSgC&>`QBs4Ks&Bc%8thbX{FOIpncKN`ULzy?(Rb#jIIv++njm$w|VnIma-q5 z0dM9+9)02Y7S!f*=Hu76!@td&A7ndtcS#7y0Z zf5&~GAsVnH0iems0GG}Z6%Ftv6`$^Nkbx{{9*O~%ao)m?dqAZ;|2AhKpYC&@_38gD z#TZ<>kAU3g(S1FQ`ykj1hzqwli-LBYfNzXG!N1K}gd0SPeZL7AR}*wmi2!$~wt0hh zr+_c*JLu7U4zYVC1QbAEryc-EKm^gg03F{3Spvqf0kwV6D=KCVx^mdL08~r=IsjU$=B@O?5n?;! z;4y{h!{94cK~rAQpcQTmkR~Lky#ZN@1!`|3fEMW(fAi?R30?Xk2yG#DbG|V01J(W? z8tfTL>_I0JSb;{33tqfd236-TJi6T_K%3k7J-W|&XrJ(C{0X|Du1ElS#r%sD&|GdO z=sZBs;6-;gC_+J3IQE%qzGO~aQcNe=*zzu;X7$hy*(T5)2uTj0wu$pp%4sx=)qzf~WLvv4Arg?%wle^yvQJW9=)z-|`Jq4>mkxgf&%9yf|74S}FuOPleGD zbbkuG(q99YV1iue0hgHsmtl51_!7C9QvsLZbUgS{7^xu^2bbY;Jou6mNyY^(1G?OV z4@pJ~E(5yVgbhhX03^e|&6^pto*%q)4BYJgSpxG5H{_}jxRdY0WkC0#@FN*@6fVO7 zxrGF-XEj^~bfXEV`2uUrO@zyUt~3!uGOZjg1G>|M14$+pE(5yMLlC0L-%$Nak8+2id3%~OzNc_G4 z#YZ=2bB3#c3;%X+R>ysyWq@g}+ULN_ut4jtzyViK2x|Up_hxqlufIA6s<*+bv(CK; zg-UTkj0A0faDobPJ8l52yt)Z(5NJb%c@g~&38)Z1WX%;!C1W9|2?$z+2HGUjVh&n( z<;&9TENgv`zeN+WahEs8P>ezQAZ#6$W{C>;o~~tjVhqP!R5U=%6limV(H9iX{QI5N zL6@9?_S5Zm)&>t`f%aQMH{F7lU-9pE*5r>q@cjm4y%SW*1lFQJUYT_a-XO8?>GtJ# zkyi>@ljW=kIcOKu%=x1Unk2doa}2_6Rk+>Y6R!1ak&9W3B(=GN*Ecs zon`q!*LQWgvVba%43BPb%~%57u@(SZmg2&{jR|~LIX`IbqEx_>h0Jc^sevcWi?H{ck-`q7Q4A*f4=hZ+VYiQAdyyx=+8@xg9z<^Wy)OfB!)hb@X9y zt1TfKdA=CjUV;Xs2k7Ga$^!nr)8HwyPEZHCoAbqg7g(c$zhxu1ITJ3?>&4jNFVXPp zM47}fcL@fVJ4(Rr;BV;yDGNUUs)-ap1h~e8Op}23e?rxRA{EwjdKn1vQiW6V4~J6q zwB{NW1;)}F4K*rCoTV2nTvU`xPlMVr3efh@YEXM zeY#udh0<2YsX?eaCBflu;L+^}njQyDaVmIp-vW)!9M=+M=;i>eZ$J2%Kkmb4{z%gk zT4D?@erJCB&#!R}+L8eeFhQF$9^I#*r*Kw$xn5zq=Z&_WcDVc->Rji51T(7I8$Wgw}57p4#sODiCI zY8Bi0!PbHe*})E3j-xCA5>tn`7{t`_=spcT)dSREV+V=of(QdpqmAR3i;9lPF&7nm z(-$`az|Jj|hG+#F3JS;xUeGLF08P*Z(EAlgcYi6=3Qw?OLE)s>&J3{*Cghw-&EdEK)M!F(w()^wf;qsACJro(CT>vk2&2&i zZc3pwnmExKO`!Pj=yvAt=!CSIba1trtTG_2COynnlRQ+)0MTmVfeIO+wwk`CLkuxN zw3;44h0IV}O{dct8M<8=Agvxy3&cwU+yViOShM!2iZMXjO7Ip5xM6gTf4{RFsD;D7 zA9CmbWN|mN?E|_6=K%kHX9Y;J1Vs+>oD%TD5O~AL1KcnQ%>g%zBtQ;&sUXGxwMqum z2!a@g)P{jr7Y$iq&cEMT>N9`Df$uk9E`~I&Ak9g*H8`DtWG=)hr?MFt__upocywO} ztsQMW2^#A!RDlf3#j1#c+;$PtPCEfwbP74M;{g9u&@evafDp)$9iV0T$3dRG@R>j2 z9B2&;AkT02wt_gEf4{R>>q$`CnLiK79uahVNVEjhKL@q< z3P6`}gGw*RK@8avp54U?p54_NuKXI#7eMQG5%3@`54z}j0WYS8x9X&V$R;QCB~f4hrHz|K0*8uad4X)e|$OKo8sjXAN@yIZJf+!{wzx@}T&G z>4eZA_k!Eg(ad5DFaBA<{P#u$8o#emgA6==0~)!54*EHUI6~GuHopn*=zay-{MLQe zqgV8diWq|<|Ms7b-8Wuz>;=Uye+y_tt{ZZJp9}x?^Df;-(?sGUyZ~$MnQ7YT~o4r&55`We|O1XAqf@9!A3CjjX(A9pR zm4E?=QQl$)P=1Sdi~}EshS8q_tq%b;^+C5VAZ;#gnFU%C_XBjf1!IsWeK&UNkHN_2Ei{APsluwu2X03!vQvM00JO6Q#gxOK)N0_-Js)%}j7Rffxfi+I91I@T z;LC9gieu7R-JCt7{>5C%13J~URIvG^K=;AJy-xp|e=wFaLwJzV96BEW&W66-7aW^^a+P{H zHdqLN&%BwS2rknNqF-)PXJ>Hic3|@8KHceT;n?lK*6D2XVu2?(^$DgOZw7}YWIn(E z+SxORKJ3`*_|Ntq0|P_3hb#X!3CHH&%%yCg(d^d(j?KRr$;yYPH-E<(nG1l6n5)R^MMo}>mNm){M+IsAdTi@?h=gP z^y<=40vbO%|DwT-fuSQ_;y`W%ZC>8hU_SJaNJRel~m2!b*)Xu(0UHI>R>$gfNsKz?f3qsNtL58jZKv^~7 z;5&Kbt3p6m5E_71{)2~DA?;mI+62{grDFWsoK;#5l(5*?mvU{g2PHEu2UtOyU=6M@ zJVnG9UW6F4Ga!}nwX%p(-cuG<%FnlEV0fWr%nmK|6>PxzD`mwPUWgd8Gk6?#<^Uz~ zW6hvM&yaT9*#vwYBfRl@23j5{fLdWr&Y)T1Qq^APpUpqm%0)eTMdjU~>vb4*LD%bm zTcJpe=n3C;VgbI*BQJMH%?RZ_faCrWE+YK}P~z;E%ra+61K04O9`kSf8ln1#1Fv zK_-9>((C>Q(s&7^F+@cHy8IJ#6D_#Q8GYcztA+o-ORzzk-VTGtvn_m*FZm|l@a`1} z_UL5^N^{Zfag<|ZV5qPK34yEw?OaB4CrAk7&OLiT*5Ps|Xp;>{Bh;NBF3g>e|AI8) zai{?E)%p`CCAx zh)=f<==!+Rj{MsK1zvzwyL37$ICeV=n8dn8xUPH z!_to7xNF00D+h+-t}UuIP7KFgJIZWb7>>L4oVRmhIPN+@-@$|7xa*W@j$RDMU1zX4 z`!F1Lom1!H$8g+r!9UjkhU2bF+T4Q}j=Qc9_Y7e;?z(29R~W-_*9{>)5e&y&xBT~w zVmR))W2=7*!*SO=#es1Q$6XKD1Sc>YcRj)%n#6G2^~CG26o%ujXD&yiF&uZja3m^& z;kfISgE3hQ$6arnjLTs-?t15LLLS3$*9U)+3K)*NK2b|8VmR*lA}+mz;kfIYg_&gx z$6Y^s%&uTK?)t?quZrQg>yI4;H4MjH{}>e4F&uYg*jC!WaNL!}tD=eFxGTq-suqUh zt~_&V+Zc|!3dA;aFdTOk(QWQxIPNOJ)7Haq+*RgJM<2s+SA{>_6Bv%Ws_^trVmR)q zp*Lv?!*N%gq^Z*wj=LHxpD}~sxU0$k*|QjqyIN$a%p?GKS->0i9b{FdTOcY2LYt;kawWs?w@aXyuhU2a!bMEY7IPO|e_;3%y zao3u}XZskAw}Ki0Ij;{e9B*x5U|^W?;Sj^|R#0=`#@8bZ$6G=5zV+{8498nRO|1X_ zPcWoe^R$$S{XgXK|A0sHkJOs?8%}sM9sy;A*ux&lhxoU-v@pR1F!PHG|Mr8&SyUJp z9N<~Up#hR_96{-dXC|{Fh%ey5;soN0h_gC@_!4|<&LF;wF}pK}uP}kb1;kg;<8lG< zHDq{PL42JwK35RmKwi)d#5ai*aRc!!%q84Ge48^e?jXK{kemmI?~*R>0pfd{R`3Mz zee9JyLHvNj%3dITNQ9~vh#$eA?hWF{?9%WC@e|s$d_eq^OdTH(KO<4k7sSuWGw=oR z3nm-+f%qjCO#DFn3UzaT5Wi-IrGEoB-+ggP132FVLh?;u132G+GR2f>jzJCJ zd=m`GH^B|yd;`iUOWNE+8o>D`6q0X38^HMnlzq1R_YG?R=bLayz6oyt=NnL-I>H|s z(E!djk&t{7*#OQrpp16qU`$j4INwA=@=bIDINyMB-xIaem?i{DNgQ5ErIP+vQfHO}f zB=cl8fHM!MTnK62nbiQ!JlT-UlidK$JfOlN#rITB132^KLNZTo132@5N|2H{ck&v* znI|8TdGZ@znWq4rc?ud}nWqq*c?ug~nWus94^S7y zviT=tskUb~19)&a&C)}mRF;3chtdwvuxFa}i4v|Ika6M@rL2zp+YTOX_+?)rz`yMf zh*A0-EVRkqvzvo|+aXZL(~;lhAX4pl=1fDS3Il(Om@aIT3Nnmm>8Joc+_qHM5nSc( z0`03zbFp+(f?qrWYJ7qH;|OcNGi@+HpRYIY>Ava6zx{?I|MnC7+kd_2`|?3a zEvO}C`{M8S|NlL^xgp{p9iXvI4T#*s@BjaUOy>ld&SG@nHPZ%0&+gNX9nGL3^2H-d zP$RAsG=Sp%8FU{#_`EjQRl+Y1i-QJbVpL$4%7A*@@lgLk$0uikidB#9pWu;^V9=$c z)`yD{pdGUk1DEc0(1?de_j$+e3y{$chJ&vJj)O%({SZV~`X%UoCTK^lM9$Utz%lS> z3TW`C8~MQCd7zD(pzb!f0SVglkE4IB;K;wtk=e8Rr!VMiflnUYFCDEKJ~A*clsJRt z?Lh0b8y+%t-+1xI4>a+48ZuMK3_tJc?2E^Kj0^`~vpR0zZg|Y-(S6N@f7@x$1#724 z8u+)>v$$IA1E1jp9;SBW-*#Mu@xTKn_(@odpk-L!jx&KyyK>>*b`X3#7U*nl$8X13 zK!V`;MDWEB9AGDXJI>+4?*dtab?wC$e?|t^?(>i-OvG_yXC1rmzwq#b%7NxXS&`hV z4|X$~;|5MtH;el*GB_Ui&kpW*x$^Hj4_e0s>VJV&EuVd{!W*W6EB{8`v2dBe>>#hRq)MY2ciTr ztBn+oFPdQzpe29Ek(lKJN_cFJ8@Ny-F~|oa5?R5W=x%UyJoW@fA~R?ktAnFe8#u9h zyL6ub-G>QUq6s|=?`-#t7wkUJL=T#T2OV|>@;xYVzw-v!&EmL$71i!*khlh|=2PJZ zcLYI67LrIfK(P(F5#Yp&{U0ES1UxAXc9k#0Rgf!eT==*7bGdXM!jec@KR^=+GioC7 z040(DP^Sm9`TXTS547X~8Sg`kuYnHL04>;Pegi52Bz?O-dUk^rYj|{jbhMiBn1O+T zzoiL8ZaWOhuFNj{+ip1WZ#&EbO19q)gL3O>cy0w{;ctf#nH92P66Eu5hY@-8`U?+O zaDwt9@*0i#UZCJ)b=<%Y4$kY4GUVKgb}vQ-NB(VYj8?6n!|h6vKxRVAB=At&x$YY; zlDwdi1X_EFyo$pUCIMP@fqe3`0oXct_J><10kaN#LFs`X?2a2)T=@5$0L?kOFrNmE z{4aHfxQNNB^(iQLT6Tl?8S{gSVUJ!>Rg-W3yIY!;oB@sd9Qyyj5qwb6>q-cXSgsHY zG6y1;2OW`s>~eKMNQAm{pGN4=Mo8GWbf12$h9b-B4i1FZilB=%UO;Sn{Q$+}S8j}; zd!-Ru;BLBs22Eo?JC)%>>fJRepnL2U96|dlo}cDqcz>Fcf%^<6gUT6B2HP{73{Gb_ z86wVbGQ^(YL=3Kj#@9jfak$bKBWn6;fTXYe4B(RH#3n{)@zZ_dMXEYj?0`o%XqD`X zHV?43zy*g#_gPT(d*OttBpIT__!6ibgQ<~2RbvlPvkA0nh#98lml}#y(hxPE6*323 zA}3BJ4`|}#K~0>mKoNqJI8%_y5ZF4N?i()-Lt@5p1E>r^UVgL+CIMP6glyqNcaVkf zf(@QLD`6HQk|!%#@?>+xpFGkyz_i1oJ1YWCr#04DUugg&q5;Q>t zLTH5QX)cTm5V6;8plc%FTO(@`61phnrywLmP;_{^K$9mZj6hk<3cN@YXY%BiXJ|Xe z$Z}&ML&{l77as7{*f#GEwGXn#P=!|dw|G)HL zW&qDCI(c-ndk`?@I4=XkOL25#41fIp|B{iJ0bKMkSwT)gZdnG(E!`(z>HIt>FLd8{ zVWI*{#b-Ubue}I$1xFvGx(2l<8y+&g5I|L92vWnp?er!ln1c7pD251t6m*}4<~p!V zFV3JUdFz6bM&Yf#tDxxR-{!__)efpy`CBG~oDFK?ZD0Yp7}BiizVTuWB%PsGx-X`{ z#6j5wxyr4ENq~xZM$i3Inz?I9{7aoofB`l5`SPuLE z-Ixu@-e*AyUT8sOk(-~O2;|@9hSdH{c>!r!fGZAgTK(hzF_q2uk}Lli=ARt=Qw}sAV1CWI12li$*$z627QCx58gwEnt9=OQP_al> z=TK3G7iJSdIh!4P6@p7=KWOv1M|T4#Yl9bvbWaCqcI`g++N8N&fvMEYqq_k#oe2^5 z=;i>OC+gVU08(Xr!L_>qWB|YK1y}16uKYfros%zATo@S|_Jik%_*=e%Gp&Fhk7Ku+ zjw8Q-n@p#RNl&UnqcY!~!ifc1UYIP+AEQ6#%hw(^^lKW?1yk0yitx zGBYr|(0BuKeLr{^K=%ue#)F_)JrC=H{7rq#pm|2~hJ9d*OE^8c{VHBW-eYF~Ev7jC zV!sLl1FD?tJEjr&0px}fuEKzsZ_-Cdu~Ju0B?>ali^Ll}!p zUL?H+&66GQ&;}paULw@p57J|N$>aM+k52Hp?Z?4}fqJSwonS>C-Tk0N3m)C`Pk>gW zb+dag-}LFV;r8uS;rHoW4iNdQ!d85UDgAa2oxDlx!f z3RDRfNC~12;BNt)vD{p*z=+~m&<#@9d~!w}?pg5UO{a?rdU&jaDsh6`Lxp4t+$U{N zB{s0jp5dmzl_W!zm|-ym>Jta35(6xzK$XaXlwk2J6N+a+$JHV^6Vzt~$H{#;xMxAv zBVkjr2dc!$aVMH7aG%VCDzS0giDn91Nf}g$85UEZJ_&{@F~DL9REdEcXy$o|3OK)X zL-LCwzW^I(0b2rW0UN(yJLqg{M}7f60e-=L(CQ9QiJ-tQ*v`iY8n}84>Z!rU*s!ms zZ+?>iT1D^K{exe#;)X}}C-6dg&{Bvq&q2BJ1OGO5t2R)=;%@;rr@;*bP%jqTQSZL- zLPQ2qwR?gZ)K_1a+9KKqOding{0C_iHG&{D(Dnh?m>1_!6@0LP7y?>q&kQqUHL993 z5H*e)K&$RqJi4!fYJbn}b1ydAfLac$ux|TRP+t!uKHCP|FK4uBy9+J>F&Yk6J-b2O zy<(WbY~T%*aC4(!;-K~c6Ox5aFbPnLf*DCd6D9#|IKYh(fH@H|qy=~44{NX!nXKAC z2cwq+*szy_E?P2F12?J{+=e!)9XB$*R&(6Q{94g*Bhzac$Bk^S#T_@YycTlY$n%=l zaU;iT4#$n0ubEwqPJ(M`kjGx=*fKJFV|UmAI%o{sLICwWyH9&`Urlr2cRc|LAx%q= z^`K3J;KspKP~*U}`y9A&zzddhX9n%~Nt_F+0R?P#-V=pfAXM`~l)fFr-g1<3IR{NX2G@H9b>H$gaQrv=D9cNVKQ(4nv;IJI7EglYwMEy2F2gJ@;7 zYI}&+)@cZ>peO_R(ix(a&8qDYUaipxt)NH+Y2~nBWawsxlGX|K75_GOHqavP4zO*ICEuV$-V<)$XW9KxG&B_&dmYUDWXuyd$b?pq$WsD8+rqs)d?DZg(^@4Dd;}E zi3w?R?yfkB8UHN6ZrudR@$f;uov3PVLDV>I0PUth9>F^ZlK>S3$Rl_wU=pD5AjCxz zXJ7PNfI@&BHXa0TLzhF-hO6-boCC1QccG0*XpK z23@a+7$SK&-4s5|hCe+pp^dOZhG5a+4?G0hed9$U=#CKnZLks8CUZ#GgEo-EV$cp% zNjy{uXnX@6JyNJ@tU+o($pAiz`%@Gpj-@~fKtloO@y7_0K##u{W?+{=#%z(}@4Oi_ z{`kN{Ch+*%ZU&A9W&*>m6JX{-i*k66t{iMG=CEr##9XvKif8vZ&=KBGhDXrK8)e9JyCGYV{7X!4h8gjTavb!QOzRV$g6Us7413Szd=pfKoB?knTR11o~9OQkVp2Gbi$f)*eHU zGua(CK#EX!@-6|zIp|7w$OHtTAk1GC&L#?S1n9|4TN|K+6xNQXE6UD8}^s`TzgrRVFlJmOcCb|K)xr(6$~nQ0?IW z>dAUowWCg;fRMMg1GuvXnj+Z`%0g+b{H~x?2OixZ&%ZF!W@KovW2j+ksAFWPWpU)+e&2#PMh>_(0IT_^1yRFldz^%#DucF}x(|Vr`N5UJ`eHR&paW$>7n=$iF>6!G(XjgHl@SrBb#u*VY5Cg?I4sgLcDSDCOSq4YUHt z#ri;rT(_e_>wyyS<{xY&LOa3RN3AcGvNr!&;cD5pfQ&jyFiD!cpP^Cjg5j9jURVtP)J~4IOfnI;nC~R0UEMWc)>0P zS}Mffq6ZqD?OX%idI>hdqjL**TczVhR?v-upaE!zf!#GK4xph|(3TsY&NbjOR6)nA zf~?`+<}S>?&0mUtTe%4TwtO)c{%z$FF8tflm0b9@<*R^B00fQJf<~cS__x(7q#b<5 zk;eTY?ch@m{%!7}Y1}W;91lJNvBlF|xId&h9()esNTzY0NOL^+1jLq3>-14E;os&j z12PRF0oE-Gk}%@m<}U}8;NRvh4-zv-bK(BMzs+5df1AHrnhW;>{%!8cU^On>FZj2) ztEO?E;NRx1p4Qo;0v;{j=C1*k1`BI~gh3N({M-Dspu)#pR4mjQ7#KiO;E~~87w}?x z&?V_2kZ@fu0tr`;SNXU3i-1Dr;6o1X6OBJNEo5LQ%?2$Yci`XVD9XRBP>g?DCMcK+ zrCj*8Rf57QQN@LSTc#RH_&ACq!pBh(DSR9iK|X{AkfSoli)oJFAazttbK!pRnO{Kn z_G{1{gp>UHTfiG_`NI!@c2ML#6=C4lcnaDUp9W@r1sxl=8GQDw#&OW~W}tZg%&&FA zk$?YDpKeHOf9BUZ05S*^DxdjdPJj)IdkDTN1+4N2=paN;`hckf1?y-2$j1oPk3RFq zeMIOu4!T+m6jl%&E-D6}`6E9glz;lnANLZW{FqPo7Vwz=Xa307{2KRRx{N;a$Grl1 zq2K{%Kndown^2wn`;UU|4+0JJ!*qbI*}Da^$Av%cAYAD&(5f<&_#Hk`2`o}fDUcfC{ZZ@jr$~kZ`ug(XgmVS+K{`NKApyF~wcAC-;JAxQg)OKwa8aod0v%PT(@-J2sg$>&LS$hnyTdj{ zkKPQ?h6*{bkUU7}-!Y%w0tJVLe@w-d9=$E#;CI}}3Mworz-b zh^od4K9E%_KAOAL2 z7MLDpn4ZpV&_*DT6#uqRR&;GDpa|OL$_~@UhR~(}mEzwP%7Ly;4Rl%zXu$nEsEf0U^wuC#c>zt=1=}@Cm93 z5Ap9mk>+a2Q7Vj>%{&CU^CHc$lOfI3(&JyL2&Rm~KafdG{M%1}4dVtG#^l(2$g%qr zNDo`7DCB5Z@Z>1WI0rV6980M<|NevE0bx{G7SHAbJRZ%j82MX6|NsBbzrPt2EudXn z&z^yg`2d~h0XacL=RjI#GiZAj|9)`lK{u@va(m_eW>DlIBoBi9)!A$Xithc*pmcCdb}C5 zGmhcFfBWOjUZ7cKFv}0l3WBmcnvcNp6nH-t=qv({ZcdNJgP{8RMaS-+|632#aTtRR zkX492?9t8b(HrdGYJ3tjTxwLsA4WL_ULv|iQwNBAn;lo+;jvjtY&<1gBvU>3f=z3 zzwOeCqbL9W@BYwwpj5E=KVvP=&J+d)h8G{surs{w0~K~`V8_L%1auz*H5VaULgV7& zpzEnYgKCibCc8g@u6biW3-ZfpkKT%u7uEm%|8M^Bzr-7Ie^2XyI)#R6hsIJB{%y{V z*2hX^KwHPbtBK&3HGsqBMbQ~{h8KI!urqjAA1~$wxxxTqROxQ;C?DvQQ@9pT)d9xv z@P>^4heP)(E4cD+`{>*K19YVR%@^q)Q@c-l^cJMNxcwL6z8JXs3>&H)6iZF{w>kS+ zA1yU+sP<*3HM9{Z7542u=F#iz@7aC*#nWUy>F@?-P`h{o<6+Pi0gx83f5GFKo}e@JeuD0&((>pPU2+4oB>wb^IS_}6LlOtd zVsy~`ilB7~r(aC}#s*oc-g1C{>LGCGf|jhtzm$Vrg9ow-j6voTy#J~K68(_-ugakJ zU)>XBK)(M9difRd>UaTW1_sdmSKrtW_g|fV@e6#IFertfU1b7x4?KT^Rx6%-arP@4 zgO#&TiG)Wt_|%77cF=+hZjf)HUp~nB2Rfcm0nyrk?iY3dZS;2qh2PDUKmY&#U+V4H z{F9@^)u%f|rNWVazY`OvL;^8bK<9Y#=iPAR-_P{fkw3Bl)VSe~z75)!3*v*0Mq&Wn z-{Qz0*#T+*y>QW`HY@ge%~OnC=5=p9;FDSb(}n(l##z>52!!c%?LgT5i}{P@<5aURO&i-^j0ds z+)~2YY|m7xN4?pe5u^vA1hjtRg+Evc zL;$o}=3k7ZIxjwgH+w*@ELj4&IQ~9FHy;7-a|Z2yZ@C1QbKJ-XHfa}V(>CbpGLILtAgV1u zz4tR`Izm(gKzghKRZH2yyIw2~cLb_JG=bs-*{BzBD0)Huhwo=9<%eu(wsce~WidMW znrS2BF(!tVlO0}+J3y90hEN>&T@G|OF&%Sac0je?aU&z#CWz%8pepVy=*X_-BT&b} z)=PuR(*n@Z?jGGY!6#B^@ox`Q;@|G6@Zt>EHidpm7gJ@OCgz6?Zr3 z-~Z#zF`#1(Ugvo9if)A}4Mivg?H2v|bQM&o7D6fL94?U3c8F5Y zIhn7;JbFdvLzVtd1ltD6PW;>46*`>lLH&RJZQ-D6Dcm*qx4CP(@NWwTT}$DwhW}a$ z(D?=~ogpd;FK!jEgKs7d0NI?I1Ugv)C472C9d3y-ysQCj+3pn$0kI1p>AGO#Ju%r7J{PDO8y$LK$e|J4o3ikTN-lvNWhNK7=yRfodRS*&t=# z|NZ|DO=->w{H9_mzi|q;E za0G>~M>m>hKi>c=1uvfKKK-Hxq7)Qs7)n<_l!BrI2UCqv>dPKKUe zoDAE4aWZ^_Vi5b$FHVNU-<%A&zd0Eye{(Xl{^n#@^P7|5@^8radUK@#Qz;j?G5FHq z_y7NpTms5z5DYpWtzjp4`Jzwv#S+06w~vEv?DiCCJy{{u_>h@_p`n)j|H5{>;mnu^z1(M!V}a0faOtedk4|pbnLzXnZteY*!Mr^a&u9vSCDyh^SOYk ztm}}r4gAu%m%ITet_PjRe8;mhTEMe2TLM%HBzSad?l5FvVAu^RV?4Tlf(~5acfH|a zb)ZbZ=m6|YLeQbdptGJzR6s}eeDJXTT&(Q^YAyPxD7^4209~GO7<5aEf{*qw59V{m zmtI^c69(rJ1sDEpha2ia2OF2D6qE=-@3(a2-*(`|2Z?|GU-N*Nps`#gP|^ckiU1nj z0gWOZd?636M-q@5khBWGWn{R|Q-RsMh2I##Bx%jf`X zRgi*bceaLScQNdm+4#d77+*hv+>Zr04~c)9qmD=S&kjd(&`}b{9L)qe9CcpIIl#`~ zxPi-~6LMruZ@3xw#3@*F@uki`)Ck5AKA>oO=?e;)Umo2*jlY3|i(lS>!8%^1-Ur3SZ$!J025S)o?Gum_J{m$1G#CdI(e?JQ#p%2p-pwxF|R zO8r0$@2P5{u!FVFzhK~CWN56G0n3VlWXnOakV@eEi%0B?3=P$q3?*Qx7?2dC&_Dm; zI6J8Adj7@y_n;0=r?ZMjFYoJXq6{zUUa*1MejUyVFN$SAbBu>QdPO;5a<NrGnbAm=c z6kZ&921-;PUUcmNg~w@+?iVlai!m^OF3G7=0%bjJ@FthjFHUlR6rT3z%=UP(7pkKE zo=3N{2l$XK(4rIt$Vpuu)-U*-e|ofj1D%K$P*U7jEdz>)k}QvI=Lk>+R`alaQ3SqH z2Q)whn&>_N4qC@8S5fD%DxHuyv?kJkScYz@^33?+h|-P1wmet34D?-qKoA?)A(gYV@X z8oo0+@NYW~8hVNV)yaJg_oe76T}Wsdq3Et`HcZ&0X}%Z3DVyF z$FL04Cw!451)4T@QSs<-)ORP=m$)QZdK> z2R!~CaIrpI^8uXqKmibc*eCh0NAp3}7vIu_89L%+kYpgfIdg`8`^DBvC0dQI7#SHD zN@SW}$(IN={^HYRU?^cWK5%#ksDwMb1C)vn?*PT);T<5)Ap8s}FA!JjD1h#e?!M*G z{n4ZKQVH`hCI*kz|0OJr#~2tIE5UgIlo>5bTsJYkSR~58u=oE5@X(?UC}kUfmfrl~ z0}EL5Z}(9#03C{^d^D~32WzPo=(s=TW6X>o1KH9JzU1iO2Nho69k1Y_GWe<}$Bm4; zK#2#ELqLXp7X}-u3Abe$#1;uqZDx=LwPFLviq*%M8DB3mI`Dc4B!oczL%J`t+ffGW zMbNONEhtnild*&oQg3j+ z=7um>jyWbUf>be;aK7MXWnehwF2ew7DS>vnpMGJ<&A`y@Ez|fC6c;5Lpw5LTXnaox zp(G7->4Xe|Z^j17sK=oNm<2a7?-%&+TTp`s?q)=ELh5T!VF@0eb?^W+{cgT6`wLo( zu+34Y`-dZFCf=p{fJd+Bgo~mKJ3*b87i}Ndz_*QvoZbuS3;g|!8U(q2L2X0yAQ08N0F4PyVnhm_mv7&(F-!>J= z&+gmn!RgWMDd5q|T7FIxyud!er-5+Ma2ufuI$6Qo2zyo>}ptDdx z4WJi0xfvK78|t;#OEo>a{RMn`{aBB=s2DK%^s?HW69sh;H5fd*ufWxJg4FYGtK-@Y zT6qJ~0;=60+x}G;J-e@fHdugnSFC4eWB|#7&joP+olCNT)wBCb8mNQDzy0)!es=KM z!8}&qUiTzN{%!GEp50d*`L~s^HT-4=X>{e^R>sah^#F^VtMN$(rK9}Y4uDSBR(P?L z2ecIkA(vn z&+aP@Tt^SQV211RMCht=Y*#sFk0^kVk&EDQ|2?)O3GvAg!V zUugcpUyeiN*5CjCyL2D-=oLMD7Aa{W8y55i)Rw&lYITE~^6=6Ky!9HA+Ccp|Xj9z* zR5^m3`jfu}RCu`ZZwmlT*gCMfcAs+O-{!&P*!b`dGXvb^b(b-I~d<-(k@!(@N7jDpb84m2+ zCm_{HZzIEl|Nk>DTwrHlfU-}3MkO2}9LH~m82MdJLFA!g(8=CRsJdp50iXFJ4?BK4 z#Ka%YS~XvUf#2oSXa2}TFl|sJafnN?4)RAIfEWPoTY|KIJIn+sVHH3c`CU$VbYJ_- z57hy>C+na`x4!^?^Z}pllOWX~Rd9KW7e_fkJq*-x1RUg``WZSE=F$8HlF7j}-Ybvp zkNiz@Aeo#M7IqO_-G@s#4!&SM_?qc8)5RB{jQ{O|3gh?7kY(eX&5s#hbg+Re^AiAX zih?YDZoTcefd#fH>V-H9Xa%7=t52_6l1I0n0BB~l`zj=7d2@oAf9`BPy>3|`IncNd zOirJZfuW&Jn*o$g1NdA1gZet#!nr`l|AMY7IR(0)mw(%#G{=Jvm>TM|SW9INykJdp zY<}=th3&vAX8vs_95*qgxo{tBc*OKt_`nM`$4%gD=fZv9z$>PPN1$z3qMMG3GVpKn zX9ta#>+J<4ASV88hdjEka-V>um&TV2OrUN4+Yji189P9IJZQ8#@^3r&nLq9je>m%e zxu9eSy;B5o)fs5}*0w{+pruwE2OltTp8!WM#5`#1#vOu8(F?k$K;zX99@jWlrm?Q3-hA$_i>>@wZF|MFHq? zi(R0WUAMPHn(`rV`^~KRC!& z0^BJ%=9~bU@NkGe49Rq$)()uC32xSb9HzzvDe@wYJ4=A-49I+vN3ZDF6VTG;#pmY` zQ%hJtrol{xC?wife zm>^*me!!7`>M>|T2Na^9;Dm(a*U!+91aFx*{bK9a|NmjVK_32X!A79I@&ay?wVhSqOBy{rq4Lp|Zc?+R*Xf%q?!pR+MERBJJmNJ8ddH#37myhP;1skPv8 zJK{B`qt!czZ^8KiR1rXvLU)Zy2FT}*afdyc-*|vZQlIWyKHV4jTh4=ywC3LiE=ZXi z`L_iyf(9ziiHb6Gp8}F+)QzW@YWnsWPgzwqh)1a2~Y0cEFdPXXUv z4_?qMTt2<5I!8fGrVN2&4mTJ<7jhkQxWE9ql4A9qaRWH4g@Yh(dwgz)kh7(l!tRt71C1YGnvaB(D=@O5l35Hi zA`0U}yTK*=;4UIt%O(D)$itb+x(}8Jd-U?Q928}Ep?;i=0le~0<8VWz z0YhnhL#5%r(n|hqp85?x1xoz+w;fdBw_z{kNjuJ@rw1N((>UC6phVKAmv!<%Q1x}e zv-`x02gl&XbYBFOGY3T(4!&aX>^|}T(2K(eN#m1gom~9eJdD7UgE1rl98BwEf*S47 z%PRtMS3g1z%zuyq6xK;l@JUWlN$~9c2}$w3txx#-K=__xe386v_ZM`4{b3G||HnO>-!SsGUI2G%OF&&>@KPc0NC>EYhOQSvY5RlX z2o&;=^OGDwrza`6@^23S73Md=Z7$ILM4)4}OQk_0BLQiSoetp3Q=w-Uf((s2?8?7g z0yI1m0E#jLP=s5gIa;4C<^U}*b>ZI*Isr6*Db4y+8A!x~iGTY=SN`n|Y>wTB9JLQv zpQtrTbJe~8KCoN+ApiCQX|CFrLF-}oqfdebL3h)F7Ba@2_{<;4yL-MU!)p`gUKRoC z6J>^JuFMzG9JNn@Mur@^SU2{if-YABRLtP=vYy1)}h*T83~mVidc&b_dF16qsMa=V0=f7@k{ z@)fWC{|7C+1C8;6c5Oh$0zt748!z<$tzCkzZ(K16+xkWw(6L@S#K2WlC#Y-&858|7 z`tINV5Tn2(D14CGPvDU9?1rwJ(_hLCny&EZ-S7*vc%tDyWa*qk>w!9H&>8O@z1}+3 zM@yB#V|xFuw;U*u*ueN&|HbzupjCXwip4=w0Sqr@fVkbKUpPSYmmcuw<#pL3%J72! z5V$~tbRWSZf$)oHz>Wje-<>fk;Grx9{%wvLj{Mth^00J-sF-xPs2F;5|Li{G(&3_F zcJPHjhl`34Xl)D!IFLJBRE!2t1vMPRUt~ktU4|{UOB6tt7%74S z==_V%;Mq&i5&PXSDvASvi7gSB4H36-$sq zERMOTSO~rN2Ach7KB57>uR-I*@|XYrcSEMw_xwkluY}Z39^E$~>)YO*1FdgUC=md! zZv(AHQiy(O0Wl4{t_`mKMblz-1`k&788MyCpwTt3ybJ%fQ;D3#v*uJ$gmk zc8fB+R`Tc-jRi3zJ$gk|KnwwoUeV9HL>XSQd-RH4+9k^HLe>7?fBtRmG9AwLAp4*f z-kdpers3D7G6BaOp!KbgMG(J#GB7m!G6o5{fkx^ ze&FRPcv%8Uli2bL|F%Q?+kPE*!NkAq*0&1|2i~)&FnV;qWOgs+FznDR6wo+D}hUQ;vWlTID zATx*tf{>&I&WybwDh4ljLAeQ>&_RI(i*HZ~3dzKt$84i^inVh3Mvcy?dva8XhI%wO-KqUO@!qoVqv z(N7rEPVrGG0Oe!_M`&4k`h~`SkPAyp8){Sv7)s21dRec1{r`WL63Fk}r(dl61(pU~ zm1EFyphT?uf=4fJ%68CtyuIM^uK9=q^cqJ8fwPW_q%_3^ztUJ z6lHjE?gSg;t{mQ&U7$5((Df~#YU<^t6QKEhocfhP`uClN>6gLKzvwhrfAbp+@O_Ee zlR);JWMkmp26F$C6`~9;_QSb%cZ!0h*EC+PISJAQb~>2Y(KdsD0d!?dDL3eN6`9KuErXb0MKMr34e2q ziUmVG2S^yy7KiK<1X~9g9|5mTh+tq~fYdh}THyQ6OWD9R-eHeU2^aqD&ML5520c2R z3ywR-fW{qO*xm*A!W})jy#+v*S6V=35IlNCrFV)lyvXwdFZ)&kNrMVG3y)q=p`D@( zpuvI{j9%;v-7YE?|4(!}CxB)!p-Vqsnj@Aopsi;Rcp1ZrWjzBlz9S1jOBr6h{raCj z{D4PiH3z?-v#3Y+d454>RenKdQ+`2b*B9RBL9L2TX9161-sw9;8D40e0FA?*?r;`) z@t*}WQ3P63P|5=89P*Zd6wEvZQV^qJuz~TodjV(#BXlXjad*(#V+K$t!Iu<)&cAAY zW03~Bip8Th;Dt+v!)r*Gq&XgZ$&q&4;ROT7F^5+SX~!Mjg7#g$XK?B8c=O_mCa7(| z0cuk5u9zyy@WOZ(8^~k}P$ddm%mpeBx&sTq#q3VdBuhgTXzUdEgnLkjLIM;X3D6Y* zp!3?hGYk0pwu7@5bVWdnN&%=)sp#f>vFjLU6s8|kg@E%ZxY+|)z4hTm?v=m)yKl4} zsB`0&2dQ8HEew!qs8La1C>3_;hTZ&r6*SAZ5NrV!gI=gZO{qT!YKB&{-mVn%fK1GL zfG6g~&Hw#B_*%Z4JTRnw_S9E9J2{(Qy+5V-*$k912njb ze9k81Flk5dA)DJyz)ya^{^Hk1a6inO33P_&0hA+q{Xf8^SR4<$L_SZ%1R=%lc;F@S zkqeRtDGtX2FWJFEaOYkyL4}!JEPN&STh=pxW|0cS)d^EU*tlCcp#TTtDA0PTLeZm}(WAQqlj4vmFMt!;&jV`%@R@;MB zy{toPjf3W|VpL%5)mzZTc;Nc@@_34>S;QIK54qQZOGgt%^gplUwOM!!I z;OSJX<~4)NlRE-4uLf!!4_xFDLo81NE;U)wk{@ zQHB=`aM?DHS)kjU-yTG*zRz^~s01LYXf1FRy$e!BA1V>qwGv!eA1dM61*xnLm9n>< zECp@f2UX6cT#Y|LH8xTu4Q`Jac=U>1ZV&}szoWpxz<&VLeLe1?q5?Xq^hK8OzyG@s zmAAJNxbiO1_vn-W#kPV+cQ+^o9l^Jnf$HuTC*Fdho~HzK?dy|`q6{yNZ-%z345AN1 zYxWJG2?)^ro1puBTTg;-_vLw+$A((_qQ)^#@sei%st{}glvm(Esvmw8rv*U~N z$02nu=-ygskj3i`fU4Hh9nJzTguzQTKy@!@y`e`h@2?G_3@>E&gB0Mddyj+9+yFI2 zKm|PLzLM@Epe5DF_3vAV*TMBKsQP8(KXA<94a0GV_n`1Q=I|L*1HXGwqy(ygdB8QW zTAwJxi;bH=$>RuW4eWtd{|Ydm-Y^5IUr_F^DDddcEb!^w2wH|_{LQ2Lr{zY_om6$a zp51)ioG)zlgKFOo9^LSI(*Rxpzj%KJQv34vNrHBQ%DXTyH2-EQO=zf5G2q~Dy$PCZ z+UBBSs0xZ;{;3D8d^z}A4udwQ_;R!!C=vDOodQ0I0W>HwS?}Nfm&+L#7@GHk>}TNb z109TuQVmbg|M&kT=n}2w-?F9kAWIlZEBHYc*zlJsHPomWF_bzq)TkJLD76H&17i5M zg{U}!stz$028P$ZEeA>!EnHNLN~J-HgiA$0ip)WZOhAf0GBYr|)>y$G(x^D3 z2X0h=*9&`gXB$9T7oOeG8ld~Q!J9F`_q#iSS`JG=9qwM}L9 z33%}Fr=9fDh%1P<;cJ7Qo|!g@bCdrE8!66#tHOR!Xfl4 zCmg>W;sDJbBefE)yo6M0SXv31FW^$>tpq-V6nZP+^K-Z^%wi2>oQkboT0E85JE5Q^Yh1^Pzg9@`a?t``xjydkf)=D`4V(}A* z|Dmk}(7AMoR>JugEnsPsRze|E2(6V61r3*1wS8dW(|r=uK2Ts_0AEI~#L;kw%>!1S@NYW=ZZLrEz~py1$iMBx4pq-dD&HS= zAJjf{@dY!u388TC1#|WRKJ60?2OT*xM0y9YeyxlPUA{hFcc7yf9#s|2Y zK=$o~wKtB;5M_8VAI`lx13Es?vlFBX);c?L#u3tHg9YyyP%lOy+@tZ00;tE@{c#s) zuLPtU?e z1B3BxkM0Z(SK~{dqktSho$F)+*Vb?ReUlg%7(jCbS9dZpa57kWv6Kipg07T1;L&_Y zz|;Cz&70RnzR8Dtt&i2}yL5YTcy=G~IQW3Yqxk@b2lG)&k3XdnE}#=8{vZB-(DDC4 z&;JKJnhyy0S|6)K}?IN&7c2ws}}LI8X-^A;75%RwDdke6BxfL7}J2SC+< zwmQ9dVGkYz;cEWPQxe+zo4+K$qgOO~6?759i<6*kXt#gB3kC-U29M+J0ib5bYn>N{ zD?y0`w7?-Bu6FJTHip-N9=)PHa3QT@Yz+L{-4xO~-8uNTyD6o0x^um_+QZJkzdf9b zf4e`2N2j~MF?R`u7oe!?aMyeRifEW*hr8B`2o?s04tJdwAb)hY>+)|8Q{vz5r|=?x z1>|n>n0YT1!V;@j^?X|nb1kjay z-ygd2Z$G#L#MM6Kc+AOz@#0J7Q;y#s9DK>?qJ7A*!^_a|;tS92Q!dPh91p(WbnS35 zdZ{H2n+pRO3Np{Jp-P9L6x4{dOBZH%*|~y^0c1MZT*6iuqg!F}^0*k>3UK=pG_(W0 zFcD-Czsrg4gUu(H8mctW+L|EufEv3V-Hrtf6`Bm7iEwc35~892n$}T+theoOQPBXk zuJ{-jSV84J=oXa@9~Jc%4dS2{FDJOgJ7)@Ld~!Kzi`S!wz4YiVEa2}80cHGdB^VXyL#|z#=utEm35Qkr$ z!K1k@fT2XuqxC=u!7AVp{ljdb(V0eu*&;@qH4)As?EIxW+cM$5G zeiLwQbnZor2*~&6UOWNQH7d}-uc@GRt4H_QZlM=aD&Tf1ql3BCI~ce@!^aoEy;1lO@yqNJ@U#iC@#Sn(K1@HT%L1_`K}Hu2Z(@A0e-j&n@yV70{4PI15n<4M9HU49FA;mG z#s&)%u>FYfL~zRh(l>DB-{#2&*=*}-;gQAP0$R}nI$_n-_`r+OJCN2VAE?!fGS(K2 zkO4J%k&k6{KuCcay~qc%sv@K~(FWAG5K>%718SddLtMb`V&R)zlG{+L!B8p&8o>jN znl(Ixow$1jrVKJViR_$>2q{qK0(o?D8bS)xxj-JBtiBD}(5wr(#lqL1Bo$=2;|6Z%5Z~cj;PB!Gof3``VXNR0yl7*i6W}s@ zjt5>M2VL1M(4t=E4p#$kIs+|Lgr3R{nu>xaZdiUHE`1$=j_88Ymng()Z_M=d`zF{Q zAQ@2lLLSR~fRF;EFJuQFMM#0t7jn{Dg^&WJFXUv*d?$a)y z(MLPe+ar+=#L$Avk<8#wt@$-JD}mn<+vZT1eJfAGpFO81N96H@FV8aT(!@G zIBaRI)@MrDASZz%GF|#rNE+hd-{#B>QU|^c6h)IycZx~?LMJFyfHJo(R3{UpTh71D znbFnw0N4od?UdZ0A|TC``TPrJs7e;c4UGKToI!~Zs_a~v3-<}In)_EE?qGA=z{J1J z8Dt5Dn%z(}9F7~9`L{WP(h`Om(Dhl+{&=r%3}X2H#Xfz|Q3Rkt`|cQ(1W+~wts^!7 zoj-UuZ9=^*7ek9J7el8l7ek*d7sF&*E`}MlTnuw;s?LkdLjf=;}VbKC)1R`FU4x;BB&aR+!+0-GavNkZ#^U7#j7WSNK~zw5=9pliEa zI(<|WLW9E`L!irQyWe;;zX|Z^E(-AMzTwkZ`oROdxb{VH13N>vZ-lGyTmEgr|4(}S zKim=O;nV%Vqcb+3(>KD^Qjfn+AKcg510EwZ{_oLQ`(lD`cNvEd^LIxJG5*#M%nS^! z-F`eCy{->jyWKdzi{ilxmR}q-26Y|yTaJNl3hQ=bv9)AiWZ-W<0~)4m0o~BTdg1@S z|II&G`P&zR&Xn$Dy}bYHf5+~Y1{N1C22bV#{~x$?`#x|rKH%AX-Lw153l~8KhL;u0 zppK^R14nR|3@W1qk^$XO=-BPX)BHoAR0^aMvTy>bgdL>B8hlDM7k{e}+!WAq5U7$b z0t^f-Tn z)uUJR%f7GwyL*~sTo4%(;W_bZ3=A)4GchnYZUh~03^j}qB-#oVWkRTZeU*XXWjP2FN8o zP*G6+e)*b_fx)(sfro*=Jq{eLp!!Ak2m=!Xf6HUg$#O3k`CF#^`~P1z`ad%Rf6G+R zR_BNRnHcz6H!y-j$l5J}zhwy{14E}Z%cN6-#fwuU-=hEfsGjy7;x0hDU= zE`u$)_~QR@kLJTHovsfYt?PJdc6oHyzVPUd4R{GUuCY7xfoJ#m7e%0x$;CkXcj`dR z1s*UF5*aRbOpp514_tB5~eWMFvB1rq0InqVjW}RqGJ!IO|Wv{VhD8LV#s#jVkmLoV%X)t#jw$V zi$TJXi$Twki^0W_iy_L9i=n`gi=oYti(!r<7sDn;NcjkEKSNv1H$b!QyQ{&&>D{OmM-dC@ zFRVOnexu-<{1Cil?2}LT#}}`w*clq?v>1H4f0XEfHfxn?I5z*$D^>DO9=&lfE*9MUEmJ_Py8|!5 z54ueH0O(?K@EtQC8DXdlbj01W8!q$nJWLOGS{_N}K3oRWG-N}PISQ8nwG7#zwy%eX zhBLZYgvIi=fKDoRzspPwVY3*rh=$l3__tcPd!dH!vOc$m;; zJv_Uwy|{OQfnkS{C<8;9r5i`7;SL5aFq5lP4cumP+yH8fvLd-t7UCj*kk43NgU-wL zXN0I?K~nYo95@8Ps#rm})o}wC)Ju2ZQX4>>8ssoIh>+p{HCdrLR-FTF!qa6a33Y7# zqf^Tbav7hCg1h@3k^G*1-ZYE*5?juZ0|&|Jam*&NK4YadqJy0Uwlvot^NWZN4P@}xUbf;|Dp=08%UTn+U?47DsS{M*kuZU7}ZP-Zkc1@fyq z3n*={f;590%-GCyu|82M2sTLco4b%h2|vhut~6Kcv!zfoLCGCt=A)Akhl1`ofL#A} z4Q#S!_j!%P_xJi1T&@;e=Q(WC+zUXM{pIOe7eTFIsWt2E-{Vi7&u=1LxxS}ySL^UDwH z=&K7L?^*9W=gYU{INa*tYJM4G?Ugbl!OT5^QBzXW) z=R;*@!el{d4$|?5U(ittNeFx$ZU)EPv>BmYP563a#GP!g5Q2^0-F)$=1ia4?v=kh? zG96L}f!6zgy0;eKkO3|B>x@w`=q~5!KGyoJL=kk>vI~e12Q??;J-Xu+Jem(1y_gCz z%=&Nj~z`YWOZbu7`?vEgw1w5K79T-Z2jyr-D-!r^s1+7qZ0j)3U1Z~0wZ>jCBbl~3> z5%S_^F*`%c?VX@y*&zD^c7aZW;dedd!F(R%wg?aFgGHR6U8imioo*Hlbsh}-Euf_k z&2<(G{H>sI5ZRCl06xN|q?(gIMdf(A)I4Jq)x0_e~u#3(QcHV+gW0-yvX0X`}U zvf_b%8x2E0}A=wZD5LpZ8=w=hN%V-hJ)Gx0nC_GarA=1iFYGAB7XHwrYmt%GcJHNt9; zoB*=i{$Fsrz>y1UuOh}1L6HpE?`;4sPd|8cgZ98VHveR`$qF`=K3{|WQe@jp&K;B(tO0gG48O@f!7aVj>U8@sHb4y_|1XQ!Lu8(R2OvJ zRf&RQcK|!66nhKahgPE6?abcU4oVisok0imFnn`n6etn)=mzf(o1y;`R5Gv_9eAw@ zN}=EjtPX>R=+4%%zt9A=fOxu{nZc)vtcIRAgY4YqBL>jq2{|ta>?&W-p0Zy)-Cdw$ z3Oe>Xrh6911t6!nb_Xy!^|AkQ-pQ6Qth7`jBXm)E&Rl;Ne^bfl>)RC#5PyxuHyd60X+`!7}}h%&tJn*m#2@ueHO zpu&0viWUb@+$rqH1&xGt{{#n3tqcG55EalI{&ihB2IB)RmO>@mpcMv(Sek#Z6@38R zzZ3~l65+_d{S>IcGq8|5X{`rJv_VsfYM@P}y}UEJMHygsR=wyh z`TM{1Kq)u>c5qr;1HO9&yuc9@s_}=xaSGXs1M)D)c-VT^n>#@(K40wo0jgxc>pFy9 z=yZaYZi2S}f{S(VL8SbG?EHf60-f#({M)^iK!-^lca8vc243)hJ$eCjh=d_0sCx@u z9189*yl7YocG?E;UW^x;AZLUv+A-x2sMF=FRI13o-CJcB!+(%h52h&}+Qpye039M>V7U{tIDo$obj`R2WMa9S^9A=bP>cQp_}+&vpiTwo+~I>8ZU6rV)mj0~ zKYhxrJ$hMFR)78Pk$jSWTMx&CP%ehm|EelGn3O?P(U%XlL_rFK-ht>lXr5@JbOZ|Pi&qK>N(8)b7_Cj_;S~S!u zFq9fO?rdRZU^wQg!06h25Oi*6rzpcN(3tLvsYQQ5I~Kc7zqri@J54i?mw}=6TYWDm z^Me+65$5)4qY%60Z0y`t}yfBnzD zt%WNm0vzQ55zr{#0b1F6c!xOXkjEXMDc8f`Gu{q^`(}s1P20b)?fF@NuI(<~oNAf`H zCOo@;@Nf52^6CEdg8%>j|Hj|CU$}I?dm)?->Ty2s=@tFC?CXDzZWomVSEFy>d;A<5 z4}fxlWAhIm{&rA%(=!=#I!F&!LL3)^WA~JH!@Ne^GQsHlS$ZvJ9B+S+5q~kV58;){w{%r>wyIYzzfQ>lx|A8z2 zwsWr)9XB$+mT}z3^jh3;Bim~s$Bitnc^xT|hWbGZ0d~l)E z&A0pTF3`F*kM8sT&%P-C`~N>e(;gySxI-2bq531uNL}8zo|{ z{M$ex#}KA-?Pg&3f6V%8%@%MZfi7Bv6;%A~DWD^3dPU8a!U`*&cyP)!iHD|K7yj-3 zEc-x9h|^rGy;({`(_EO(!Dm%Ku8-OQ9@}Bt%gD&UVCBqKBJa|Df`9*6&}w4G4NP!{ zfHc0)g(zmXa%M+W$Be3u6{3#A%9(?|Wj|=vW*ehR_X$`2ZO2~D0^g(R&I}q%V&UHw z%mUsyeF8K|3U1#Wc)^tB!hJIB;3GEZeO)frr%L2^GAMwLc};WCKIz$g9i)^AG#Rjs z@x}D*U@x$O{R#C4E2{g@{E-UL!G_^qG=JDa)PelV-|`(abcyiCCD5$WHg{GPd(c{U z{%!6oAUAloZ(=H!wSH zW8~j|7Cdpb{-kI38L-usTS3{|1#~{+bx^xAQvfnBm;pM)5!C2K9vHNXDp!_r7D zh82-q46h=&7=A=@F?@p3)ON#zC@zMoST2TJFouo-+mBL+T8#xJLzThSO6;RK&3pxl0;CA)YH(D2&$1z{C~Lf2e^5EC{6j` z&H!Oh^Zp=z%PdAvy8aIu5#4?$%|-d(PKHkKCiH{+Ep;Hd4+u>LLQqYh%a9#+GJv?Q z)(1-r9CtE+%mcCIb})PZ4H`2DFfgPkU)VY05NJ7gnxplFG|+CU9kULBj)a~GBC)!M z3uGs#ACjhg5#ki4K*#5xdTJ#|4&*72 z1rQ%yED-}64)xDYkn6yPgDb(qSga^X+X*rrWI8OwtPhq1?gW`@d>~Evq9a)APN?~5 zpu2dmnj;4`2dV|s5QX^}qGbn22-JKENaSL;5YNT1G=YmDA%Tm5Baw@tGm(nvijj$# z1(c|eFsQ%nYILCC7i+nmPcQG=xu6E%A;<2P#)2eJk~;YRf#U|o*FugPm|yccZeV}S z;kbeSHM8RedFX|Kpq`ciXtlBtWOM*Dh+yzT=(vlDF=(Cq3+b((Z6)lGrm)6gt0XQ4 zc!jU+Ax-6Spsqa-c{^CZYzGRRrb{w3%t50B8+5d1FOLKB$;Q`V zt3ntqzTClhfZ@RRhtPe4VBW!3{16Xygs2#Ggs2#Qe+>5T!B_ks*Mb8Y;v?P{M>m5V zT4D_~04xd74GJo-K9EC2Ud)E5gdgmK^-nka;K|8TBoau<9<+Yncw$ThpQSWo*b?3dvyPFUhCQ zu5xdWUeQUjL8TU`X}Ta4+(w&_3T>mo{Sd0q5vv68#lhbk9kI%3$6XbEG`_gL3G7?` zmh13n@c=nH05YEd-D(AzAAs&T3{`O42fD-gn5)7MN9%jXT|sA)FgSL9Kjx~&z(4;0 z#10lFN9%hXu8NNQe&1dcL+mIiKkll~2wF*f+*JiM7NEx9Xnn85!O{ADiFNm}W3DRy zwGSV2Rr~+{K<0t}>&{`OV|P@jVJ{Y+34fh(3RX`qT_O2dpaP$_WX|07ULaI!L{9d}h>WO!`|=CUxp zRst~u7#Lnlf*734jIRYi3`Pcq*X$q$Cj(duXbKqIMfT_oRe%HlC@Nn3-2jQ%so;)s zEab2Zh1kOrG}E{kV$!%6f$nq? zg3=tVFP1pE@NYlp*xLX)`8e|gNCk{@0H%iD`5^!HQ!~H+WCbkAbGx4ba_yD4IUru_7-J$q1Ox= zwg8<^qf-tYAC+!K(X!*NF}S8bQOX5AkA@Aj&>y}#05N`X6MUl`WaHV1$7~E9tp{M| z$D}n^E3tWWIv14kd-RGvE(2|>JN;twm%smwFTpqaefbDERt;2sb3n(NAp41=R)F`D zZ(!sXWabxi7T_0jR^S(OhOC?>cpwXCe++apICNKx3es^b$6ZvwSN4I5MKuNn$hk$C zPe3adAxE*u28c4eSW$wyEd~_NFbtWW^6b9g*nQKr```8`2$opwZ!24;q8bO%>T2O_kC?M^p`S48TE%jWh8XN3iuio$j0i-kAKNMtp#*H(Gk!| zuO6Kl0-)nvVfSqn@M{*_@a(?9uUT=zr~8u&zox?ukM5r?{F)vse3O5^SQ-jmSIxi8 znaR<@jj1FQv?SWzrTc_OFKgx0um7F8r*s_11=R-^{y!pXQFQSdQ1f;hx2pvof6FD% zj9~-la1_wGW6;9oBdZ|N82dF=LnR>VtdN(}PlU=iZUC*O0vQBa-2*bL94-S|zl6M) zJ{B&6zLws36$8UJW(V*Y;(I~k5sn*JT)NMKS55P~f|gCcxUd}5TV!_JzrWzNKue;Ky|@k`1zHk? z?8nInDbQ|kWKUKgr1;SehKXGX@`5w7@mtVkr}5mNUBUvk+kL>NSqiX<9S{NS6c*rJ z=p)KtQ(wvkT4wWFwfRN;XMVvF6$O5c`;Pn?7aaLDPC_>uzxe(B@Bhy({5mIGK^soN z>)%%_16#sEoB_LF1~`I7ticAPLkwUg&VWjU0idu0B>**u0cT1P-5cI z>Fm&1Y~Ya`Y~s^>2({vTXIacs=Iqn`t=n70`eUuAN4K+vW48@k zuj7B~54CLnk9js9W9iQ3X#HOz=+b=@VhZRm+Li+)>WtYIj{lFlSXc8D9RQ^n@S(Ke z<7q+DJkZuAXr}M=W61n5B7DI$Uw0;GgMYWDO7|!0v!I2d-WttESv-=jdK`Sj^y1eY zNVsZtd#iYKI%{-hD>VKCb!o~ux}8}LJ`mvk0CKHI^2tt)T+40~j7T;u+ zKCfOICJ*a><<$pYFf~75F0loz%g_K3!l2bd4j#R{m$ii%UdZLLF}$_`o#o$s+Ohl6 z3pqvxhSzckz8`4no)5vF#|U19pa7cNxBgeu1c?pExrd;(KiH#?MF-D3dU^BnL>XS} z%3))8eFGXi;Pa?`x-T~W;x5mJOoDLrfBoM*r7@)tRNGwq|H!fX0;o5)7&N%q>BIt_ zz0x=g6$M=i4(ebzw=rUo@`Z&0rNQf*CR8QIjra~@;XdGCgkc&aD zkc+_wNgn2Q5DjYYf!)tl9u9H8S0C8@JVmJPe+*hUbOE&5B=hfo*kTu`FF?y-96OyP zpe}-nZUj}5olY`P(X>3rDdb{cF2avNZUbR>`fGm0QDO($8v`c5mxY;t zcFE{>GqxV6)BJy;lkr79XpVN%IZn-zw4VqY~1|0lGmw!K2fI19YfI0%#NkqE7&HT~qgAkLDu)Z*!T#v=yn66OQ#Sdl0hQibyNtE=12U<3Ys5*RD;tXXjvq< z|A1DWf)3uj0vbK&mR(vS$Ka9dEaB1Zt>DpX0~!Nl@aPTa=*?h!vG6*iVCDAcbXM@_ zG-2<|mcUnZg2NALAN2fR1<&pe(0TIY*`Q+(_`@%CvVG{$w0L&B)P>%q5xHH)M z81)x;yr=n10eF|?OIM@+uEyV9gwOi=pI?C4aR+D*u19Z(iUTM?8t`kns2IGsW%~2K zN4KxUi;LiOExrOC-5*{Y1+ja5R2)2*KfKrh;&l5;c=U?e9v5TqXg^%vOhB@!OJ9-w<=RF8=IS$cH488llkmC9RZu#`%5d+>Aza9Cfg<*>e0!()B(HJkO#8W!tY zb$pKC!cf80`c%z@*UTQ>KYUvcl*oftN%4DhUk6>!06Oozs zw@d^bT2?Q>R2tUpFVP*&VSTZbquX7^(w(P7zuTQh`2~MncIR=_J}^`J z(8V8)%m-X7-Fa#`tZz8-&pY^<4Mfj92+|7G77+>RfxAIhM}r4MJ8fP-TdOrH9-yMj z5qeMqTKIz7caHqqKEf{Ie)+;``q%$1-QgO>2SDK&>C^3Q;Mi=zSjy&T9l=t<`~QGv z^8p1%>q9j!U)wk~R|r7*5NAu399q8ZkO0-eJ3*T(T=-p1xbtu4VRY?w5P4x5!NBmE z7sPbo-*)cBvIvliL91=L;cLwytw50bAnUQh;af_Z-zd29Z~N$*4B0FF^2PLNptyH- zaOL0j%=o{Xk&1<7wMJbIs96}${oSYA*}#YSm}9dAbE%7~bp=bQonyBHhfB+Y5>xPs z%d;*mA4*igZZ8#Z<=^fh19I4liQx}?Id97C{V&|bl`Be zlZd6G2xvSEVl|kAtS5Yt3bM7^)~rm9;Xi+~Jp+HgENG`AXl=encRaYmV&Tz!+W4(U zr>>cL-*+yMV1Tzoof2A}Q^#~DCtyDleaVSK5Z$MA)aJ?Q=+KLL;4GM4{`J$maoJUU(Ye^|$;7}VSZbw0pT5a5Ju;nQ8B z0=k?)<1om0aPolkx1lNd0OV!+hj{kvHJfC~9477!=^*{+k^2Wre;k6zI!`#>#?(=XhxRd_-U3F?UN=UM<{u8l#=f9d zgO3X60@xQ$@7Wk&e9!JHFFw6zV`x19%B-hfl>Phvzx6;Jv*Z8c9^F$Q&ghM21f6+i zeT%=z9h@V#sDOL|I>l=O=vQ36zC&J*;n(@OgA!@aT2`of%j9{HIs_acM~YMvg0h#ZHB z+<37CB+~i~v`L$>0(6lw%Q0uhB#?LIJ$fTpL3!dM*i>&ukM7Gpy$*~o65k3j9Aj4W z0OekA?t`5;g5Ewux?dXP{*_>JAnsp#3KS3^_w%=aIy0c2j{(FZpn}f=d23pc>={C_VOyeuRjCE`oms5fO)I0r~g}M1&V6a^uAzPJCd z%#AS#RDxM}w7xB2Ip)fk=+T{{VgQ17(&Hyd( zgH81K^tN_@_`OpnFf%ZKIw0V#h{KB|8K70|Q$dpa+j~KhFAQtJB`lBe0guKbAe-W2 z4@2d4)Um>qdvwlGNdUQ{bBhY-q`iG7bU`a%Kqp|CGlN(cN{nB-r8WPoEH!uB=_~=# zcqq+L`=H~_KmS2zuCyNHZ?$A%VA$a*0ani6q76QcRKc{?=wj28JEQ z3LxGE(BX5Uj!VQCUdpmEFzm=g67^mx#_*CIB$^HtRR^u{ysXPX z!6h2EOpL*U-{s=VYb*>5JJL`zM1eH$!Ze7i0Bi6C=>ut43eu1P)xhJ?E4q1w7{kkc z7SPCgJb%M)-f|wt9c}iY9kz>a6mj=DH`p-pw+AsYF!VbAZ2nPIUI;p`zZx`O44TsC z=>$*dzv%!CN`WuI7Cp35jNzpnC}4X<)mDiyyflKat3Yfu2-|M87{f~`2%Bk*7{g0G z2zwfc%>-e;0Y$*{fvQ6QNO;P^bp-`WLgcJE+FfW_s3wB{e2ARl{!mTK}ZK2Rj=xPu`PS(>pt z0+KX6dPT+8gUt0&33&1L1senZc5s^9$(#U++k+)4JK3Ntshyk<7JsWNIMs^sZV+R5 zsR>~}Tn~zWW(I~A;*}tqz=^lzK#2qB{#Sl*W^m!(4o?4|z4)NPAOp}TpNgI%o@JWb+Tk64|uoy&&BT z{H>tIL0a=(P&vv_QuDG8l2ITz(E;wZZ%;wV9wl0WOTb~D02=eyD8}&G-J@6Z{{}IJ z*LM7<@plUn#h~l0>_H0U(BywXEnEzsz6299 z3p?EbD;uP-25v8VG`=wag?IN&k6uyPxscRp07)P({yt%YW#L{?2XMCbQ89Rt_5@U0 zGJ^xA1#;dk=sGG;8KMA+bcGi#>I@7XjYmKx!^e(6mO2DO?Q5vy2Wn~5VCv-&*s*%ms#R$&+6U8II$czBKr2QazdyM6ihuhd7yj+1(wGnQ z@_;4-4uaG;9(>7^*8G4OtX3b^55NKx|2Ce#8t~!k^X&I*qwIL?r_pOJMy>pWL;A;O##O zj@B1yo`XiRq7OG)F!Hy8X7emPSom8(2bH*XpZ4v(4C?QCbbA{(HQNX>mZms0*9ZzQ zmd3bsy9kPa&hdQ34Vlr=15NA5fo@0Rb8P;>S7+ta>>|kW=e3d3aTh@j(8BE3@?a)- zE1n3L3ECm{niI?f_0YYJvj~EEgrLKon-3|tSbJ;Kv_M=3N`(jv>R-P2&IjtM94KW4 z^&}6224g`z%EA%`22g*d@eQcA*Ujb8eXH>$0~-Sae+y`|yZI#(f6Fz{SmR5^l3Gw2 zs%ZYn!ruzo7Vu(f^Vk17qu3Z2UfkCD^B>gDaRim^-Mlg>pfQJ&{4Iu{Gp~XLJh~Yz z1wc2mc?Nj2o-F;afzhM!2*^HAr_-4O99N(LWAKT*AOkx?R198BbN>UHa)YUSq1Fr< z&=B393^M!@f6EonDcj4dWEaJky&0Ex?+neJ>(`)cF z9^A}JO<*&#VP=BPlm*?|MYMqz(F|;a7$^lXu*A6ATOe(M2R`HWdrN>F331;`6!$@+ z5Zqq__4XBvZ+rCG#!eMu=;nWsruhf7W1IW`VUOnHEX}{Uie7=o=s+m|wSR!n4;m`C z*9h{nY^1#}FRgN5l8 zSviIhL3qzrwFBHD%>s3pH4DHsVO)2xhVjYPOLaCL-OdIc%?Ct4`K`I)4^t_NrA3J{ zWIWyaRLz?g=2I9L9Qe0^uN#6+ZiB}$9kwyPkj5eB(JLweZie!{6cT25am1I6;l=yO zAWz4r7=T7YvGqpJK*m?G_-{)os{g*op!m6$dn*`DwqhbJwC8VImm0nVy_US!Mh%91Y@C6O!&tzm^aInywDJjPQ9eDHX zKKJ5PGbn5Ew^TEN#+&(Gyvhb;FaDNn&}JXd!8$J8e;qCJH2C|RKvh;JXkfmx26SWg zUr=N_fJzm_`W(;hGK1zCI{_yCR#0ET#WKZCgufNMIE2Nn`)>0Orqb%}5IYvnZoU@@ z!3+%DK6X6aA$A=6`)@#J{RE-2ew@~~!1D`rOx;IY4wN{$bi3F|I9gvQWwZ9NlPSsQ zcCnMuzNLN2QTqUB`i?*PWEy|oLGW~49Qw?iBlC^d=G}K+8-rE@3Bc?x2m$%@wM6p| z=2A(RV0IK}2;xAiiycP^OLvT&49K2tA3F)_6SW-HH){l~Z-A!sYB;TL!kyQ8yM(3X zK&dcj__X=Bf~$3%27k{d&{@6A{M%oHih2i7#Cd>5?E_w%>;vs*t5J#I-+mNS0XfDw z#>9dyt~#+2)XL?Z$t%q8qQrxZ;l=zuP`?~W5hQ&{fa^ENIswqYC);sQvSoNtPyj7M zL9LJm+YREVBdm-~kcbBD0|eC*j9DP>^S6Kw8SzN=)&P~t2H;UYpI(!*pth99!H2A# z%;#RTZv%}If(M}!jW2oj@~~M3Yt%Wqf)>M^K#TuQPTyWn4p5cj+v}k4|BxfUfD6L| zenCb@egPkb5B!3j0v^o=6|93bYA%Bo6dh+d2FmQ9iCorhXN^ww7b|-~;R7n;AeV51 zS89V-T7h=Jh%N$;B=HvW2s6C!b7y0CQP~U1?lCG3#^6Q#sP(z4@d4vYFV$2ax%12! zSK|ZCFB$n;I-w1ZWt=*01|%-B6L8K=8oX&hM|(mAaM~8 zaT+8kg^+|CjR#T&Dds>dcyyS*cvufgA0_IbwDB|@lr~DFyQ5`ZNcJ!=bYJg24NAw*!#K8qmge+| zii1Y;dU;=P2{XJn?8?UQ;$1f+Dh%LJ;Sd%MIsVB7WdBD8qyH~X=7OB?jlabjTprnS zio(kyP*E5Kb_Rb7c*3)r??n{YDf}(G;L;~Y#l!e5xHNhO>U?y@s5pRwO_&^A5hY1QjeoaD&AH7#JM5j=$Cb6)oy;Vg4|1*|HOq;GJ4sj5+wH9(3T}cAWc! z1OL?H|Bre$A5*Z-)8Owh15dbsR(pc(pMNpE3lyw5Djp!k;36YFJ`Pl3Oj`;rG157O z8D2QKura*I?P6enoB-npQgQ~IK3=GU#)DfAlp;-(!8$cM0kE6_NmI=S|1|$(FW2x$ zKIqXa8kYt>mH5O==&&j{#U2LVuzq+4sL(kKE&~szO;|URivfnW%;aJ~#=B-B_SZQ; z)~@x6<}U)xAKZL#`ZB2IE9C|o1oB%n$YYUU+0!r9!el{~!DXGHvi&ewP&)uFs|%Ga zybQXH0elEn>j8e3Q{4w4N+2GElHmRxJ1A+jqWAY2{TUb_?NxAj+x_zee>Nx{WHZ9R z&6W~jaDR%~(xOD#1JX<={qW*-2WT%UBCi~NakB%Y3w+`dB>SMx&p`9%P2>MB)@FgH z$G7=|vdDoFu5OMORp5rlj~A1`#(?U5@H`vzh#zox8i3XU_WGzOyx8l{z`!rS;L&}U zUy#|O`G^6^U<+)%8+48aXp$4Pe`^>5>ED94J>Gnwlm&9b?Gp0_+cZJcl45%`xTKH; zl@z;^!6k*DN4NBg_w5j$g67XavG^Sn6TQ4A*n}BgEOumLcyX>B95`TkNCY6tCy(x* zpd}Z*yo`&*7+!qwgDg-|X|P}@kq2GM3!3jc|Dxs+8-s`SVg5^}d(N*)wQ;PsaN z-Pb`KdV?2iexMckXsg=-`k1c_|^94 zhJ}!~0>6L*GyrXHK!WKjxTy?U8VU|3(Z35o?&CejBFyk&r9B(Niz}_rm`4gLPznHr zmjq}w0qy7%1LND>uU)zygIdo_osuu6q=Q1umNyub_5PO_z~<8(cYrQC0__V60-Y^$ z{>ARIptefAMz1d;DA%9ue(BNrzx0Mr^4oo&CQbJ>-`-M2P`fv2EocoLXzH_+>xF46 z1H(&xP%+SLyAotl>;IBC-|p`d;N~}jM7z(wh&~G{uS!h#1=yh}<~$_D7+wDlT8+Tp z0&47fcCvYNpYUux#__`H0%-TwF-{NW4<6n18X(uK0=ePE!4{C0&b`oF3p#7jMWq6C zx_;|{l02_op0}W6<8k}|c;SKeLH}NpFCNSvTHn?=dUpT!)qd{TeK!qU-}!Z#sDtNg z#X)|G1FcZ`f4~E@SVa4S5Az3)=GTm+w?UUFRKQIIjaYhh$|!R0<^f;z2nmDcpDwfowO(jO(D{wfn{k zdlZRYQTKV^R4c(G%<$r~4I9G?xn^jpg**DCG-`zju0M|d0!KaCcwr()<;&L~66{ql z0aia9svb*y{03DyXuJ_z9^ZPA1lDxBgzY#pI8}fSfrIoB!Nnf4RXLs?jX1vh!1uTJJ@LS`cDz05-k7xCpP~%g5(kL_bC|?f3^*_X56Up*Io*a zKV?wZcgKR`PaMQv9|T_Iv!fAOjw*ob{)6Dbe%?t8!VE8Rt=Sk}%xFZ!0;s$I*OvzT znk6a<-M{$5zkyOu3CQ;D(=TiwPA$=cj(4=4tW(B2zQX#MU!Z{Fg$a09WQ>Xfzs51p zMkvr~D$vP@VEaI;B9PWoIf9Okd;x0D-hA;V36!o+zc}&(97HAR2zzBbx+j1JS$w(= z8lSYZDlr0&t{jr^1g+ks_S zA3T~5@%SVk^E~)~=|$>kA%+(X4WL5;ULOU;BMgJ%%N*huwDfooloAl}+KTj z2HQ4H)cCqy42~~FP#oQk2FI5uC~tK~SiIl{xf`}7%cECRcs4lCJozWY@M6Cu8^eoN z^@!LybEf$xYdJr-G09u_0yNygau9UX1kAZ-ntw{d{=o%Pa_%|05oqxP zT1f{vk5s|8`=e*_3y);b{vuGfBPbCPQ&QhSRn`fQ)&r1UVC%PveCrLMnzAPHV|4-U{$MmEqjV;yWB-JrR@)=MR<-Ht4sOdxIq zs5j2q?Z^S)CP2A7olFkf8DGnL^oq`%CC2a?G5YPzQ1$ zWR&kXXso~kvoF40J;S#;KjuN(6|UVBI`iG8qpo2643mbu_7B(J|%c0p9YQKXzT-xd4i%I zv_YiSTbM1u@`m4ai{}Aa_9K zFFcZed34`2{`TTZEGTWCelh1W*y|-St^X?|tapI3oq$Jo11P_Fbf5QNKG|(@;>EIR zkm?u}1IP#vc)d2H4GT6O+#ds(`~O7^)La*+xoq8FGhd{@O*jtf^+7a4=C_;QICS59 z;T#KYpXh*^0i8jzafKH-?jV<407Z+!i~UyM`s+s( zLK`^!IlS2V2~@~{8u{Q;3>=~lgX(9{+Tj;ft{@Xm!%g%;HZj)!NN zD_?*HSXM3q6$mjZ7Onrmr?S9n8&E8RGc-K3&YbaRe51j_!0_Tq+SmUt&R+ugiuJ{H zSC^xJEeA@tAUu^T|Np;O4{Ct-@_Ia!Wq2VR39cV|Ky3C%28I`pEiTiHZk!KLDsn0dh7RgG`0A zXS#2`SRVya%j@AL$I$&7)br5+_4z!yFTZ$d3@))`Jeq4%JQ(<=9)8hW0UApJk1BxT z%pm^oCdTg5FYX9{3owsvRwg$&kU~&DUl-Ix1O>x7GjK4tn;-{6r4fk7ddU^kwK`BD z1iA&oaUN*p zXt=4fMn&Ppn}eXl_W^WwYvTn_QSiUS8x#fxpfb$D_$_pO^!XQy!3se+sD#;}Lj!y) zI;eoU4N4=ew>^5R89n%2{(`zwr$HqXWH-%=J?B74^xTUh^Fj91fR;W((l_|DXvp|E zq-g5?`NAHQ#=2!^xPW|q8#bO}ZBgO^AJ5su2y(wc_xTr1{GiAI<+oC6P`{mbnN z7iSFE7+!oY14)&rfQCK0V^pBU)qiJ>7k9xj;8=o+?ur1N4F)QsUp$xxawEu#{4Jns zw;eYyLML=jyl}~3W9UBr;x1_8O(!!b5`|oi4?v|)zfc8jGA{Q>c5rDuP-5WGePS1= zbNiwXWMZeY1xURVvih&tAgj1v{54=;cx?}A%O!gxw4N*p-UW6^7(|}~NS_0;zP(U= zM-4ze^tO1B15(+2`bEk-Hij4fL6f%K=>7)p4mkZn2z)X%tF^Nn!+&QEk515vY*}4r zIffS}VA?z&jRL9DU+9Hd(%1i>33*V<=T<+sS`Pjq#PC8-pN-+=2GHnd_i2yLH7cMDj4xjD zfcyep9{7TrDkdJi zqOrZ8(bLl}Y7c?4T&V(RgsfLo4&)F}J@MkpZcv1~fL2i-@Zfj7;n6E<3X<$T{lXKZ z2fWLHzXiO4r6aW+VgO;g_Xz*{-(Qs(^t60hgx~AbZiv$0*qaM9pj2__oy;}~H zXz_1j1QkpH{PGMoIwjIJRwd%izv_#HJpLba>|pqR$n*aJe$a$x=|hj?Lk=A!ECCIc zR;A(%m5jEff*#EWnO;oY4GJko{;9`aGrJmn^XL`r?g2#`XqDYga4420f!t6c?$Lev zMLDRX=mupy$SIZ{-8Uey;M#o_5tN{$0gg`}6^9p~6))f>KB!^Qum_xO7)rBUTb`6; zd33U#b&z9to$JvnY6G{{31Y1P*xCgkYY$xb|NnJ6C=LT&q=33;pdoY!*R&gSXZN;i zp!M-5t=Jeqno3z)4)9Mo&~kvkHSYia|Hl7c^Mf{YvU_y0ra8zlIClR7trIhNp*b5A zHRoO^&Sqoa*MOufpYAOx;563_Nu=G!JsOXIlD}g-c#m2ftU&-;=A{rE8V1`Z>)QR( z7qn;imPhx?7y9v_B!wUr+@U0ikM+!g(;3*^kp9=*H`AkB}pL7HD$f!53lxH5pI;2nHA*QkIBF3>Uc zpvw+ijSui^x~K#|##jSh^jk78q&3&5IDj^-^0%;pW|Vt%_jZag_;fB&0nI!5^xAIv zBE;a?ebux3{)_edK|^v6Km$`s&~C|z7qh@A8B|J^uzLJI{F>Rb`@Z8b78Q`0FYfLE z>42C8(#F?NWAR_7gx#mt)@+>!1OIjx&|YEDYh9pD52*J5TE_`mQRfTV^mE*&Ge{6R(5Y8GDhVJDCcH4^0=2~(;zBsv$jRCak&jEA~Km-5w3!t4@OEMW4UKW6-0?xg74&KLd{>A+n zY@nI_5*Ei}Y~a%j><<3_|FR!c!5DywtMg!Wpr9+2e6i>_q-IWIS;6E z?{)yOOTTz@Mryof_vn;Owv~gsjp2nV*z&{hJx)kz5M1oT2~b-A(SLAoY_?&Ff;21n5O`k+Sh1AfPYFIjeh0v?otU-WEeV|ZQOPz@>ydBr~o zF_dun^zv@%5My{P)KJaN;L*#vbF~PAPxnb5e%BKX)vO?q{thuv>vBSe7z5ZO4}MqB zamp+nojxiWpaR1HY_k%7lPgu(_Fm&H6(SKp?4yq_h)w)l==url>hJ92N zKs#81*%%l=wJA6%L3>GG#LEBq?*Uul2Z{vndR)+KX@hMA)I5zB&)vZ0$%DKCHYgOs zAQ5zfK!!p3TM+kk-+VD4>g)doTSbtuB~BjQyb9K!cGpQz8P8}bQNr!f4PEs3n)QVV zD8YcHv_S3-!LV+r9GbhK)jTjW?%MeDvd(IQRAdG(9JYd@^qfyG>#-NGaf zz$K4CBti8RO!78dawSCa00RRg4f^!5Zi7qqKqNuONWyep&4SsP50L~lePNOZ;F3WQ z$s0(B&c}gNmlO`sYD)Dz-w0c}b1=>FiL{oSM2kMYG6 z@J)1}rb9_Fcz*FZsHyvIlMn;w$W86@$5=E$tQRqxL9?4b6iPiDcYyB2@#qy5Yy_nr zZ;=-U8$f|js`rUsfR(3FjNuc%ptDFfD`%q^L#MM$w=+wpvp_dy+59jy=AX7&#K-X4-I=tQvE&ogGA#GOBJ{Lv?h8IhB2r+=BcMZBvzjzq{ zs{Kl2L0ujLaCbuiB&7hVrF$XMO{MG}-K>=+atuDbb5uZ%f+jBsM}Cds51!qR;Uj9$ z_^444fF6Wvz%RfEzF`woF@bJ~@#yvaz_020;l)Ex5^g=f-wIlH338(VbYux~M2JD` zVSWM7b>JWkn;5}b)`7Huw2pM*#`~B!%gxu_!#`h-up-~*oOROq_jxda#^McLG%o>Vh7tk(ecntS{|~fq$Qm{QnnjV8tbDph4WyH^*4489YE9s!;(iD2hG|S#AgFBSO;`mhubYI3KW0 zV8?lbML-7ty)Xldf(ioAkt;tuw10#8LKAvGP62fzK`U^Md-Mi_&PaOkavi7;I0u?5 z(>{I7Me{!cw)_fB1`4o)Y#_xEqJ0J)gfjqNzk2gUSpcZx>Lvghuyq#j=w|M$*6`>o zR`5s;aA~~+Y9M-BfW|}le7X-AU-CTofcXXUR*)-Bzc?)kDs)f3*enjB!z4f*_vhfG z&jxC2K_l|24LGH8fMhjK|Njp2OU925cxokm~jQ2S<(E1rG&Nl z2Wu&45sYWD1B`9?cu?{-6fC(B*FCm zxF=|tYqdtr9B8%$Eu02l&<70)Fa?hJ-QFSRsnT9GZ;!(9a`R& zvU{}t_uzN=?a>{r0Xoa3H3i(&Jq`-G1dr|$(I$1yG*zA+6PddT$wD4R(@&WrEO zQQ7Iy_y*MC;SWD)e8Bj2r|Wk9@B<#*pM1K1f-V^mbY0Fb=zE-B(DypOpzm{jLErEE zg1+qhg1+MXg1+kfg1+V+t(PFZNaO$f+t@%`wm^+R8>>=I)px?D7A&NAod8{?^?8|Nl4CE@voZYp6ZWP$Gb2{RE6qcfA9LLWn(>%dA;$26Q;Ln@^;wVJ(BsEk-9Vx%K%$=| z*%)4L2j^GF(g#rZDuluhc>nyVKPGa%1-a574~Tp%+2l{{Qbju^V*YU$?74^N;@}#+|NTnh*Rr z?)m|=TD18GW0{O&!yoMuF~^2Kx}}`QUH^d2J$@~J-1P^D(HZ;awQ%##|B$T@$6Y^w zhQd32zc})5V?%QF3(x<@Kx?atR)JL(GqXm@f)7ALPUr5fJlVM>#gwW$?G|1!)00Mjxyg za%PibLmiVIWZ^T&B<2@FP)U$wAk$t5E@NW=UAEhO;{_Yo#23e1AAnZUcE&#G_R}!F z-FmW4+avk3M{no@&`toy9iX$$J(&FrUW6?J`I^54lsvorH2xp9zFBkCBl%*lBcn&R zpMl5!Lmmeov39y?yy$5I)ghqO7Nr&-sTbO9Yz)WUz#|YI$K61~R18K3Ku66vcy>oy zcy<>%cy?ENKocuy>@)VTN3xp+zkurlkAn|bJv#ji_yt`!9`FnJe&84M;rOtD@$~^{ zVE`F#Xnv#cLe&dYp~&9T0vCEER`Bu;e6%fS4P__mK`l9k7js%c?(>#-F&WG_{h}L8 z%PxWFEIseh%e&)-a`wd6pPv!K(X z6hM_R!aY~*K(&*s9$3fi5*Z}-fR-Ixdk1RZfOi^|zBRsdjP;ME9N4vA*`n$%1WPlbn_kqvq3Hlfw*uZ$Xrls z1+-@DrF{(2N)1RDLfSVkRP7iTUOdY{=~rF_68WgD+oPUjveWIQQL)&VT>^ zzqs=7|Nj^EoB#iR@hTd$DhV{{4hjNj{RW++1zo!C$iMvu|MpKWCS3+i{~ag=w`!4h z9lCU%cH!TCoPRrLbRARyAW6RL@j!JlZu5=EGQY+X(|mzY=$sVjE|T6Hm75-oZ$N#2 z(6D#+C;sh$Jf7V@TsnQ2N*n)BVt;!}Y{&&>m!$4%c*WAI+u1wcc?bsC;nk z{^`=```M+__j~gz#u7OY0p9t+1={%`>eBuDwSY_akJsF;-Tz**IqnBVF8_8;*WP?4 z@Ya=ZMg|5j;~r=a3ux!cW<~}E@Wg;mFYDtN&{!m|K(rXcE^vPB^*#S$+al0N)NzmA z(DR^P%l0LpX<*(jQDO|B;Wdy2KE13fW018pqiSh^XgL`r#sFH4qTtiZT8W}Q7*%}; zMEydj6`*3pr}aj5K~a>vx8_sw$B=7Upk{B|8^f0P@I-wBMGUXw^MhW`hAdRY&{)Pq`( z9-zcA6IIWwMQjYmTu(5*&N}9Lobh!E%)UnvVEdY3`oVf*QT4{b?K=_ywJ#W^9&Vo| zsvfOHpsBR&J}PV=f5JoJJ18VTH~umB^zybvKmr+5y8868vct>-yW!@16hGerg?TS; zI8+NLEPZ-eub@QbGE^lIA57~3OSwYh}KNf&=)-#kC`tM(3IN~#&~SVdjvN|WK$4*F2bX~V55L$vpN+w_*Ow7& zgikN)>u}JhmGA!-U7#s?=6625zW;rCS?54~3sweBZdvFiWzJ_~Xs-RvP?qG=%d3O% zW+I9MjM23jff7hBFEc`e0g47DbPbFU4Yxw!0r@`+*^3wFASadohhJQn2hCX=;OYW& zO&BPPm4J(qYv3_d-YE#vHlmo;jBZ*JD4u$Gvk@8^P&5RgYXGN*US6kAF^1QUKE1q} z2%T;yIwjC`ibJeo0O@4+>E(SN0xo(4ph1O*i+i)tynJ^qI4&5$ad9C89#U6Bkwa=Z zy0&GYu6v&Acc+N|6?yYK=R0WrF{+?gJ<)5#?pP7ATiKF zFpX}GPS824pb0>Sjv5t{w9Xh6ix=ye{`?1ZZ9yhNMp&~YAcOeu0al#$Z~N&8UnjwC z_w|4CzyJI#?Vwdf{M(LyyWuK*$+7WJ5F4l=6{4ch{ExNN?!|i0$%ozC9^Dr}!>{}v zoz5N&J3%uO45b0D-J^U)sG7m7KLHG*UqUz#9Hl_6V_; z#?Ih|Ei`;!?Q#BXA3b_y%>%?3_Ja;4O`Fio?ZCh7+Ka2KfBt*)MuV0CGnRsPup>3X z;fpUp`w8Lqdq5n;zwM?Y|F$3e+djS62%5re#n!-w+_8KdWD|Jp0BB)GH*8t=%bUne zaBzRb!K3?DH~7FfgBQ2O5JOO+?_@v=H+@tT;Hzo(Ob7K$OF;)VHG-#&c)iXEF}zUa z1Wi*Mafm+r!po3>fnUQ#1vCti1ya&_JB`2IMa94oe9A9q(9pnx-}N%+$l$&^;J^i~ zw-g5LtlS3Lz=T+w3-8}`-+FQQ7+5KIxvv6v`EWOMH;$zjIOHKQ2n~Nk{%C#!o>}S! zZBux$4!q3n^ouf(Vc=yYC5qkMpqvIiwnNmTdpBra(bBxc;Qs-S=Hn992WvjPr~s`5 z?&bY>Oo-uy4F{+{3l31!sT2Nf{w&4^99rJ;Pd#9Lg1^NR)QkAXSeoA54LW3_^(24G zAqEBp(1er93$_5zlF(+*JR5is6&q-$c1J$T3tm6SNh+^rdvte0q)+m<`~-6>QHukPAQ> zmqIiefky$mA@V2rTRHwKw+(s}^26Ra6DAp<%X z__R-V1E`R8{C}b4K#A#ph(eHcW)SU%|NZ~p{DTp6)-_lYXh{r;rc$04+`gb4)-PxL z16c*O31q-mAFxN8{{80IkSsJ@8rz%KzZX20k|!EVt9(w>%l;=1}^GBi^@S)&NkPmSTL0OzhGv@D&6g)0-l-S0j*O1KN;lC z5+#sZn5Tf;!s{X~$Kbe;(Wmr898w=EfcIm0bl>FP_G%|X0|UbgvyZIc!>qj+ z85oRDf)1!~cyY-C)LsKcE`Q4$&=6cFXyNoXaMJI#X#HPO0cy83?*^5|45d2V=U;qq zXJY^rM+y)_AAVqE0Nn=zRsmkO4GQPmdJGKByFtY&MAL4tCZ^rv5d z=EMIVbL_U+*80D+2Q<1pr2rI2HK0f-Q89p6Sn!3F;YBt-FGKf<7b$$a44^Zb9Y78e zI}W~&hJm5M{&+L!{uc&@hW)QajyHpDqye#yH-lDMLs+2OWI!rGC9*B_CL4YYQRNIV z2L8xH{DNSk_#t=E@JF8F7lhtQBhU?68~vF-^3-R3K`^ zx^F^HjN-D~3G#1A)N2io?oMbuRl@UPpChQg*$ol^d$AK7mM_{rvoctM!>~ldqZ?M; zl<>UhgQy2pHBj{+V_$@SW@P|520Z(UTA+c>I{_Uj8Q=kHuyhGBFt{3j116|S1JbKWeEht}IwgA_s;QQ(S zcZYylOS?fN1Al)V=%~i-0MJI1&Kebq7b{dijmzDjbz2N20^k#ez(d2QU+5WwwsY+U zO~s+f95Dn<2%LUl1HM22+}iK}-N(@YYT`KlzhL~|)%XDT>=KX8-5wyTx=+8*2Q5PH zX7vz~W9U8)T6$|W0dy9=Ah;3T5CKxvdZ6^pYh}<}IcQfMSg5lRM7`$o=xzovJUUs~ zg+Plnyg6RX%K-(yx4?_35QfBy9tgwZMKgpE@uCXC$aql*VN|@x$YEo!+zm?1btWF5 zQp}_KJHI?^{Zlt+n$)A)hmYfheGVJwGM3&l0c)`Gnup**)}tG&=7j>-z-~~B_Js(T zefk9tm!mLqZHMqW-c%CRkoJfFwI}RG{bEJBB!d3j$D+ z%fZ$72`GnV@P{7&6~7*?{M&yz@^63P!oU3!_?GbPNB9L9K_|=mSTL7>nH@22}TTUwbhLtQ@r3rPrS&&85>ERGfOGb-FX9wZ1Je04-Hd zNbA&0>vZJc-{zuHk>=8w$du;NSqV~{$kyS`$G;6y40O2jzcv7?aohn~bJcR7M5M!= z&v6H+3x}i#uad+;$AeZKV&TKmlav^B(umbol3vBm=81Qeu<=Op_fBVnw%iZTa zyI;I;_x%ex+M4f^q^sWOK|xR|bX`He8^f z@RmRl=LCtXK*T{SP+Cux@V;ot1l1JP0v?^!93I`?8X)z&FY+Lw8Xle13Jx9B;LBG~ zD*;gAL%x3nK40GaM!~oHhfnt-m+p_PCrhk-dUXvp$TAqe_3ZxY(arWhfW!E9_m9>C zAaC+{bO#1>pZsypQ6<7+(1PVg;S| z1lkD<3hxL|cqf1wE1;$}cx2|VNAgk6ZkMABo}DZz8yFosXv52LCwkp!!fMHS5}`uiVA3uss) z2EOzi>;aJbk-{6)nu6~C=imMkbPE;#_FtaeA9jQCZd&Wx($KWl|D`d$pw0h{pz^X; zR4HDJ0d#$sQzxjlD$(-j6;+Q1txh=iLLVXoItttbDkK9I;%{|fWMJ6M&cML%(u$FR z!TNQnp7n437ClDr(i{GkeW2wZ+pqI)Kl?&U0^~Eur2KAfkPc9D0(=8Rn)Qp)3p?1r zw;=o|aohp9ap6aa`3`odSS0jPg&!sUJNO`CrOKdu9SPb)atX3ApaQf`tMx#M>u%5{ zz?Ul-7#MbNKopno?SNde@B?y!_sY&hzj8<^vC#fAE)wdGw0e60hX zrFgBn8+1h8YdP1JZ#zKK7W^)UyKlVa?>_C?@(mnv{H~|FZ-P=Sd=Ee9z9&#`4BW_b zj62LP&#?a~7sIiqTnuNQaxq+a%EiF&41xDNL9jvMF#gAtPDoC zUohE1N-XpfI$OV$n0WNE?Dyye1+23N|8^dxv`#*cZf6hvZ7~9DFHVB?_H6_22?h7G zpxYlo3Oss6_Iog2f~Z@FLtU@v^k~pr1#iJ_A%+*;-&h%5l-Yn<6W9*k1?LY)wFvRI zH)vr&>+O=H2HXClAU_L2S{dD^Up&wU`MJac?B7}ih=X|c^KXywV0s}8a?N(AtHGm; z9=*I~(P9iQPJU$tord+v8dNHvDiD1e1$ODNT|x{m7Jg-AcyY#>fx-ATKZ-%%j0`2f z?gcd}knaly4VEPT0`GIX`Jzh}9C0PJ4Yucwpn51q~R1Qa(i3hlvFoF%iZmJ9(HuDmOEB`Y^G)Py_j8+u_&79=*JiqQn?p zJpIDTz`yOr3tp&%6lk3@#BZ;5g3f;cb(KC?frf@a0(O?B0j605G zBP?S6MuP5h1UV`iry|jSNO0t6f;_+iQmYR-eE^i6ai8A|slP!(HB3+k>o(ZB9Y&3Z z>AGMC3wO_c0vZ{-VTovpd-RIli~w7^X@?NQi{8(y3@>(AGQh9cf~}i@CI_VU`Xtbz zo7USUIt{kh4x!qo4zW*&e|xmS3();;p!5Z9NqF>%W6i|1e1M~( z`{xUNkQLpsFW5k1DvR|r5|2!gAcSqPUbMDf@w(jfX=^?0=IAW zfHxh zn(hLxgNHYALLnA_kCo-$=FI>9MDq`!@_dh8QE6dlovHE;T4#c5Llm=ifNDxq5m3_t zRRmPGql$pqG$wjjvIr8iMUr}BeDOXN{S<+C8oGq{c2 z*SpWX@O1q9zxjup1OL>c-A7Su0v{iWDgtUapooAu;LRj}ko?`!FU}aF)CFgQz>Zk9Nr>S^<6BmS7i)}>3TMRp+RYb}MZx8%4A_x3UbKKl zR$#}FfgB3O2=^pG-Q(0?yKE0?Kz>&PyGNs&`-KiW$kmV|5jFYbIq6yFZu!Sn6_ zjsKTG9cx3d)jwXWGy*y4Kj@A&UfI<`3@&H{lW%fUMrG$9=)P%0bsYqgWP5Xa$Bk)jwS^te!%ss0;sdw{S#EDle{oa=>;ipI%haHIJ80`7XzYliyZ;RX14AeGi!TNY43NXB3_v9q ztWDo5`r04tv?J?<7+%bO#meyF6nKs|M#Tbtcq8%%GB`Xy=Tj{ff`lKa{m^=#M2LTT zgwTsV14tXY88nj(+23aH;^g=L|3Tx8pam45_ARJ_jDYUgfX<5>ykPkOsup8ZB3^hQ zn*ll>8a`6p@Ex>2(nlo%J_rEXX#yIbHogQmX!m!JK`!84xW{3zez*bi!5cdX7*K^` z0K~uG_!or4e|3ZHw;gEluM7_TM9_IlpzUbz@Tk*A3J>r}7ogjyK>JHU!|c8AqbLmc z1sFiv5?oZk`+*EzeEkOUMT|f`xmSXFQoLL$s9cI4|XqT zZ0Q9P)V&@Jwr*(dovs9SuO4VL!k~LMXr#FHe<|;adR{h$?jN1aAb}T$^cWaWHgSQ@ zoACu(K7Fka!;2!2<#Y9*mc!b`2>YABCq3ORF=?Xx6ykLQuX!&9$ zKPX}RFR`(Zy|)diV|4z7z9KlBmAm<0Y}tZr>5EidaCw8MZ#{ZN6MeveYqds*;f3gP zR)!Z2x{wMFa&Z9Id651FDE}$*gYzF~7bR$<9hCnBUhwH6r8ijq^ZbIE|G=3hL?r?g zM4*HRZlS(t{sKvH5id^aAQ=LVPX}=N2VXjMyQHSU_S;s}_;gnQ`!flY{y`Hu(DX0x zq7K<8MEZvo2)!XH0bs{~nyF|R;LB%-a{^vip_tJtYUK?MCSg#`^X@4t!wX3rXc`1% z0I+*O=ldp`fm?(Ipwb3jyZw6wiUrWoATBDf+RfnqCD=-scvGlJu+$74uLVs>A#E~( zpMj|0)BVxa_=)k`7gIrp)AXADn6G%r8LqrM&e>KI_rT(+lb} zzql3*8oUQhft3V;Mgf=|JM~MSsPYZlxe+{^B1P!pq zIYLfF1mz?MhJ+s|z7K(pp=!NdqSau_wgol5!{xy7Ezlk9@?y3YI3>e+vvWMbu~WKI zh~Y)R6IO;7)mkVu9m4!1g!#)rD>zCJ13lkmVde+CutqiC24cP_$ovnFSs7kP<1(KK zVZIxh`P1R%7reNwiQ@h{9$@!xT_MEqVgktg-I_Suzla-@?ZM&mY!hnun8VFacu|dN zehtL@P>}fsAoHV9&3EZ$W&JM8V0^$8GSn{0{9Ts8nyZ8xG@)>a#nJje%|}P;13N*- zit)P~gw2n@#t)5ezu@9#VCeqs(Q8^bLzV%Wp8g;A=q=-5zR~=jt?2EG7vNhUOH?dc zZ-d$b2K@687n6YF$H3^eN3(6lH(3UTQl1x;pxaeCS);zmGVEk7rc@T zbeei+j*0`Q-QfYMP6A$ZfleIkWj*|umEjnx$v0UBM&tiJy}Xy7v4RhL)$r+MO@G1) zKG@JjMZx&wiNK{M&r7fQs94jkT5$OsYs3==MW zxqZa^SEL zxbFi};M2?63DVC3)xTp4*jAAJLMmYOCCVWCubYE7CrUr>U{nRME|l=>V1y_D83=X@ zvUyvyAnw_55qzmL$UKHAV2!2B8yFD|XsG1N02u(%3&J~i`9Z2ql#1_I4fgVd60RN7 zAS_g!Ak}BiG*t5CqUaChgy9CP`5#)S`Wq_wicrF%OAitrT04&kfa>i-Y1#+Vntw=@^X_D1Xkg=C ze6Sc4Av>N5fYhO-4#@p0F#m(>JMgdh2P6M9cn~1DM-U|cg9X(+Nb(=`LH^}JmEUns z17t5K{QnDrSZJZ<)605usw~6H6b(pvYN+HZL-rr&l1XNx1BV-I8`px0BamOf69O+U ziL)_4>*sLrdDAyR!_+)%XdPPa$KWbo!lRcpVVW%H8o~b_mM$s|koKR;&lk5qCs2U~ zm0_3HAa{2_>8~8wJwCmxl_2+SQHQ&?0$Cm@JRa(S!b1TqJizN`tWT8c?syDZIb(gH zL}3R5H#lTU#CEVkSv)(GAS{sC$oUCmzE3af(MhrlFAPAX4d_Te@HL=_^anaS>g0<{ zuRx_V|5Vm3A7nub5+Ets0UTD%l`c#k-9Jk?z=ytqmeF;_s2IH92OUz}eIB%80Mx$a z-+scUm-W^ZSqA>?m%%j!XcRd9kDvyV-lzkZM|Kh-(Y)fHEMmRE(Wg8 zMftbQ1}y}7k*)+Q9U&*`r#pfxU5AB23@@bburj=GQv%OafEyJcTM!uDK8M_&dDRho zf2P_t&@%Q?`2Cq2MY!(I1iKeHQVVGSYr3cyyqNkMluAnN`9a5voP_r;L5;@<&`53o zxRDIj@FMc%|No$~0Rk9G_(6081OHS|esPF~ECB*FL*WhvyBE=Zgq$4;+Nat4M!}VT z`$y2~S{MH9k370RIvBlu;mZseFs`vJN593tqMpn2Ga|o`M0qKA?t_w7v3HLEqe3l=Is6s8rOj? zbhx3y!0M&_?GMpyf;;S#K+f$x`$7w33^>&^9|89f zP|8D4{0e{qO#*hrr-JbT&+ZqUjvPMSzd9X3MS(}Mqe1I|I(tw!b=IgjcpQAl^y0A_ zB-&aJlqmWnJA=*y_UI0_0N)m2o+-r8?QGEL%+cx02>Du z=ndw05%>=@{Nt_R0osz}tm4rdtN<#Mz)dgE8XmA?<6df^tZ@gGmyorny}S!v%QC#k zUJg3!mbVAQUcZKoVHc<+?a|BI3=;5L{^S3D)|%Id0@EQFRA5?k|2*cR62b6d?SGIP zTvQT3r)h+!WV~2&2UKwIx7-Ge`*h3tg0!~YE)lV|=5N^#N(G3yxi`BK7#SGA_0Ee{ zS5Rnxj=AA)Spd@7nWGW_I$s&oJp?tTLE-b_z7R-NiAsh?=Vs6*flljV&7cC5@x@lq zL6SKt382HSI-5Z|oG8}IP4f%n6W&MGF%7G4NM~`l|2ykKH3SYF>efmWs z*!0scEI~KpT>;IOcIT)BfaYjQz~}Z@#77_g-waw)_+lGa7BmS667=YHQ|LbX{{m>- z0d%h&N<^d`^6}qp2CjmW@on80^ofTRS)PWWUf)CYx zQRo6T#ls`nIRGXBnpAob0g;ICNOn$uNq}1AFYF-_86L^b1t=0~5Q&QBY8Qq&c8}(2 z4~7!;=IQ_lCxW3ws<}D=!pUGL;cc!iV5k%EXs)hcDCGssXqR34|NrF+(BVqmr(c}> z@&CW^+m-_*>fL88yH0?rCx--0R)g%>}+ zfRae5Cz|jf@I+~;5t^{{H?V4HG~p7kYW|k*pgr}~E^PcgpevZr6y<}j4)ONj-*zFb zGn2`q+uI|pGm`~EYl5g_j%V-5n0{M!zFy8)Jz zKAG0|kfEXFQd*~n7+9p!Ljp>R>;xSa0^%HVkYWVUX`LD1H5qB08A?#TTpGX2OAz~* zg9=QI7KoqLnV|!vH9+(+2R*2~hY5(E*6CperHw%JF$W9K1_Zfx;7v>=LLS{59-ZD6 zplJy$MFxfrX9rL%9RZ5FS@Ph4A71`#pfRrQ(=UF4PiJP`1iqW)G$ciPbVAmecDI37 zgLcYJc`nQF|H6y2;M1DGD-jQa`gNeibD$*uVv8hnXb8juRUA+ZDi4v?cYz8E1CQiJ z&?;HbmZ_iopj&`Ex;sIONclBBdGyLSc=U?g1#J`P&0u`N>jYWLtO7cS=On)%%MFiC zpBn<7`2|aEaCDm7=v)sn$)mF!q#sn;A?;W}z6J>D8fbeMR6Zk*SA~Jv$3Dp$K}%vi zK-buHf_&}S{mmo!mdC+oEFQgK0xz0CYstaKZkOnJbe{$v6#L>X=q9<7puJBnH#=qY zJUU(UI2?Q37(3g+W_7Ly83b~d0eGPlD9GSvn1PShf}hvgee=ZyNE&VhU8o9LZVoyQ z5_G&X=*&pa@#3Im$j4ZjpUE;XcAtI`bRCotO0+;{@`7Z#d%))%dvv=S{J+q8piAb6~_L4tu{Co3BR_)rND4Ql6s zPkMRrboKB5Ad5gwX*p2B2hP6WHu3Efzd;A~eVOV{kC~@6r7NTo{>xQnLg9w(CBOnYCPB&N<`iGxBGao zxbSZ~4jLovKKtSs8v}#GKhOrm!U$6Pk~QojY@^9@qbX#b>I*G=E%S8pM%ji zkAu%yJeYTbBD~q2q0Z9y0H|F9N~tOqF5M@<3cPMgUX6;ui=<<}|978% z@%lA5A@h19pYZ5r{rX6j0o<0G13uUsdNeXp3(eK|fJ^r&7fWynRHx?HeZZr8BB=0i zvE&gbW&6x87$U&o2pUX0AmL&SR#kHs$;+VjQiE;7BT!#k^2NQ6JPa)dN(5d^z4IHi z!W!0>1#fi#cPK%w2hYDKyqNgy|9|6?$5baI?8XW4XCBV%J&Fza|V+@J zp5v^m9?F7dA{maePJyx@Bb#yuSQ%ctlm%^w0gVf;{{Wgu;x#Z5V|cOn4tSK(r&*Ta zg*oV+nO@!rAhtGyeFemphp;7DK>H6N>=+Q69l~A!V*kDfHuDLH{T{;BXq9Dn@fgC+ z0kN-N{Qv*OrLCX<a>f32UkF8xQGqZY3Fab z3TnlIoAJH7cYzLN=&VukNV8rID!og&(yYx(Ssk}CzIOBI2JaGa;op9YfBRMNW)Y7J z$Nv{y__zINIZ%@Rf)RA;9_t0rFl=Wt=s@36A&=u=1}JVlAf~5vf(=gVGzYDQW=(7T zR-)wE`mIFv#i4a<3_Jh-XJBx#{^-c>bk2kMphssjsAhOA0-8I8FhM7?LQH?b2)^K> zM#aIAf7@|T`QiZzBuGyoE)I0goaj3P@W8|I2|^4n7M*5gcyU$`+II%0a0N$@I&e7v zBS7gLM|e&Ijh=uu?11)QHP~L9g&LkptdQ`0gcP2jW8Xo=Ehs!eB@?0WOhANZ$%~Dk zqv>Gb397ij;R#|u!xLnBTIXtz!N}pM4+>AM7e#Bag(ql}P^qHF@n#SMWDYcNL0s@L znw`xc8(u5{&F+HMkKzv8iTdEc&FU9oc;R}AmElDJSWk>f08-$3bRY5P%#eWez#HFy z%my7V=>s_lk$?YB>ns=kURTgk_|6CppI(u*pp5IoeAT0~K)|Eh$-}9kCV-8>t5+tV z!~=8yeyKYDcIKUo4gdeASs$$9+6g*;FU|U3sX+Jn?(Z-5db2Uu{+DN9sFCI0?#z^C z{iBqtp_-F{zvU7G1H&C|`UO&1A_KC%G(63^nx&2-&AOVY*84R_EgOhc=LmAZP6jpx2H(zopizq# zwu`~lgoa}``1DZFx&02{JGVf?o}kTM4jnlvE}+9XJzgjt0JUkhsDOHhph^{VOtwe& z8pu5!jYq&i9q$;2RCz$xdqMj5ptgVltmXrqnE+mp^3sui|3~YpfZDPb7k`30P@3z} z?H%FM%L87!47!^JWUveWe#pfkPK+j;AO&uWC7dif89`@iR4xMhK^JskuaAmCr;CaK zs6qtEff}wFpfe{-(mG32EYd(nd0D-P*#G-K=mHXu!AQqzNO*QAjqhD-Nl*Omh%a^UUlB4CmW zyvdz!Gt+CX&CIXajBdYX+RVtm?Xa~|L2a5xw^Iee)7w5fTA8qwc)Zy90~9tTtf1|S zRvz8%6^BF$*-$3Q~u4Q8qY#M+kuOxJPFJa(epU$iEGI zqjvX8>!O6(44=*d4v%i93>PaNwvwP1#o*2YC(}9ADz^dk(5)y8A&bKTF9H0Z@bQpoAl6 zKibPPpz6Mog#mJ)hDY}lNQuz7Mg>%v?gg)S?cAaQs-e5LsDS)v{S}nNLFEU(^H-1N zgFHUT-~4)6wt|Y{7geD`3_Byi<j4ut?n(zbwE;A8z2l-2p2-hpyENQ3bK zpX8&U0YIP56cvrm7!?!HMm-DA*yIb9P|yMAJ}L^JD{wqsgzkovWgtg^$}o^iK}7<{ zO`x(3T*g7}34!b?gM{9hGp?-%_&eB`K%?q+JUg=$!W=^!!#o<_fHZn0e*o7r4?UA# zT5kgNIrw{zgK8SsEvrqS&W>yAN&b!vpiNX7{Jkp}85lnE3-qW+FfuTBc1Ck}bl>$j z_?X3mIfBC%bbk*2wmm8Wj0_Bp{F=o#_`|=sw)`(O;nzD?rC2KenO~p%13pjJURzOIHUwSR{nO|TE_&zX%u>Qx-`~tG`wh1%1@N2fHfa>)! zHdp@e1Ftz<_%#lHcHxgb$glr_Uvm$*b5O?0AO8O}JHN*7&-}4J`1L=Pv-4|w{>&fy z3DoHZ?bLR$vM$wiZTZjNG9P^ZjGi+~l~}0=zg{&*6<;Y2zg{s<6&rs`69WUo{%|%1 zhSvhFE&umNurV;~2xDVl;CKD;;>>4oLC4YfA0%8F^%*p-$I^ZNGrwRp$7g=QVjh@WJNz27C#O~oTzZDJ2{F7dJjlxMB8DA2 z(*<4#)(u~x(|iQ7+6$8Zk;->a<<%>DUrmf*KL==&1nfMdqkDc6cOFt&XCQRv0wjl| zbq4Yvb^j3crvmi6Zv~I!o86zfPrsOS>HmLg*^Dc)4Bankf;_r;Gq1=pxbzk?dP3(P z9Q8qcI8cudaxS$;GOra#^)lldhf-REAszXR_3a(c{wE^cbQUBTRGG9NT8=g@r)G~^fX zLhC3v1qy*W`T^aSA^m&@2gm;xTHluNy@);nI)=IX>Ib90k+ho z!`!9A?!_n2{4D6ydq@6lM|`?dRKN>Yz*~etJ6^%FC*V%eO=WNz-P8=)|FjRZ{|T%! zMkNB;ZjX0_AEyRRFOdE}s7-bAMb9&E5S3Uq*k0%b1rMUxq4)z7JSFnophcKd{{H_D zYG}l;fHDd4b|sHq(Qt?h3_vd62Dt!oUn|4zY!2~Lea!|gy0 zf4PU1;kA(q|Mv5szBi=oF@-w*FX%cvXxYOEaqg`~(Eg7-p#2|Au(Ahv^cFORfG80# z!gm{_HS}Wf6Nodz8*HCcNc(NU}w!1g8TS z0S#Z|^Z**K038MhsgSIp?k;Yytp{x_EkR_c3tzzQj)W%%eUQ6v?P6tk9RY4NfSNQe z{M*id<`?i$sc`8&_8GKI$e{b`XMO<}l>(3M)1UbTeN;5S!U``0pfLh!Wbs22%^7*H zpO)4OF}!Hl#mewvH3KZs1b~M8;cE*(m%Tyzk7)BDp!EI1v-_h@FYCGj&{~pP{M&!N zC}shTq?bB^HUjYWfgIj=9ORu+F`r)6vOBs50r*@^zwF{m1TI*+W7-?(3lG- zIuty*WpmHUg0Bzi?E}?mym25k3&HHu9>-a|LB@b~j`l%?x?@xnK#Oo*`ho>`^+4L2 zk7&Hi?E@`Rf<-oXzYu7ONCSMXR={OY7CKPE=FuI&@md{JtAP#$>kUzfcoDJ>;GQ*4w4lEeA?vzz1r%$%-+&*ti3lLM z4;$ZrMwc3F+0TGho3t>2a(QP22WW)nh0TNi|6gq90Hu`@)))7f7#Loxv<2p*Khz++yZNo^Sq>mNnp$Oq-HzWM*(qjNK81j3^mJOTz%=L}M32d$Ysz{kQj zg9hFBw@(H&&V9N)Km&Fjz3tFJPq6mZ1Et&^$H8WR#@9T$!2_2d<1nqYdj+-@lp#I3 z!9%4Wb=a&0jm+|IpA2ex_;iEET@luTwL`51u_4yN_6+m4o&-;HL#|of$pPxfUYh`J zsQY8ps4Sap1LN_z0YX|DrfweDR`x_KmV1+@(l0!kH#nh2CypzUE$ z76LCj`RUPp)56gKw4fh+k_zjKn8TnGnvQ#PUjW6g-(AocdJK3ug93P<%Y}dYN#E`Z zjt3tK7@y?de#nLUglDpYLhFG#DWC2G-4{K(oitpmIZAXucSJNFVDYrRQ1jk1*@>g| zK%Im~_XW>xCjpQ=zsLWB9?b_>JgiUEyf-><7`8wbRDeL*L!f0bF!#xTP6!0$9@ZDT z4}lzb0F*(yPrq0TI=~ZDqk&h}9XfG9+R`gwvbpssn1iUz3qZ~+k^AR+}sl<*6- zsDS1UUu*==p(2u12zY4`q_YN{sEP*nzo6$Kc|dL{@aX<|jESL})1&*-i@rvPzf3{L zS?vc6XE5;hgN|zR=;dXS6k~W%dk|DGLDtQj1D#>A4SbH>VFm^U8;24NN65z9UeTWt zV&L-otQ)wX;s>9U`C|V;R)&|iLE6F(fIJVr5B)mG7Y-hskh6wd zU8N0b1V7*Y|9{KvQag`se-2P8QS;~(wU!WLcwq-xi`9CdR0S;4D{2N3)PxH1gC@>& zHi1H{g#8#B;|9jpOrWbu=BR)I4so>(VsI2xKewJNk?QsoY5vJx!r$xo19WOSd-G4w zs$EbTHi9o4hh#T!`yO_F;46>hn=i7Te)->eo4*5e7^}7H(qpm=p!2I7e0ojpf+`zO zm&c+e!lRqF>6k2oXKxtC3r$5(9SZ3ef`$@66_kNTvT5cqSqAIR^>W(xJbHOP{6B1b z$))=+`0lLZoD1TCX@(WwAg zL!rqJy7#%8m-Cn`1HT}{Cw>860sim4gp9Wi)xx`LONS@=Lsa{+Y+ zn~%Vc>;vatkPE@*UxGG18UKGF?hM+lbJ(L-)VCNkEXC_rEX3f`>%sVfR|e!a(AvY2 z43O6iT#Zk5)~INJisJ@H@QsI{QV~3+)_vl?=-(93tzb7iK-U53`}F##M1X4<50IQ- znhFv z3sj~>qZQx~_kj|U(qm9Us*tpnO*kUUP%G%s&FT+!3Cj(LMsTwPu@ej8KTvz_#q&pB z{=fJ%hn1oE2TO^bM=x)im>9zgM?Oe85NWVrDB%Y!4U%^NttexCa2T?l?`1xy+-p7p zp16h>2ihO1@nZU;FaJH7ZMTDu36XiR16&{St~@Nu@InUSxtSm-Ox=+6^Dn|7`ujnO zAZvl)RzMGZi+EuSQ4kn>tkmI!z>9^3)iRAhaSzsUjA2Vce+2)dQG8+7|Pe~ThW+M1Q`uq*?AiwKC*&HM8ZXeK;FrQ*eQ%Rm2pz(>*Y zw|oaRgF5Gc&u0Xsf&g%KeQ^a;{&bh9R2U!dWd07S$qo3!4>;}vtsC_0z7Hz=6nw1z z@i&7{q3T?t0%|>h5|9V~Hs+QCB^)-qB`h{vr5qmr4|`bOD|+eC{o2F&Ua>I$Hf9^% z5*{0_5}4FmP{~(tjG4isSM;k0s9Zk#;;9YjXhz0T8Q0ct6}+H<90kYjb1(XS|NrmO zU7}L(5;RM?%N7*k-Dh8zgU^kHlprTTV!fhM<_a+!1I^W*_4t4Mg_<3xm@kz9t#Q?O zkpa$>=U*s*w1F;De+jDFJbFc&p|*dw1uGYU=DqVT#GD{knj5^%_2?B%fGWFyuI#-d zM48cRH;-OXTd1;?5M_Lz;&^T8|NosXDkiU0L3{F{3OXPPgy7a~2Q9S%4HSA<-{Wsu z4Nh*LOEbG6!HgOvRlh)O7#|gl7ZaqxmyW&YkOmb;B`OY}LyW;ocOlX1)2aIR063{f zfDX@ttVV}0p{X6*zG!}8 z=l=&_8hk%E9)+7YEz74x)tzmceVn}Eg2ZU?Q}~3Wd{rX?SDNwH-pBX)2y>? ziVeV}EAsl#$>6z(?sNRxk9#m5=oUHjBI3sX|7rh^r&(9q6x|1xr)k#NcEvg%tsdQz z!QGebM?HFZ96s|4gq-5&7C8kvt#RUYkhY^BwM92PnsqT=Pxm8=Y4yFmnQ`w!j0upi`2qU?8r*}t_O z)BZ{<_9KtqfX>VR>4+FLwnTM^rbjn;*%inkB9MUCcHRX#r2GHEYf+H@)1m&4truZ< z!Lbt5=miG?>Y4eV_8i*%2B3Z{=*X@Yhi{{J-_WDG5i}VHvK7=D$#8+r`htyx-E9B~ zeGi!J>{xtXy#gupk^5u(+dwx2zwidzI~x-1w@WNNx|>0LVUWF&9^Kvt_t`gH$%QP2e{2Oqq+aqG)}-`4;9 zElr?`uro%bz_WWk)B*f086d%K=K}CVBFGtRAZPr);A;F9lz{`jLAv54jt)lu(_E~x zO^VIa5c$`qyBpM}1`S(+_J?_PU-#@jZ-T(igi!{@$olT0aKulr+6%Z93 zom;?FF1WTW33V{~1~S{C*xRRjGiWBjfq&aO*KVG7p1n5jTw70;vbk91vy>?CZ+8c+ z13l*1eLW3SL3nnbd69YV|9{s`op&ys`793qKqLRh(yW~=inc=RV<|C*y4QRV$-T1fhaJ+bU581tDF!yr6^;<#ogN6uD{R`1=_yAeI6->VXyVx_c_<@qY$ToMk3jGKm(L) zpy@&v6$`Kk3;#A2&|*a&6$9|#q(%qmcq9Es|Nn#bz4w+0xLBLlY<4w%oAw`6Alejl zH}3|`!$Zyh2NjAHb&(C=B*jqT>Dc|%v->Z2{KBUjd;^4M_jSi^7YiBBUJn7^ZXXK{ z59af(-7KKFXAO@|9~A{qz&AVqt<~{pKCWQB8Dx0PA(zh8AO@(+4gif>fC@C1&efoP zxesLaE(UxPETYnd)Q6yjz(zMf8L}CYE)SFl7@zd$>;Tmp9-WXv5?r@|>oaz+Qr3W- zp#J}X5)n{a)){pCLN}`oM6C1;xR!&}=b-zcFYz-l7@c$lt-=89%;0Yk2JQ51uFzrR zZ{=VCEonTN=3?z(RxJ30|Q9b2P6xM2UJ-Wh-?T* z7IXp%sw@XYHU=aMI&BYCRsbTK0+I#o@6WHXQh0qkZ6h-?W+wg5x60U}!i zlC40Nl?M5jfsvs^sG}QnM(DqTh(&v_sDY?q0;>V-Ndu_?C00yxSioxbFfcHH)PRaS zOf?)}HK3b=L25w745k_Zu$n(mb3pU;m}(TjYCvN~Aag)@2vdy%SWOSq98krLsipy} z2Gq6(nFDGLVX9$Z1ceW1Pz$66R0ATbkpzb!15=5>ad0gKlI!SR0-9NOvGy`4mip%8 z!B`^V($NfBG~>8|5wcztbf~N&|F#2Z)=m&LOkg#j+YcT89XQ?$D&R5Huz=Ov0bPa* zQUfX%G1PE?)qoDA1e*hD31X-b0ILBNLtr(aS`$T$_%|mHg%ZKz&7fg!kc>-5GiV

    UG0WC@uVt7%zfE9F5 zQS*@k$9T{}o5PNc_Mpfqmh|Z5jbImJcoB`RVi%~e09A*eW&mXOTRW(y-VGWxDU~rk z`67c8)REf)9wh^J`r(FyPFwDTjAwatu2BI+AHSf32B_Z7aO4;87XVeS39iQ9_ys*I z9QncL;5m4JWDNKPJt9CN4*Y@+V6_4Kf*uthkpzCh29TRU$_n@eJ3yv>a^x2PZ)y3& zFW3MYp!4X?2=M7Fi16twNbqQVTUx=t-9ZO*Y9dE@nn$nb(}Q3Bd(7zWY5L*F&EUa& z>i)WtYi1J=AR11qTtTZ!ngl z{_TDy-G^MekEJ#LWGdopKEd4S=Hb$Pz_I&6TJukqBChTW&8K)e!#uhVr8WO#E8+n0 z4LZX-T==(#nK*WzbL>6_x&}zsrTe5y_rc~LY_&@Kiw_lx{Xf|JgT$O}gv(CAJZsH_5QP->}RWMJ6E(D47i zYwME=cF*K9X`Lb-uB~q?_&mD7syvg=f`mX}1u{sc`viDr=!+lRV1qyf8rUFX&dm2c<$Fk%XM@ay< z>6B+vw1PlKwNl{73{)OEMg2VTIYaWxD7P;(tTnVc--|M=t%m`Hc%nu z(Ru(h8F}u-TvpIFxtE|*sX?x^D>n7*cDL~8?gOcE<==iT&GG*+=Wdo0-n}B8oh%oj zGS1yDCs;aNE^>f16`g+JdJWX&;q}`f%h1UN>OSgwbT@(qCO{2%DWvwfNB0Sj?gpq# z=|_*wjUe`Gc8^X|!40wu-Fz>qPX7Pj%?4_+Wq?+QfvO46$}mu_2MqxyfZB1OqR9hM zsPW4)Xxecz7};?%Sle+kxY%(s_}XzZgxPU3#M^N*WY}>t6xwlvJE4&FUH8owlR@#> zdZ1L$qnCF-vlwXjK_U93?`)7iPP}Mk0q;OtcN)9~3Ea{H^O zAWLZ&&wcst0h-~OFK&d2X&=$Hm4}2a!X#Ep-DUU}dxJ}#%o*4B=o(!s6c7leieY#J19(>5^ z!wkMkt=Easqx)(n*dmW)7nKAL>w~VHmcE^Z93K2mCw!6*I(B->c=mbiJ|8_?c>l?MIp52Y0%%9e260w2NvAGl6vVrs<;o}L1J$iWqm>}gTZ+#oY9Z2g; zUap=AaR?+j!1Em(pkfHJe-czPDme1*e+j;mV?W4kFEY=79md}RNkY>hj=RL)0;*J6 zZ&y@1@^5#tu)a}Shhjo0d<5`62NR8&^nzH91a~iCqN+$j%|V0 zavr_BZ~lvd)=u{Fo(3`4J$iX(HH$F3xH=6-w1eUsvOfZxw2j|-bpPzW`(o-zaNzQ{ zfVvnS-RESn%%d~s21lB8xlPd(k8ZHq7eAOm^ElvX zO0eM`-Tk2I4r2FhkYwk2ut0Y|s6zx1KMWBE3v{13zWHJ^ME{=^5dGp% z{niq2{UF^R!0m5%?*LLiLDnF-BYr19QVuSe$3ZsiU}j)!a6InF4;Q0N8NB3bz<_iaZ@pYd% z_)?zvqGPAvac2tw@Ww@N@M>4ko_^4gN8P7ifX{~mEx&+xJN_`N{4Y^Ky5Awdr@IN9 zXuEIubbs_rZtwtYd1*et=F!XI;Mr@_(CsL(f~Q3KxI5_d4hH^hP6ZwA9K9X}o&5iu z3SPcoWMEh!P$GZa9UKbL{s zX8vtXE*{MXSv-10H!+JbbhvZ8s8R$^Ua@zwzXWybAnH7NMHexPF?ja+vAl?cDBwQM z4sy=R^PpBE*f7vpH84dca7Cbo>q}6R0&Y?TOc6g^5$GDHm!Re$Tv0Mi(JKY8dpM4> zgB<)i8LlD_rs4!#g$U^C7Du=Wdzgx4U={qW55etA@EBQlhYt?}LoZJ+sIA$_@6inw z{oeo*b?kPN08J`_hU*-_sRk;2+(pF#r2e>ziVes$$6Zuh!0FFL#RJqcIPRk2^S>U{ z+w>6d=w|fk_Aqe#f3fvIMK;Vx(4GX1U7-755JoD1oPFFyMFnIeXjP03$V`uJG&9uy zJG($N{f8tGh?^UCfYJ-7xGQBbKJc0q+%E%FO9`MBSq7+O3Ob-Zz!5aH0$LB(86Xhq z(VMZ*1F|2|qch@zNB2#S&Vm;nofQu}x_|j}CfxAp%(&pwS#ZLqv*Lj9f$xqg3=E76 zF5N%UI$g`VKcscKrn_{1@aS~?@6qYX@6qY{-J{dBp1&m-v_!c#kOg!gb2sn5C9(`Y zy{`4(un3TF{C^3wUB(`yrrWpPqc`;b3(x|fmIM4PYEVI+Ue|Pw-q7+FhrkOn`CE9I z85msnx2L9i^tyg`;oqKH?$hhb@6qjB@5;aZh$Cn(FlZ$Eg%GGa(Ovo0;i{H@EtQsDb4L5F7@@#y7U z6Di98vg5^M@BzF0t>8I;ZhMc`|0SCI@(dom{RQCV>(^c|LK0aEsC(zr{okW|e+9@% zt^Z4J?P_3!6>P6T*SA6E&dt!ASq};Wh=HB$C9Dh#jyphk6?BDJ3uqBaufNI;P6N_ z0l%Q9fk(HqgGZ;M1L)%K?pXd#M-QLw!{7kkItjFp&|LuBD|H4Px9HmXmcIp5fTX#$ zKH+b91={}VqT;{+TJFvO>WqWe^%#KK3mPv${aBA~-+T{iOVAlx?cjjxWPB~`+xj0= ze}Dx%JHeC(EEK@~Q`!UtabeKu=;6`L`fE4nTv3SAI&I(VmSuRI=+W)U56%;?{82$>->wa zzgZbxbNO_aet*s4(Ovo<)Wd%Wmhi*=T$IDmH5g8PdBCFvgUQsBn|P$>XvfP#udXfaS>Ygr;@{4m20B5pRDgfGI}?cMQOep8&(eJltOL}%;qvH)ITW&lAU+Pd5C|k|5DaRQ zfQqzkPlXq|eu09}TjRw>2*csU3NYjJiv=JWsjm!b(tzeiJi8Bo_B?}{5{{7bB^|9# zl&bH9958vYR2JlD&;eQ=y`mvsMHya{OR+I@yQqLFevQLBK>DDwCrIrZ2TxFw_7})~ zkshs=N>%3? zz7R<3WCpF#0Ik<*KH?A$-b4b~{SI5S15<+$)lSM z>F}_~QQ;(7Fj`#6m=fC!z&ByR#)cyNeY(yQ?)kyB~vVI#6ta=dT*y1c3a| zeG3%!C7`g+hXlI@69Yr1iwYvtL9GzDV-XH?06Ea%#X>cR>l{3KMb~kiZAmI(tzlqVKmseU@gy99>H1L)SA&=v%??K0ZFff3E1*GGJ^W2~RTMtwUbzku4 z<-PY&6f~e^@$xJOXiSjx*c@4gW31cf$TBec^zw526lDNq4+ZdEj#ocK86Ybk|BKqW zftEBv4Y{c#0x_h619a>3f6)vZ&|*m5$~mC*hoCu2k8Z|NO{n*ev&KSQ^k4M7tq=p) z9qV95d~IiC@agujaNNNFauMjHCddC5yKl4}s5JKI=2Zh52`_>!dmLxwhnnWm%c}tL z4XD)*3Y(X|KnIe5c;E>VHAnPDrn0*3O|IMH@=mQx|1GPUL ze7hS#LcXmBN_j!^#xOGudv<#Yc=U?C|1Qel*?16?$U)f-)L&r$rMB(~pixwCYZ2^* z_2_O`#s*GEa7Teg;eLHUb7&(Q0|TVL1*)+e;Ng4I_`gTi(0vy*+jqV_glh8FzhNKQJ z0gvWG65wEUkU-XD3DOmVt_!?Y;Jc#?s6PSSY6^<1Zcx!=0cyWP?NkQomP6MK_AB;8 z2QR|FeuorHaIb%TC(7{R0=OZKRGEQIgHS#Km{ zQQ6ilph_RC-=kNw{lowNjyvT+eRR-u98lem;;Z}giy2^h!HU6_fhtK2uqQyx08k?e z9`4}&T=Ng6(pso@96Bmsow8#Nu8dGosCtj?381l}|CeAHmxqD9p;Q}PQGf-!I7ZjF z(+D&#cRdwcogh+0>w(HHaEiP8R+Qnz3{bZLAqgs0;22aM^KU=s(al=~I{&`)WGOp% zm#xL&w9XKfDDV<-P%|{brN$iMxPNB7N(uN?We zAAn}Ti!YcjTzuvD-2t2u!P6cBjzXXUULpErSQ9IQW5W(`)y3Zey6}~M`=QJe@bQ}O zFPSfbhG-5Qd?C+#!Lz#oR17)pU<9pI?)Gr#6!hqZ=8i6K;nO_{qyU^pz%dMtuTooV z5!HI2LKCVRW*~MmS`Snjfa<}w;9?0>zrK9W$iVP|3w$mQ_;v%(>C})uJfs?iB_Gf! zs-P+s);Iu_G#(a?|1W~w1*-r+OWz<_9Gak^6+nd!)ZI9ZX+2N@J()WiRB|qOgK(k` zBhuks@bNupAqj3$gDs;xWkcQQ(S5q1!j+*!?1c~_7antPg+%n>h6)#k5-#wN<4ZwM zD-Ilv&za$lgtl*Cf#)e;ixENlEfQaX z3e|HjOhv$J`%CRyjZeB79{^vQc>2Zsw*UW|4}earFH?nd1gvkAZr=gv2mAmXRtKur zL8C0N^J_qSP>URHhfDV%@byrkGwf;C{nl;{%S? z7x<^cx5+^L2b&)N6-^3`;PuAPIPvM_1?lwYehIk@-RQQ1(SOi!ipdi|!$Lm21sfySCZh0qSriE77P zR0J5Anb?lIsEDxeaB!wspC~bP>1{m4!N9QNY7omy$L|jgzT(e3wV;QA!A1L^W8)7H zt5^^r$-}?RMMMB`?*qte5OxR+cMS1peB%IW7I*)Au_pmEZVa9?^XctT0p;%FEno^% zj)RJK1CQ<(pn?t3SoRVCcO`=Yz+EoTQ3u@*V7UxjTDxOyW^I|Yj+UE1QNZ5^ZYu5b0IdX&cVKYtW)ZV={!^OZ-0dR9(t4o8 zzWD`Xi8AP3a^G(57rFob|99u#<|4-7!oTeVc$47S7dy87|NmMabefn)_jQP@NB7wm z2RHry|5~EingLnVk$>vJ7vH!1{||M@|6`ub$9NpA!H%hEgnG^qd}zFci}erw9j1&w4~i<#!ako~Q`LE2{)5M-oVtC) zSU~-0P$kv;lCi{~`6nZPD`+8{Q#X%Tw@=T37dQU=|L=wrDWH>0Unp<=|NkXuNrzK6 zi&*my8UA+A^sgiTwiY&pWNrq>?w+)xfmQ zYdJ7&@LCK^o4n=&(-yDUz_bm-YRG}AFV1ZE|Npfj$WD*$%Mh977X}{PXB%o*0vN!t z|8o;4LcuWrie^ykLqep79~#x5KmbKGC}cq6O`w1SMLBo@O5+hwRK^}oo8X$n&ET8F z%@CTz%@CW!&5)YJ&5)bK%}|=e%}|@f&9FU*n}LCYgM*QSgM*2KgM*oagM)>GgM*cW zgM*EOgM7S!s5}6T-!#}x1)rQE_##e@f#C&bEvV7a1QLQaIzS4c7+Su< z>JN|ZnIOj+fAg^9P3!};)PI(O)_R13*p{|oeX4b$R3L&kwN^|3bCI^OwU3?7e4g9XBx({O5*J%ejg`k_=qdR~D)bNc_F@PKj53NLD zUIEjf`1EK#$N@e^{{^4NkN^KqAjje{R`Xua6;QAW6QmwIOmO;{D8q}sR?zrEiQJ1& zu**thUdUAb{NHk*MEDqMVGrmSSsOlZPZG3g58N(>Z>$5`e&$R!t6vY&^%da#Ne#B9 z;Db|=cQSxZoa~HIQTQ)<*#tBc(S3t|>H#ZO@g7-*62lHw{vKI|7duTD7+PcPi3=|~L^Bg1?7+!E_F)+N?%nO<}f}QhVDuKj9YHmaNvxxO0koG_b?0yN4ZrS3c zvJ9TxKaa6?I><6G@^Amdzx^d>sIkg%UmObqgX8{%ObiT;d;Wt?MUi)4NVCqCDAiB1 zE|w~(Ol$oHy8Ze;X!_lo19ZZI9B5@%>w(g^G#ATaiBk477t3m?k^s=;hoVQXX#G=A zQaJyDogF+y$A?grECo7PJ30b%EW{j0%M0mbanO_${7fLnn8OHz@vIsPlt- zkF@IxDhb+;()>o_1v^Au068H*m4Nj>=VM^#c7P1WLd9VeNZzOWVE3sPhxkCZ6FbOx zb{}x$7X-C8L2(a~f3X~_AGDeXBm~n6rX51TD_S8ptR#5!=BOxmbjB8Vbe2|lbnXRJ z(Vztnr(UG+K_`56K?d7Dy!iAOl+7VC+6~~g?m3T6@F2|#ckqx(GpKxMsMBNc=&bW7 zvERgajPX6mruuKH0&{zs*g*!A2fPgKR(f-I^oBD07j<4N%V5jEAPC;Zb^gT>(5}H=-lLC2 z8D5+yVP$x^9(0V+c2_-*eIGyr;Q#;gd-U=g0GaC1>&Wk6eXyL_qx+ag^MemBeyreU z@agvE@ac8c^U!`^eA1^k1+*jL%74+Ti%@KdgV@pzvLy**izmbu1Ds~hL6~g-H9H4n z_SOHQg{WpTLCg*Ynau_=`zE#WR0L{ID+Ekw1XJ1%6Wo6*s?yA>%pv2X) zH$=tFrTaiybJZ@+QniMvV+x ze8|HSG}U$#%1>r8Id)$Itq5{)(Z1pM|FCQ8?K&s_ zUKUQ2^^DF6zP%1i{M%1?{y&)J$n53v|4^D^rw_wFN9)Tq4_*s;bbEtN)Nyi2bLwRA z^!$GifMUNH<$r^G~A^=Kt<49?b_lJeprImY(oP zc6agUEq4Kh2qYVw@L)dqg6APPL_n)G_*)!72OoA{OLMU5uDJN^evRv&P& z{!p~H!J45Y47AyILI-qIYr7j{RO|jiRtAu)1xU6CCOZ=hxfVibN&9~A@em=1Jcq|)4@mv`}fP@RS1pqK0* zNA~g-+!tkd@jD;W!Jzs&0@AHVKM(;FK8XFPu<+sE{s|O74b@=`$Uc&XI=%wgM_drW zW>BK%Zvm}=@#uCY)cN!UsMcmc!BdK+${S1BX3&Sq{P4G@$yHl=)Vdd!h_4*#ENP zns0@SCxQoWLA}Mhwm<%Z)Oq2!bO93y|3!Cb z2{APP_|M-G&dk8jT%!`g#NX-zx_Awu31SLpVTVs|E6CPe>L>WAK!A^TIi4i~1YSSmqmtm!%X`*T7POeg1*8pheGRDX`eMh#|DaVftqYhK7q zH)cZ`EUh53I}1Q}8b_pcdPsDKsKlgo21tSCqZ86Pon=7B2OVGn9dWM5_#(Xj|9}4N z!BSBF@o)E*=y2A5A@J}2|4wHEXxJJ52aQj%GB7A~?gfP(hMzw9o<)eD*NiTR;Q7ph+8O;C0rhfaZHZ3ke%Q!!)49 z=Z-r-tSjG)B;A3?M2!v9&h z>OpH{B)h!>UU<*=|Nph&f7b7HAR*Z!Gh`V+!X_YL(1qGl?Q!2o8Qe(~c5 z$nHHVp!5YAMgS-D#v`E28wanbz^!xed_VZS2iEKvvJ9Z3lDcn#R&#oISRXDC^65U{ z(d`fca@l+Em@?>Wi3rf)5p15F4iTVT9jwM62YCkk=MAfqWq1)g3*^_+V8t&dfVyb# zk_2KQq`Wb{4XS|*APWyWK^@wY|3w$7fzxtHK4`H<>w%JV(At0+6$_7p4_RKAfc*qI za-_ryq77^U_@JH)H6hTt1cT-u|4URs_t_z}-?~qGFrW13<~jeu2z0OOVe1$b1JGrZ z=U-g94hkiZ`N&T6=w?j>&&?bt5eA?CVCmsd!VL?BkH)ZmGsHL0^(yH7%P^nrj~?Bh zb~1qOE9pMuaqtC?PxqxX<%6CFUvZ>4cDk{oxhP+B;opD2qx+Y~!S^hVjR!zo<22=; zX|A1NOg`PW9QpSjVg-qL9(*m3=AwKv%@H&Xa4XHVGmg#U;A;_|?o(;XH$4x<^q$uL{s&#ERr(P; zek$S8;iIAe8Yp)Rbp*|YD|Flbsg`8`-A4Jtr~8pl_sj0PF5P!q|JNnDbYBG}6QuR( ztS75MBMK}`4i*`KC4vqX83Co-o}CQ;4|m&ctCnSO{D0W9`4EST_5GSl&A%B-<^DMY z@o#eo>R{rBoMH-UGJ#J2jfD>AmZ$`De{KC=mjl{}7vahO!zmH-?3Dk1^q+GO|2F3!#|{>iZd;RTP=&V5M4TP%8GrNWWi73eWpL@f z=4y1(v-^h+=+M`f{PGMA76t!HxE(AEO4(dHI2`{Ua{LE6w@<>c;U`PcBcEPb`zl!m z@C6T&j{MsgKr6Z(|FIl)6r1#|j-NOdn{ni~SVSKVP zMnwa(lE(r(ZuMXE+$3mspTG4!xVL)^G)>Y6*#;OYu@6-B`*g=DxO78oPMhG!zn%L< z`&Y<$gaR%W1uP|8j@_rak6nJ?!u`YX{~^!j!%VK$S8A?-;@iOyv}mwK#R7cGIw+lW zpLXd!>UjBqtMc)N-(1DI{M$}@^s<(F#!%BUVL-Fv`CO*(epbKCf z_f^o;-_IE!H+nQ5XL7W@U(*MQ-x?JIkh?%j`aHYu`ShxmwnFDCJi2`i(A>lQLLBNI z?`{tkSEG~1L95*vnVCSV-Pu@pIMR;0s045_H2>r(mhen&=~3`jWbkNw_P-s}LfPiS zof5+}x7o!6ft^p-n z7OsIMtd5%)Ukg~chPm)>y8vn`GPv-&UI4k0f4i?0EaYAkg6~H(N>2@FD|zTd1oCsODH6{ovHu-|A)9y z`^L+d|Ns9ZiY742qxp>oczqrBc~OQJ>+(S3+x#tJj0_C_Sq;i$85(R=%Rr~xwt^1c zcp+B@8p-GH_y(R`1aUhLFdJZ{yHnl@c*($H}6akzx8BE(lOR%ki9;=tbHJ%Zbpw@Q5G#wYZAQpqV+%} zAGlk)17ufr0;pNT8&e8eL(G~A($Fi)rUjas0qw7F08iCHHLM3|umWoU`4x11lt=Rs z4{*m19C~NYG}u;_fKC(VX|OE>F-k!fz9XGVdCW0@!Q;3iXy}gtr0?V0o8r*2WT92IG^itq1C)J-S7+ zOF&*>YN!ZcDB%O0`Fe;0w2}S|^vqY|lODaSzluSZ&w;v%3=I|k8A@0|ClG=aACLg; zrhf%h3|g-d2CA@JjZPYWbFeU#E|Fy@wR7oaqA0PUzhPzO3z@jJpik8VK+i=u#1 z&hJj3Re%nqyzsty&Ewb1jvE;rEKD6VKyCFH6@z1}CyHem7)$lK&w2E+CKt;x>|$VH zfK-C~ph}P{tu^2ye=F!1PLN+9&U2~mN1nt4({ay%4i%=(c9A|x82)PRIg<2J83iULIi#F#1T3^;+ zs|u0<-6eh!R2(Sz^ooj{5@i54+8z0~GdY4rnmZYMdxMzL96JO4IUaXlVo(HKaO1(| z+v_0UVtuOUI;@6pZrw-c1450r?34gx;$qU<9mb+SH( zh?c%W1RDQ#M+^S#UKZL1Aw>ct{GR56%A{;p&_I-nijr&hA)j8}izlE#2x>CG(u*Vi zc239t2hut@e0x2a(mDhFbp|l`bOx|_fWz@n(LI!KRF!~-W7cU=h8MEYXyNDpzJI); z+tI}Xba5|u_8Zi&%K%*~lHh9e1az!fgiCM6KacKU2T+SWz@@ve05s^J;Q0R>_;SJj zCtNz$fH#pq8;CEqeFRti)qyW`SQ!{xERw@Ys?(bHgBpSirG;tD`$4CeGnA&MHSY({ zOO?i^HSY(F&M=e)dvq5kfQ|R)zUIom?f8pIE^ya$})IZ+I|M{B|JJ!U**a&xO6y&J9K16ycY53 zbWU*C$_N)=cH9D9bim)Tg^7XTMJVX*GSKRSyfn-0pkOYIPP5z&3gyxu7yfP0pw}7^ezyc2zn6SVD@xg)G>!YIZVmc%c%lNlt2g3sq6qq0- zpg;@)O%Yg~DD~ps790c#Lnl}m+8lEZ1P9>6AK(Dol>-gHjXB@|+yvr_dvuzv%mD{r zkV8jy@N3}?=TJ!aLHLO9D`5mxV8wy_Em@%DncS?Pxl`v*k6zt^98jCX#=*&=~MKwr^M=$H4Y)DV|1iK^u{&Oz;>rcWo{pbN*39Gv> zTb99zf1A%=f!32HlAyIn{Ea{VF@Vnh0(Z1tv+e_ph=P>}ww^5U1S!#P{>fM(>bN5X zbSB6((A<&L#Q*UZY)|01D1hHc&X1aJ+b70b26)p`qG>p+wrX+g|__#Eu7F z%6W8O2L&pq6iDg&|G%NylA$CDbkvf&1UTeA@kg?5J|@cG(tXyIf7?;;a<_Az_;n7X zxoDqw@v!^uflg?? z$jHE8DXWnM8lgDcA*-4t%TTA?eHpYrwVRa_WKM4ohvWYP9^F1nKRO}d_nkt^9GcK2Y;=R|I@oV$~r~MGYD`dy(3|WTe7mOasA1YFy=NWi(v+m3QwUTT;Si}dGx_flHdw>R*xjQ1l z!0gV51dnchaH}f-v<$xc{0oaitPI_(U0`jz)gTv~@R;Gz&2rGAljY-o-a?Q>^E<}M z#h{*309>o3YXvdsf-+e=1J*SGupi>`yL4B(|uV1=OmW`nJ* z3@A-kgW^>I+^RD^`CpVVR2I_20}Hnv=sv|ih1D-zmf^qXvk*|p>7oKr+gFGMxfpuJHunhvKEOGVd6*UJL z1PYx0qAhTPj6u>K-K>+q1}Vb~67}h26^9rE(gEuCf==5->;9sz9|PUL3tGg`V4IXG z%K%z9=GlD%JhoXP^FpEW|Nrh|x}Yk8zXf!}Ve=2h63Z8y;2{s*Up(M>Mwjkm;BJja z_tpQR*LXp*Uyxf?JiC$iWj>BS3>q!~-Nb7Es!Kp=26VHq0_Zq}UCay&0v_Gx|BJTr zg4(NfIpDPU!XA7d-hq->k8TfeVH)Dn?V=I^Dv=Ui7`+Bvb^oGz+W-IEhhKMkG{0sn z(eVI{K~T=};VdM-)LV* zbJPyxN^`Wn%s&l$XARQG3Z%otzwMAuuc%lusMtT~(JSKM*idsxh=IT5D+6fCX1mKJ z7XDoyxYDd0c_7DiIP&lJxy0efzn?+-MB_nFAUFO51u%a*s38xQ<#OcT@4)o^BDw-l z^B1gu2c&=nT^e+SHdvYuB+Z7dzdX&Af4>Jj+)jYQ&4H`L$B}=V%Oy6@9R(n_von-h zWu9OJtxVEB+4z#7fq?0Lt9Ulu)c^?VqtoeOJWHAop~8~Sn9#A;~IUFQg>?dPLn z@FGYZw5XET8l(ekj-e8$Sp^E0ZpsE;TcqoVk8tecq_}uN$&HAJYR7rx|44MuA)sP_`-6y~kuooN~ zDkK<6v>K|wRy7|~c~Qm-vdTrppxZ;{g=Q7VDi;-lV-6Aw9-zrnkM0hzot z6<-8hAg~qDv4$is@cLZP9EX8Nw`>B)4Xw9Jz!#G!q(SDVyS)WGx_5(&d$9m~f7t04 zGr;tHkJkUC55Pk$4Yn+a;MLinz&Xw;QUwXj5{VbF?4b3!C;$I{VXVObUNidA$`3qv z`Z+x-q{KmUV=bxrn( zGQ7AR!OGCV+L!=dBf$Qm0(3Plk4GAlw~kJ0BVa0q)qVX?gaV$KZsxY3HdxC@Wh}a|MnZ;4OAar96AniTd9f* z|MtV+{ZQv#tOvUrbOQ-^Bn;^gJP;qWwg_Wcx<@zb%?eqD){}KY(C}{n+kdk4Wc_E4 zZU=$G(1?Rl9^I@fajRzqowb6Z!=szE5~uox3IztxdVCM1mnU} z@at#g-{znMIn@C)-q+2_2~vLv%|EAFFV%nM7hv${KFBYK814m`f3qBy|GOPzP+bF^ ze+Nf}N4MUDyb6N8pFaDy|h2l$vT z&@nOHmp!`A^9wS7vN!1N8c@OpNxpoe3@R1i+_Q(!W*nfq%o=upw(BtPx5lV4FuZg> z23G}@2W4;}xT5JGMWFP9xPJq7-T_oiiP(##>M#F2y20CxLGFxxDY%`L;l-VOpv;dX z`gAASIIi4&to_f395M*;BBH-e4^{DO`S{DO`F9-WQ} zFS=uX{x?3^$^2iG^N%2dN3S=B2k3~gUREV028QE|paaT0dQF$^1WmFy3wU%Ed;Ay8 zXAxpZYduh^?$OITd#5PF3$|3q#t^;#kad`Iz{5u#jYmMP09_)z2RyFiYJ3vBN($7# ziU4(}I%`w{K%icjtoj_}xKsQ_e7p-6xV({p62Cs7gZQ)M< zSvffcV&(3CAS++T@e8n42+D$&$Q*Z3Ndcco)f=Lc&{?BW~u~5r7e(=t{@{Fphkig(-|Fj&F#_c9r5DzOK^eI4e8g}p@X?x_PHX%QCzulxAaSu&s^;bpu*Kb9bO}JpdFI z4#@o>(adPjJQHsbNKY*jsBkO|^XL{0ik4+?-0=dmkgl8879{yWgpJ|FYk8205)-4_ z9=$ax3jEtngPNj{?cV=Ibv;1sb^a*_EZ9rfU+iaMVCZ1~ci7|qanNl0>>|4N~2G;lJn}Mj?h5=NTE0jR6(Opz-M!*CjxQC$cg`L54AcUu+Wv3p|g62snB4 zvI=kJXE?@sHc}R}G>=zx6F=n04$u;;UQxg8qM*?E|M&m@7r!{b>li&cS$9Orf);0h zca($cEsMjD`n%b74#*t-7SNc1M>lVKq%6aWBuP+ng||2o)PG8i1a01t2RWmgHv=S{ z43SO&vDNuON5bR@|67cnZJwI>0fb9&Cd*d)QmkTwB)-)+l*QbW*zX`sPT@Fh(L~>Zh|ARJV9^%Bq2Q;MtCsyHWc@ z;P%UNr=R~lELk%mVDX1&aDe>}nm_;_YN9~g{F?1Ww?>1zDev-^fmXDhOGbp zUqq*a3NQXvVNlbL55j3-1D86?KE1B|9=)O*5EuJ&bATtS`8%G2R+o1B@_Y1#a;Ld; z=5jlB-v!a^KApMpKApMZpfR1!B`OENdp@3mwhDtP2FLxNo;`Go&I6*K9i$XCf#=Kb z)9Whk(JN}U12mG!2(z)m)1%v0+@m+Nz9SZL7N0`~c$lw3*&?>SM9y(PsQ6E_jAbts z+5y@nme%RYy#usSEUnX(9jq5LiwGId0$U>Q(JSf*vZNET-UaLmi1#WAJi2}5L6(69 z9Uvo974D!D`;0IB7flKSHEKZPcO{yji$}cff)>dh_vjUk02N8Syq-*;K?EMqs3*e< zp4Ff(#to3>|Dy6>t-kW0K|;teWuWc`zeg``E~gN~iwPINYWcT^vV-^V`*Qnqp9byF z1&wgLIMfP>DA3)Xpgk9$vuxjS$ujV759J1BKJZfLwJ8uqpgRRX=J<3U=HKqi{i0O> zRBQ0Jf{s(|X8j&2%kckzNAd~KIKM|X@B2_$29JY}SYFIq$I9RVzIcGY1+*c>BboPf zDCh>uEs*=|dTl%**Vg=aakvts)K}aEr2J$F$BR$A3=A&a5BS3mxOAkbIPeRygU*dB zcLcS)1>FTe8OwlQ&|Sf$(;OW4o&Fpiy}s%mo$&%L{M&umL4M)}&DMd=w$D*fc=6B? ze73zyXSxQzpt}S}o*m>_knR^-_!t;E-E}~0$PggM|4aW_l z$%j2Ub5smKMU{m|uZe>P^EZ!fpYI&qI^Q7y0v^2e`7ZFHat&zsmN^7;#djy`?_gO5 z>l?K?+J`-6`1G`>kuaqA2G@t6Sz%u3)uIe9_IW|p`&fhK{2Ze| z#bl)b=zh74;PbOIUfSBSf-2g+jiL<4SkDK6D#@%c@JPYwAaGq>3R2zgL1L=|R*T-zduP;!`Nt-fSdwAaPKS{UsYj z-E)w-QxJ9DNb26h%)1u}YN*>z3j%F%RQBlQ?F|AAFaHk&wbG!+e*JO!OIAa_gx+11T^IuJB;&B_B&y_XG? ztU%KkC<~3)Hii zG+t@}Pf-6M%fdH8S;X?CGakv1rA^(eQXqeU z)|$JVK~=Y!18!MB60AouXnnPVM>p#&u>2){0hbFBh+Z*5|1Pln z$!?YtNZP^U)3E!SK@0hl4|#O|+yz>W1u6|8Si8R!&d*sgg{KaInu6Lg9;xGn>4J?Hc3b>r~p6=egZAkbQy2GeH4x{zW`YVjfgt9atg;c9SPGOdv4@Awlyy zKHZ(56*HdQo)RF}=ksqr1R7#jNaN4D06LNBGyk(oY5aL7KJmwi#;g=&_{{(8&4E)DVx_sgnIOWJM=m|Qx(ve@l(STpmM@0d&+z7M}59FKH0~PGxMCWlBys}Sj zJ-EE`cqt1iOnQ0EzJoVld%Uc*KeFs4M0zq#4#2?3cV1+1XSX|K2 zAdNo{ECUi<1rr7350LW|9Qg%24Peew067+$8>`kq-B<}Kpn7>HeS^C3ra6)u9YTXq z7E@P%+KLX)Gpro<{Rd5YS{4?7)&qB64nXny#?qx;~CdD;979@-B<`>7pTFO{f)_G&y}^62%zP+0;~nWN(1+WM_T9kg-v z-~(oCYCRxoJ$g%296Y-@T)I#Bb{~P3OaU1ly{+J~uG2-u0#utCxOA4NXn-0bpyMGy zM-9q=%V3DAZeIq_SP_?pwW9-n3lm7D(-G_fjqdaO;U~Kfe&QEkIhMw+cd$yVROJ6b zN9%J%uROcYzhFxJ|NkZEjMx`9B-j|b?|XEDO|%4uU74v%_f}9KI$GGMfEEaPboYW> z1-ge1bYhKb9%v1;Z*PhUqoeh`qMI(=;E;6bUJ44_?)$E-PfGMb>#Q8ReHmVW4mO7x z06Hee6TH~s@QVrg5JPfV9IfvZT?Og-2A(G|^;;&&02yEY#4o_+xDzzjf-vClC;mv# zjf>zp641(n^lXqp9=&B8Ajh2X=yqiQA3g&*C&mICB()44y`hk^5W&R(C>SBL0if`M z)@#u72718>q;oGQX>{L*lo*g&sKU6r7v#UzlO-yk#T*hKf~WZ>W2qFlEAd(ww8N3% zHP3#~Li^XOpz#g{4^R~KhN8?XS15UO`*L{nP6Y)q#0F570SkglQ*dL+7vyNjx#!>& zg{=p``UE_Br-Iyuq7S4DQX_SP_dvEDs8dhl&uaxK8SZfNo_5 zEqiOdU6Sh2%?&F2IN_D3N4GZzhKK-$2)M{Z)^+-Y$0E?WOz>DNXnYG)C4tVO0M$mI zadMC2;K5L^6le?aI;0!Kjh2*?w+O_tGOX}vTa~Iyn*@f2ByOs*bZ-CIlO`A@CJ^< z8#qCylY zf{w`U1Wj;vf>)%ts3^RU0iUqR8|w~IKPmUxv0kS`Spnf!cWB333s5@tBneUjd>Y+N=e;Ujfa2&~gZf{or1a0c3p?Xgm^p6d!043aExmv%bLJ3c5Q5ax9;V z^#T4?&=fi}pdvsA%YqgUfo_NIUoOgk=s3;-Ik4LYvYr6cc7dk7)&mtKpa2COHw>E6 z{4cuR71Rp=?SwAz0u5PAKLZ-F0G%JW^do2vfOpzQK?a{*=#WL^EKpVhtCj(^rMxdboP+eRr-ROp+kTyY`?(i$1HnSA)u0io*4rhrjypg@Lms`N>lcFB!lz%{ zKFG=d+7A*5I!0&*XwQI0?^KZKpd~@;UJHVDzL$7(w}OOP50uz-p8)T7b(stDFsO}Q zq77T24AutT@mls;kf9T-rTa$nkN=Rn-WcbC79za_?F4T0#&QsJpZ7Z&q48G0p7j;Uz8K# zX#N(^#i|})H9jf^KE19D;EnnJMPIxE`-;EC9%M+bsLpiIXtr;|i~k3qYs}QZm-YF8 z=1N^u91cDd;6CAKeV)GsG-&V9D_Xq(s^J_+L$7axhxI}JR?r$sk6zI zshNLUXhX}T5-pH3JbGOl8h$C4ayC>jR+k7LV~FA37QpE7|A0^TftE|9PhPV)9s?aD zc)+7Kw8f*hcL8{+;M7w=P(-zYHhH;rpLOX>QBm;eW&J&0lwlVrU_j%_5ijQKW@YG} z3eo}9=xTi6zvwiu-qN773Eg1RJRofhSL2h8J5GRy(`z6q#6TT|2#;QHGvmek1K{u| zwZJsd1+2bgL-$-z!f^b5%*FaMf0G_4<#wNYAvPNn)vvigD>=DlgU%@dO&me@d4tk5 zqDDs_KWcvC;n8d>13FEuwA7=Q_xE&Bh8N#XfKnTHgA#Z#B4~rsqv@gy|3$Ajg6h%= zZ%_sg@abiJ;t1-!i(Xv>l3Wjw1Z}lA;|LxGI17q8+nXv3^8g_vIkw%!0N3Ej)|c%CT3i+>(qZ+y}YgBg_un*^&I|?L?hhbZf`8j5{%tQ`tUd`T zF;9ZlFt>c;Z#e)eBwBBmXo1%|xL9N>ln6LjWGj_&Iam}c^0&MOS3AEwy1^6qpaJaL zKAlUzgQX7q+panAZ#xUxRZ;LF5Oh0CZx47D04&$AD=tQXVFOK9voGHr4zyP{>1T>8by5r`UM=$S* zPcoo8Zmz#r?+Z}`y4e@$${LI5pa=(5X#6c#!3(s{A9GM(bTvKzH-4)Q=m2|yFsfze0o`LED&Yb1uElT+}p;=;LuT`;s7qpKqEvIptXeH z{f!2o>p(%>Pz_i9?Z?x=<=>05TA-2E)BFMq4jsjc4jtJ_{DRCco<9MNb3@_)ba@Ks zx+H|%(3Tp60@c4L=l!rUX@R!Ke}rA{aiAoff7?aST1N%&$_!9>dZG0|X&~sR6f@8& z0O4;gDoRWxJUc-%E#O&}*Q}sJTueYA!<^R14?3=oISq83#GHF(iF@S-*oAprx^F^Fp2@)2GD@;;R#c=aWl-_#?7#78#lxHZQKkywsA8YgyK`%xEbz1F-Q!?#ztS>2DvvC z=3)MAtcf;A1DxRUqnp(iw4<^0K#397xRL?4FhMuZn3M`Y+Le|rDrVg-DmEpou=W^a zOQ-{AzokQi?Qd)Fg0YV!9-tHwup8WZ?yOOX;NSKe)YwqyJ`Y|v{a^HyI;d2eawM>+xZu*zyJSle$7~U5wx-(0vwAT%|{&K4nyW^!ArwF&JksJvB!v&fq&bL zmIEa+FD|(L{BL}z`*h2J4UGIQr#g7ct--;m5Pi5qHrrYja@PjZWqY9W6FWg?N_3W} zfG1rX__tLlft?3i$J2ci?9A@-#~MH@ei;9YN`c*5VhmlY^CD|9DC&5V=ZZ3T90wno z59-OjIIIFHBv8)PIt(tRj=QLU7R4}tmiHc01Nj|#@-F|BgB=~2p!1HqPeX+qI(B67 zFfbf)dVfSiw6;$VCmy8aQAaaEv;LKHymk9fiP2UIGSh^ATRs6>?VrCFD# zD3r3NS=Xqjl*s)*-29uR<|ODawHVM8Kn`SvCjiuQi3c5Q`5cxKA#{W7MN3eJmFF1i z2@vCDwCm6RNFxBC{OQxpJ6Bbf!MF7!cmt&5BSD52DazoDdm4wK5tY^%q5{4*$s^6B z(?!LLe_IDAq5;1 zd07E&*ah2u76yirRG)5MWmV8BLeNzK9=@$7OC+E%21-00#+TqaE_VBCFF*^Jq3NmHMMa^r5u^wdWROlCB&fio3;#AIpYBsW-4`Ku zkAqIL7I19*0a}z^!Us;PuQ|bG{%a=VOOE{8JQ-V0mY9GBx)ecMm-rxCmpr>qy=;v6 z|KAb3X9>hB2J=9hl|Z~yFb}j#3B(JJL9B1h$YUdZjzzVl}^Ehr`h6ukDD{UL33Cs!sm%x9 zfX|w^{HparDLcqO&es>dUji!uTgL%&Es}NM%m6LFIY7HM6hJ-n?qB~!ldcOgfUe7J zJy5FV(|z8jmsMg0Xw^PQz8AFHawllc9?a^u0j&W%4C-4MfTSCbfJ{LtG93_R{{*eD zmhaWZ0|+#T#P0E5HRhTicvjOP*rV|cc$Z}NO^;q)QBc2OhBnkN&`gAY z;||E6_JtP;>sc9ITl0q>*aZ>+B|HTXVE`f=Km_D~KM<>cU$8|5q6)GF_{CySv%mW? zs3EHGLJZW#Z#)9B7p+8d2nV0Qq~Qa)gZ(Gycr>=-pph;HP_w}SR8e_=c3ww-W-7rW zViNrO*jo;i=y#uZ;jkDq^irbY(R`e-^o8*O(0ro;Xft92X!oH9sMX*AYE3!DgU;CG zZ#h|V8+`5!Xag#2{cyuionBW){%u~2{H{km{vYy4e$jHW^reUPb&p<_T+lRt2lG*I z!_}kvu1{|fqi3(ku@`3DpjdqX3a<{(98Z8R=$O+24)82&ugN>m&PwKcpe0ym)(SFs zcABX8_Lit{@XIss@8f>au?XyL5zzQG|2}U4XY(T(B9^F4njXZjJ z`Hu=S{1-L6Ajsg+$r@z@8uC0)BI(g9DmN9>|3C3x^y_7?oSBgCqW$;L&}{r`OlP_`gSQ zsE4cZfzDcwouHDev)19i=y5~P#?Dd)U*>O~jsHN&u2{{p*NxxP`dB%a#}3#`A^33R z+5Vs@zz3koI)&HVp!0uDf-~L+kJfLcf}nN^$g-!P0Ts~MGayTSK#>^=vG2cVlp&~% zR?6$qeHk?ERt>sR*SFi(;s43*gC5p5_?>TdpKrZgV(i;}-lzMRBJR;(8!GH7X9^Rka4uhmX6cfOf5c z#=yHLiGo%TgNDUHqks%P-N!*Aw^uHLO62n%-8WuzwzD$4xS|Uhc=@eRF6Pn8n+|df z^fVoV=$9T~C)I#g6@c7`)O-cEw-rJmcZ7Phf{u!E0JSqfYpp#z_+5X3(q(`LD41mp zpU5zH^y(UcD1O&ZknvrQZe~ys>HtcU-PiwLXgN@-;?aDV!^8S+&EwxL1IO7w zG$?n04zX1LrQ>dJq5yS2KvQanVQRj)G4Bg;(T<8oMjlEsM3!U0zZLkDw z?E*FUK`Y=IEEr1az<1Svi~AQrt)LVH8s#Y|hM3&}HtNMmJJ7lFj4uvagBA;OfO^d? z{M(#Cr#7{LRGfI>?#{~4eH~Q%?}cnm59vX z|Nlcm@3J+>O*JY8P=A0gr-%d1`IPp9v+}1~f($Rtih@+ds91pKs1)K3gW4Y^pgBE- z21^Ey?wciCuEqz9FTHpIZXTR|F^8Lhq1&6|MG4sW(=TLN!2LRSCmq!P1C<$49=)Ot z6TlXAf-FiA1-H9E)05qvpe0M$6F~X+z>8`JP%IxP<@4y}%?Aah6+$H_y)?hkfSLCJ z;&4llc_Ii^5c6*LL(J1gGA|rt-YXHf%}C}+d-RGffSC94rXa(MBO;)22~hND9PW1H z05wCv#RAA~Q2AE^QM>mhsQeRQWdNl`(3Uox38D-y+eKIzUK(+OE^-0IH=?{(0A*HC z=L&p~EV~D^snq(vgx&EtXuI2gP_3rw(JLwfF+UdM77K`r!HEyCM-Af5FMSYiy4XX4 zP0pj2_eY;7!wY7tnm`!=RK1^gQ9Sqef1mE-n;1cdgLdC|Aq;BbflcoQU%LxS(xCAb z@OoCT({F=Oou1gJ@6P$~-=(6jG$WC1l_3>-T_ z!#CY9rH6fb9a&zi18)p1(E+u2TK|^_HGqzLXFu)?DwG(yomo2B!FoaE2V5gq1XS(%@aPp4=m%?gaR9D<0_a{D zsOT#@Q0@d3uO7Xkx)4J=x_`V_WCJn1SJVO~_~At_T#y-}-KYD*iwd})7)(zz5gybb1LfXRv%=W{@ZRJ%?9wUgz*MXO`?nHN9nK^_M+o=XKhx_u|S z&}ab7cD>AIXJFtDKj7P$D&PT4%*P!#K-Gxx0gp~smQGh5enHnS$6Y%>jU0YK*CWSW z4`hJmY6V@dcpP_C04e1cbbaD++;s(L8+{so@ePhN{<;Hc{Pm>*9>-mGfZWc%>jg)r z>mRV08$ct)Mxe5I$s&-WK*iauOW>Bo?Mu*>#H?zNCqPRPKsCinRtARG3LcGqxA(HlDBg)SdxZkfMj6G*!Ce~CV5y`lx!E>NE^4`Nq7 z%q~5!U9Jnjr+U|cF1&B3Wn=*Fm?@EJ{RZ(m2fxc_*VbnZ>maS}D}6=irK1fKThZxILisMHm7>xkyqMAoRZGlp5aAZcjd=EPOy&HUN`czO%gHDwK&5d$_mGQS6hRM4c9{_Er zdUOP=9aN}2?-6Bqxe6@rq7vcJ=_=3-c93KDIaiR&AH!TeAI1PJ^Z~p61Sn(mx=MiE zeY{7M;YAcXBuL{~7#P6ov>Nt;k}Ly%3j-5qV^h-+P?2)uzi1_x5h~%+4QlU!`qK=c zJ%K*Gz6!9dcHqf&L$E{nTMI!$0MKOQ(aWpVEz0onD>DOw@d2M+-xZ)nF6jPB;~r7a zVbmI+om31A4B-39L2cLnq7x4ZGQ5-rB|_1EhXomSegmJW@Z-PeiNjDAJwGf6+T{m! zichbv0AybwxFzb-eH`Ja%l}2^90r9Rf9qw?jPP++0g$mCy}VPqL>XQtFoR~dPx|yi z;tPEESjKwR#1sPtZgF;l)_Mjlc&M&ZtVh6<{sMDx+5GkU-DHfb~J-RQyT>9t#f7fmo70^2I z`c6=V;>+@6k3<2A^Kmuxo-0pqqrwv48@;R0I@S3I9do z_X{$BI${YRH#ovIX882-`am>FLN!iB(wOmIR1K;z1ETRi)W!;*US8%-u#FF{LTrpd z(pd3d^zA-~jTIn`4%-=Di+J?%dbEo&yeQWA2|n#1z`^LhN4KwlNAu7BCA=QiJ}MC< zZ2v{KfHZddN+5&_K*Dn&!U|wv9uI5Z29RhwSQNCf3SPz&34!i!H8pyvF4P}qVBWvIzAV2z+$4;A2s3RJ+1 z{%`5Xn0-bm2+OC-4W9HQdT z?IF+!-g?4Y!_ELIf?YtF;=kyzqk^CdNn998Lp-{WH|Kv*35XzQmT7Gpc#*t9^h;y4pZ~$LOz^G@$a&!L z0N8rlpWkkIbbErG+5yUauT@h59)ZnoUQuv|BGjAphOg-VgMcxLEc~mYVU%# zsycw%>$gDdSPf%vESAcE%A;Q1oz0>QFP^Z2+H9bR01Y{S?{z-`YPJWwsOtLtzx#wo zujtNM!VI3r4}fyki>F2)3&EF)lqy1uX#yEDmmMTtq5__yhm2M@#2@}Ix_1vK-f#RD z-LeO{#5s>rGk~gf@R*H9_qG3`S&+a3bzt&AMsHF91rxf_9^L%^MYrz;Ens6VwF8|@ z)*GUd;c5&TnE|yWL8Au$Ma>XqS%b_vZDoMj0Bn=x^KQX1X{Jy{DY;K0}|=chdr2Y zc=U>vHGz6!-hW z2Rdq#4Xm8mXV} z0qozi{~tQEyxpM$(#G#{#Ib`#j(;1wQ-_N&qet^$rq^~(9U{h{$puJoaJse}DA8&; zP^t!2#bW$g3KR$&Acw?(m9aZ@uo%B)foltA1ck{Z{?;P!<+dp*2_PfD8k9hD4$a5G zYz2@1hrPRP)Is6U3L2&a9Sxb`(|ykIn2Xte2Jn1|X#P=fSF7NtAj1peJXQwJ?sJ}< zt_&~4iy%uLV^lyZk04W^pxZLyVh`8e;ARNE!OakPgPWn_1~&r(Gb1xIGXpa=z<@&> zrk06-JOjTxL(@%e2IrgH42d_n8D`w1v3;=m7BuYzU7rEVNgmyd#@`^5WZmz;<9-K9 zWWoC*PrP^mT7mNafJbjMhX?ZuP@UI$p!AtXuP@_^y9KcHS(4+?%?|2_n}Dk7tspJk z;-0-cX5cfZZoE*QEXd&1%VT_u#gGAX);37>|6?A^pFtBjXTTB1Vg`-3?Vt`#FYk`S zf($RJbD;6Y{vx4(mBF*w9(;yHH@H+oTKxfz#dz@jE3o?S7HCZ}s3L~ebwB@$>h2R{ z=w`NbQL!l1Myig%XW=P=t66ZqEfN0j%mS)>pmiNs5Qz`2YQY3(eLQ&SyX>PgG7KKc zmq1Ny=1V@Ho1c8T11fyGT`qHYc8gqg{C}zS0CWrO`OV;3+~Q@Q9JCU*01w`sIdjIR z`;KR4GLWR?wN>&O1DMSwCz7>xl3??tBEK#`C!I8Ss3Uk4lbb zr}GVuZstxOl?umB?=K$Rr#+85KLL&5dLDOv15)kN9gqO=fIN7*WF2Tf?nPNp1vp0q z)I0Wo>^BFUw88At%lm8%=s2Dl6%A0x8$fRU0yVr9KrZs=KJC*T5P@u7AIQ8$?B+o% z*uV(40vzrz0#rXB#xD~*x^Fsme*j%2(*5hj1!*1za7%$d2Xuc%t3D8}lQsL2jBq9D~{(lw*&;Uxg5D$X~|E>pe#UPb}2S9ZNs!G@YEDWFnS5Lpt zu4iKCZsuTOV6a`l${txVEu}43_c~Hm-Vn7m=#O zy!L@Oj2sNYAkIb*Co;?sGCm06ct(bXfn=tGIDSx>E(piS5F}Fz;sh8N8h|(j4;VpL z5WmV-hv1! z)j=DvJ+xy$Gdbtsho^uxt1^Sl1TC3B^aw!a;a=|r+WGpR`_>CLHYSGd)7>9l$buOz z-9KJzW(5nqc<~Ct`0?T(nBmg>;YB%!b;GmQM@1Jj8RXdMqQc|2LmG5uBxrEsh52Mb z2IB*cpv6LfJNoS#!v=^?(-nU0xy<=*k?g(kr$Dn3=EDC35gdyV9q&^jLeIA zkgC%lw!#bJP|!gLsI?MkjTJ~%#qpSniVi<$t_|G%jR6NGxCry;J`x)4(VMZuqwx)7 zD{90G<4Yc$1rI#BH-a*zPiMjnSK}u>of#J#yYKjPzx3%WIN{OD`*^)5gHLD00Z?C{ z05rJc@IrtCw9bZi=VD>d8sH!QMX#?D1nvIiZ^`3e0L?|82WOR%`;Du|{RpKgJ=36P>n4lKpHd_AbY0M_Eh0oKC` zmJq#`11kAWyx4aOWSlGLWHkPkm+TA-t}XxhTR;bKd35`MX4U@Y2{F8w0a67T{5}r4 zm%BI2!lRehX00d#=#ttBUXN}+&`xrX?f{AZm%#h>MeV_UPYrkx2hs_;Ip+X>OBXxn zBrG=tP+ci{cMa$gobDg32Pz>G{3;-)%8UQ}|1uq{&J}d7Td(L*baj8$i88$SF81^P zOM8%Gx_tvcRagSQ0ISzpQ3gkFH{BI<9wsAbuYH0~_XG}5vI4mbp;R8B6g2;eRcY(V z62zuZ@Cdw5uN!3e{K0Bb2FL%`kX%0xBPgYyvlUb%jqa>*Up-gjmUypLEsaYkW85dGG!&ml#i?+ zcl$jO{@e1HYi_0e(T(3;cqvAHZfd zfc7Xmf-X$)jQ|gdxPa!+7=5}sK&Jya{=ewa?Hd8|KgcAo4rB??1Ti9@K?8vfKD}vBJ%V9OB+`3jFC^Tp98<3Ylla-pMg&=>qd~i-p~%PRRIo; zDB-LE(!3p{`9BK-11Mhx`1JZ^fUfQWHK=@gS({dgf<}lygUJk_wB-RZ7GhQbs#yvk zv$8>EZ3fS6_^3GS0vQ5U>`>wO|3ar*flser1;}(zsqfRvsseIcx1RyjWJaIv05nsj z)`>E_5CxeU3o;e7TpSc|KD~XQg-%FD-CQZk0NTX?S@w+6m0v_;s=nzs@hCO)7RDcI$pwhqWuIBos1R+Qm|KgibU z;CYBPkdffj0ghsiPS*xxdqFJ`$L>3z^H{-g$h%UMq5H7$C6DFJfPvv z-=WLQzyMlm&Qx;_?1bJp51;NnPzwe$bPn333i2T+bQ3&!Sz;hXsuKQA|5+H?F?`t21VL5aEqif1hjRKw*zEs_cTzx1KA4B z*$R--2FZd$APZbU7W9HF_}>On@3@nRK>#$?WDGiXJv70ivklz3X+2OX47&7!_XtQA zKS)7$Ue}Sl-;LasDN5*Q1JNrScJGgz0I~W*1t*pzSHD~pF4B$nQ&F>jYpLujcl5y`e0Yy;R z#t3Z!bx#8&HlOY`kZ>=LkSFsA&t4V*kIps;MFxgmmLQMLJ_QhqC&-ieghywe2ADGy z)KP^97=Q&PK{ys*4g-kO+g6|iYQ*+AC^9f)pJMmuomQd50G8_P^8nrN)P2UI)8mI@ zAY zpKfr$Sg;JdqUXko`zoN`y&LGT{u+?j=@(~JSQ)x&GhVBLyMgOLXJnn?|M~y5D1;9> zuWA>F&$^%0fuRAM6+tJKf$B)m-Nm3|-h8^(sDN6bpcBkMsTs7g7&Ob{(LG1S05qqB zQZsfR_h>u zxlG)nH=KiiyX(_VSMB4j(x4SA9^K#~AM6Hj>m9Uub+!;FF^hu_Htckl=+8QUX#360Y&-T#mn&Hvy z4>=+&AOMomAX)jzB2k7H@40{eH$LzZ+-FX12er05y8A&1-{b!QkIW08l<`737L=(j zfJX6TJi5WYL2YswA9&dg>SjX?$UFhk)@dT>fg<42StD42E>t2|fhyD)BUpnf;?dm- z3P6v}7C}%YuSy1` zQBZ%(qc>wA^z>1W&Ik#Q&H@E!vEtL2@B-W!D|q13S#iUs`)79}sF?8SOig#`Ox5oU zWq0Xx<%SFasoOHBF$k3i9Czgh)qBU?z}4Stx#O<cE&;O3yXO6pSgW|aLz;Rb&2Mz`X z{;3B$ebqg?`$5I)i%T3lkWm4_NXY2dL2*!N4(h;_g68dtmWeXFsC~o204}OuMuCz= zx1WGduP?htcbEfc1Ra#i11davUDH81%K((Eur+Z!KqejL{Q3VSXt%RRx1WGZ_hC=a z@ED^{w+HATKaXzTbe~=~4Ub+?Oh8on?T)u8lZK6j6U5Bpa^yRe*x68 zfOh8mL283QYC(6Pb-QYJx&?H*8h5&dICi&#;=`pgH6IcQeBemf%>(KX@w?vf==Rg_ z>2=MAn%x1ac))x3D)hg(<}-p$NJUr-s*PY4D}pOHF_6VKIez|st>@9pyWpM>!wc)z zEDZZu7^*rvy5lrJ3;4Czp`$U1%Rr}}9DXrVmKAi!Q#yF3GiVP<1*qx+r`GN*;Mh9(2Z=qjir1yv0ap<#~TNifichLawRZ$Jf*4`jH&qx+Lj_e%IZ5>*{U^F}!Ge#lrBipOt~3^>!&}PVDD0&_o^YB9L4v zNUj*vXY1Uf0;;ulfno*R`vskj3r=7YBS8LwRHtUF3=FQu|2;a}Ky`Izgn=Vu$UNDP zrJJogjKibTcezhz?QECM+QmMdwflWKYmaw^u0QU&8B}?8#%_1%blrX271Wkzumz2L zmGIg6g&7%^u-k%0yGlhpdL0=(njif0=yYA)>%`dn;9sZf`fk_d9=-7#o$MaHqQRgB zitBpE?lYb4EZwfho9k4VTsmFPJMz06aOrft?b7Lb->3U&AL-<>2 zL4B59QQf(s3_h0DrPiLHHgB)*bWk{3fNO5hX_CF6=Rr+f4UcX{(8?H4t?SbbuC~Et zCVvO0@b&1H_UJx$++6}B{o*huG#MB{lffiuR)%gi$NiuR#}+i~SHf)z8t~(9O=e_Z zIOZO}=+PS=;Q{uOs4OThKnIQ-_PF@M5!9@6UEb}w{{MlCFFIYaXsi%F%Qr| z`)(-i_UH{g4{|#w|AJlV(aY*R2iCZNEvka~1nPxOP$3QVLI&6i3@|TjUkXXd=cPac zOz{l`o&cg809^8AH3d(4% z#{awd_`?tQbk<6P8e!_kUB$r-Fb^kC1B~CJH(Y>!yX)3YSLNfb!k`A2CuRfe>I3*&K)ZZlM#9gs^lA%1pg`wu0i7JoFW}1G&Bia_E6*?J`ur2WfUEu|enD4uenH>wkQft(lm!BivOwUt z>vLt$E-CiouFnlYM_xdKv3EMCgAOiuI$i&RErd2}&%QVU9?b)X>T{3IcF^ntN(l6W zv_hQ=VuE$Uocqm9g{dT{+jYA~Z@7kMw_k-%XYFT~&f4FduFpM=yS@g+C0GO4I>&C% zsEq4#5B~M;3Lf3z93G7BAYBGN-Tt5w#HV`#$Ogy%mo_lIW&(|{LyA~XM+sE0f@%YB z$EfiLs9*=3$>A6S+hGGLmoUc5LHB8ZBEaL|BUX>@o36&+JiA|b^xANF^lk?g-k?#_ z){`YXpnV+Opi{+tI?X(~y$wKPfDz#E0&RZ;ZHV;&jlMX5mKcM|5760Yo#4fpE-E#h zEh?Zb%*S0+Kn*SipH9d*)u0x00;o9(npDmJ@k&5NI>@Td63~gPumb25Xjd!faw3pj z;NHz)E(QkBh|7)E1C;{c`gPw7QHB?lj6eUsRsp#gd^T6a|4Sa7?Vx};-mb#PzyN9p zd33G^)!d-Q9LV3G)&}zBXVn^@W?dX;l-(gT96H4v;Q{SgbiV}6@da~%vYEe!E9l0L zlc3Taw8IBFsxtv})QjW)OFq5ZLG`j{Hy@}?iwHm8PCJk8e(*FE=w@h;XQAN=zF*g) zyBFkM(B-V4T;S0=1>Bl@ah`#P;YAeN&;Q*gI@?z$u`s+?%L$r&DN%6gZUHOlo&w(G z+6mF%(h1r0`kEgk4>GD7BH;l_NuAJJOj=KtSbB6bx`OYTFuvr|9gxxO9s-)^Z~?9G zfrYR>IE2@L&fgJd`1!y4@XJ}?Cg0f?9AE$c2OW3`IGJ#pZ1AaE}A=$-(|grI@_vz_grF3^h$pbDREx45X4|;>hVaP4$|ki6Xa@8egf@unsObKqF#h(GB6x#=TK&0V0_Kjea)kn zcN6Hik=lPh{&yb(&B6tMiUCj|>Ct>70@RO&41hEr{MP(4xZK7AbZ)e$9`l#~{M%ZX z6#jBEboVrI{N;uml(+*lS9y2`Xz1eb4i*V9F%Y|4?C=iIMC4)P1BWO4`@_xf;}18( zn?KwP&;D>TeEP%9!19-yfq@knFtW0;GBF{Gki=$YVP$1zWdZf8U>IC}LFW&n1fYk3 z>Ucm714SHC>H!`(Vese6U`-QE=#q7@Dn*#RZe z9^JtOpfETDZl6sCC36sWGXn#IgT-o43ISa(H5pW+fy8Hnm34y?nZ7S5xK6)N2hpAD zAU*>f!Vli&)D1ev2^Nkh@dKJugsd<0=mrO>CuAFEw>RkiQbhd)y6nlN`#hwr4{lC^ z?gqF9&II5EBcM5C2T*E;E$)d`&FJm|=>mnDFgO-GIXpTcLZEGXyFeqI9=*JaW{NVr zn0l9mVF#lFsDXL}bSw+pMA-U8us1!rn>TE{|>p4bX&b^kGn)2HueXsv8YF zy1g^N9t79*-OZpJ&cEKdz=IjIZMpdf>T=vO9^DZCHtztL%uvDxu5J%^H-Jh~(EVnx z_0I{e#Z~X*1F03;~MFDiJMQ4nPhGX{$ko$E&0|g+438<)Y>5NeUtsV*Z z|G&N-T*lgfPJ6KhZR!D^;v(Y+t}OV^3o*Qiy2AqAn+00O0$L?=7<7V+W8*JI4hG?! zqM&lx^KUB z>PvubY6b1@^ns)o&&ESvKy_~BzyJT6Uoi5wYy@rHc)?gw2Rh`&8Fbky=&}Z>so=#~ z8ZQ%XvoLf!u{d@zbUX1dgBT7Rj@?ci+D;tWOpcunEMN|Z#RFcqs&N=B0Fh+?vq6#| zJv`b@JlbFrK$@UTBwcWMkT$3^M>j|}OE(j<6OUu315C9`x0GwA1gO|E=#JuGmU8Tj z-~bJUD|A<}ICfUBbbIl12eB|;bnFb^acw?b3tI~ z0g@jRKjU| zp!p{Y|C9rVA(-`35E`b9d zR7_fcN*vH4I)4YBUUv`Zd?siVEdV@4c>cv7Lr_(A{>2u45M82TfwCJGvOXMi9)M$r zV;E?7=puA@$fFxvvH5mCgbro;f|kks@@Tyc?$BO6Da7!i;06oBOV9{&Lv;WHf9q$^ z&Ck0*6$}G^>oZUd++1zJ0BU`K8b&_7)fOe7EeVG}T1`P(LCcZB{a?rg55J)6dt=Z{ z|9gHx*Z&@!uAu%MKX~^AsP78C`P?%ZbRR_Mdyh`n|E|Vw9lPBiXQOwzvb%Jj_c-nf z+OY?k$MosUUGLMG3ldrm>TPt^ZudCux*Ocp=&U{5S$i5ZHvujkCVivewa@$BaJ z>Gh2VZ&(Mr9K4vo1w7Dc7f)S4 zn^wUJLHQgs`zrqbKeFlF{H-TTY`PDsGB7ZFuw`Ii5Gc`W{23VXMWM~P0<4@4AO9}gaQ04TR3w$j8Yi9m!KOMW>Soqh2UEs*S-p*r&C-VW1p_n1?glxplVbzp%W0rPXFvs`1o#R*=rs|bW?g|t^Bxt@A)5?7yS}|U zcdo|YJX#O38cB+}-8jQp*S85kHo z^9yVNkKuau#tXP~?@<9YX^sDX<`>wb0-Bh0>E5CO8fft7UZVo))$wmLVdvL4-hGT; z;~f9`7Vx|tXtt}n1w2^&nLm<+@iV`m^M}v;kv@zp-NzjH*B}4PFX;URstVjB5@2EE z7i4a^R3ZSX9z^#tGVpJk0uC|X*0&{!j{NJtIr3{9bmZ4K<&k_0WT*zn&>tW}HCSGA zA9n`D41*)T#tB$Bc>D)j^T(t4u!5)cAO4=8|NsBL1Z}`HehUhS_voGlji`WpWc&^8 zS;yvoETyd7HXB~^fj0oM@o%>&c+J%PxBEE1#&MW;`8Cc#{jvjWCYq1I>Oi4Lz}ND7 zP<^e=zkUxms1ZIt{@IB?lEnhzbtnEv9}Db$|9=!@*B{XS5U}sR@b?)0|Noy~19T2! zH#G7!YE%M1)9j$c0@^nOxftGsU&BSk!G&MLN5#N}Ujvk!n~xMY#zS`D!74UrB?ihr zi2jfPe9YwIi=cOmpn}+=S2Umvx;|h(3oBG879@1~#X1&HhhrXSZV}W8lLW1|0k52x z`U!Ln>}=3XCaB7J3EH;NA_D183xGzB95B06`2rr@{^08#kULrV5}+XjP@^A3R0G^n zY&}_mB5L5#?T^tR%eV08_IJQA!NH^3AAF`iiU}UzQ3iB#Gd#NeF*2{#nV?D^APOvQ=-TmMa2t9DXg5CY# z;u>8JEZE%-D%LUl1{Um{4;uU22eJh^zJM6O^XSy}=**S?l_Va`?-)z(d35_Lcy#6m zfIJUs39g4U3)h32h3g^B!u6nLA;>OsP;^+p@!q|Kc&<4R)&~1cUzykW9gXO>%-FkqUgV0k=p;;45 zAvY}{3njWgdNkJ?Fo5TDm+b?sy9Hf%2kO_qoPUmm0Xhf;K1v=m4h72K1|CQwQK!T} zElGbw8x@p0u(m$^HC(#gW4gm5z>O8~#4czXenT&hK~);fb>|Nkx! z*Q1v=33OUa>gyli-O`{9rQkzgK>mZ=ZRG@#cf~3X_DOd;WL?m7NG1X`rVGF^1j%aM z^C8lpB<%42l85!-ViRaK^yzK~)gB(*)1gXyx;;D~T0!Ej#s|RXO8yshZxm$k_z$%Q zef01=bo7u3G}DM@M9@hT6b~^f;9eL!P(bSuf<1ayM1V#n8{f``*d#yjX3ypR-EwZ{sr#j2l%#rD`E5PF5`I3?~x21 z)AZ@yavY@E7}QR`;nC^J0Xj@n(DeqtAb2(I56^Bk=o)^{WOoja-cXRD7mna_4jsGQ zd0e~CcDjB54Q?KH?Ep33JUU}%cyz|@@Hp-|0n|`;>C9c=aolwYsHN`HnY+fNGj|KP ztOoS~U`=)K*#i!sq-g;nAPb;CEYM;~kIvX5KE1vj$6XJAhXi^<54d#Zf=CC-= zFbfnX9=)v~?|@qVpgkgC_0Tpu$Sm-j18C+DJmCqQW6bFWozL*{$N!hSpqad#3>*v$ zjypgZ1-yXa{EOAXpqcHHpyA{IPta1Hb1zoB2PJ3zmfN6{Ph3<2T)KUKICh@|&6ISz zs6=$SsMK`3sDMV`OS)ZDVme(LKnKo)LZ>rErNX5%x8;TDtN;I9x(~D-D6v6mAR9O~ z{s6a-6&xFXK$^%P5l|bM&$00bxRK22*nRdj_fAl!j#hCP|##ff=4$rSX>=EI%6d~I%7>bV{LpoO9eV(6z(*wkG{33BFX)>9t~9|> z39b%$p|eE>9=)ytpjglV4MsVFM$yl|c<|x>f5>3C;|@?bLqpgTyyC1E6mOv0Lcm9f z9Dq*5fO|yn=^=j5VH#1-fBb(P?a|%#0hAY750tREbbCm=W_RiC1I@yA`~G-w{l)+P zj@{urF5L$_x?4e&nPay<2gojs9{wB-f+7{1vEbbx_K3Jz5!_cB4~9LsAAys=oa+ob`k(BRzK{~cm$MP zQLn@TB}An8J5cY$z@xhn9C+OyK_RB#(cK7Y6oA+o9?6ZM*0e|WoP&^h{F@`xenC2?_B4j%);Q%u`WQFh2dBmcre4G za~){x!*U&{4_T+@(K`>+i3Fbqimj≠jlop!GhG>Y95XYeBg|p%bhf+e&8CT` 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

    ?XB#vBwqizb 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

    ed4|GR&HPVas(8MMgx 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 z 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

    !=sm1 z6y%U@*BhM^Kx@b$;vFDY_j);jdA*?;X`LOQePJMOT4%>0a7E=S0pfZzFIWKDH}*me zw4=J$_kvF^Xs9jpibt=n#EXfLQYZj)jTtySNrBT7XoDmls7u;?`o%O*dD;vbVu1PA z!2>iT*XjELGHNHQj)+5AcG#PS*#Wu1`Q+FzZ90weTlixPi>;_I=^e?OE`` z62Xahp@ZNgypTt5GF}KFI36!p5uAV*KR{bpA*NNlcn#-tf{uxPaT~!uz|6q#;`ATT z@mjtL&>#TS$PzEEfrco0eINMry8iI!4SfO*7qGjUk2pZW1=5!)Q2{RyQ1~ypnwOEG zn|G-rs0=yvzx&6FTdd&ow+@u@bf5n(>ch(j>MiH)I>F4q0N&93;^OcB|GRmMK{_Dg z9s`hS;xarBJR=4 zssVDM^@$Sh=1KvEQq~s=(?O%-^TEnmZ-Z{VIsKwx8b~XA=o?Z_8^C+L-MrlnJPgf0 z|Ch2D-+s;aVkNk@a-*BK#DRwaG`J>ieCfpsu;A$zE5MO?`h@|gb=Q2v05p&VE~~>q z$qzKq0xp|hu>Ak`A5>0(I&MfdDZ*_!@S5#~JqxISYX0%RM8u=@Kq=P?Cs6W+8e(zy z#r}U_LmWWG8p6Gx;>rQEU)y$d84p8=RyXfyd#L-nkH2Pn@ex$Ocz{gx0GZ1A;tkl% zKVDn@7hTBB$k2VGn|CHu2df8I3uwo|1h5ufh?boYEuhh5J#J8Zfd_Fw>r)Nl4`XwW zNB1w|+ugj5P;*(j55H!65f66>=zhmit`|ulV_OfDaCv0j2PHNS<{KWcK@@O12Ha

    -v&li22ibW)^P^| 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%0Dv^|gw;YFDxAbts`AO_Xd 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%0AblYFKx$#>`Uo`LfZ`cs2P|D5g^GjHHAoF|x<1Cl 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

    vlbe}WT9S$uGzPk+mS`s7 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
    DhkEwypGRa$fno((Bn@rC9~n9=tz)iuL-E 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

    =+zoqTChD00l06Rc7U95TBm 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�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 Cnbkhj-4Gae8#e? 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

    *V6p-vZ-0RH{XLTR1eVx2xJ8K48WK!?R7fEq3l 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%0AiJ}?Eef<-HzO< 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

    gnF2n21Kh{v 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 z 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%0DS9HMztuF*g-1 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�*Tu&GcbU}K=BGX{ezyK15l}j;5W`X2_ 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�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

    uF9;opT;!AmOFt|(vxtRehkIYBb11ZyG8AMHF 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

    ttCm248IlhQMG%XDAsD0+Da}EwC=O>}I07yi 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 z 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 literal 269054 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

      cUH)*8Wxu+aQM$A*>@cbz&RqTD!yL2578n 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 Xa(=;L$J7WOa9?Z}!j6)Bq@D!;dh3`U diff --git a/vendor/sdl3/include/SDL.h b/vendor/sdl3/include/SDL.h index ed1b32483..04a05d257 100644 --- a/vendor/sdl3/include/SDL.h +++ b/vendor/sdl3/include/SDL.h @@ -20,7 +20,7 @@ */ /** - * Main include header for the SDL library, version 3.2.16 + * Main include header for the SDL library, version 3.4.0 * * It is almost always best to include just this one header instead of * picking out individual headers included here. There are exceptions to @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include diff --git a/vendor/sdl3/include/SDL_assert.h b/vendor/sdl3/include/SDL_assert.h index 6c90acc02..f0c4637b9 100644 --- a/vendor/sdl3/include/SDL_assert.h +++ b/vendor/sdl3/include/SDL_assert.h @@ -126,20 +126,17 @@ extern "C" { */ #define SDL_TriggerBreakpoint() TriggerABreakpointInAPlatformSpecificManner -#elif defined(_MSC_VER) && _MSC_VER >= 1310 +#elif defined(__MINGW32__) || (defined(_MSC_VER) && _MSC_VER >= 1310) /* Don't include intrin.h here because it contains C++ code */ extern void __cdecl __debugbreak(void); #define SDL_TriggerBreakpoint() __debugbreak() #elif defined(_MSC_VER) && defined(_M_IX86) #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } -#elif defined(ANDROID) - #include - #define SDL_TriggerBreakpoint() assert(0) #elif SDL_HAS_BUILTIN(__builtin_debugtrap) #define SDL_TriggerBreakpoint() __builtin_debugtrap() #elif SDL_HAS_BUILTIN(__builtin_trap) #define SDL_TriggerBreakpoint() __builtin_trap() -#elif (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__)) +#elif (defined(__GNUC__) || defined(__clang__) || defined(__TINYC__)) && (defined(__i386__) || defined(__x86_64__)) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) #elif (defined(__GNUC__) || defined(__clang__)) && defined(__riscv) #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "ebreak\n\t" ) @@ -179,12 +176,48 @@ extern "C" { # define SDL_FUNCTION "???" #endif +#ifdef SDL_WIKI_DOCUMENTATION_SECTION + /** * A macro that reports the current file being compiled. * + * This macro is only defined if it isn't already defined, so to override it + * (perhaps with something that doesn't provide path information at all, so + * build machine information doesn't leak into public binaries), apps can + * define this macro before including SDL.h or SDL_assert.h. + * * \since This macro is available since SDL 3.2.0. */ +#define SDL_FILE __FILE_NAME__ + +#elif !defined(SDL_FILE) +#ifdef __FILE_NAME__ +#define SDL_FILE __FILE_NAME__ +#else #define SDL_FILE __FILE__ +#endif +#endif + +#ifdef SDL_WIKI_DOCUMENTATION_SECTION + +/** + * A macro that reports the current file being compiled, for use in + * assertions. + * + * This macro is only defined if it isn't already defined, so to override it + * (perhaps with something that doesn't provide path information at all, so + * build machine information doesn't leak into public binaries), apps can + * define this macro before including SDL_assert.h. For example, defining this + * to `""` will make sure no source path information is included in asserts. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_ASSERT_FILE SDL_FILE + +#elif !defined(SDL_ASSERT_FILE) +#define SDL_ASSERT_FILE SDL_FILE +#endif + /** * A macro that reports the current line number of the file being compiled. @@ -362,8 +395,8 @@ extern SDL_DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData * #define SDL_enabled_assert(condition) \ do { \ while ( !(condition) ) { \ - static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, 0, 0, 0, 0 }; \ - const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + static struct SDL_AssertData sdl_assert_data = { false, 0, #condition, NULL, 0, NULL, NULL }; \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_ASSERT_FILE, SDL_LINE); \ if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ continue; /* go again. */ \ } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ diff --git a/vendor/sdl3/include/SDL_atomic.h b/vendor/sdl3/include/SDL_atomic.h index 78b5e0fa5..bfcf81ee0 100644 --- a/vendor/sdl3/include/SDL_atomic.h +++ b/vendor/sdl3/include/SDL_atomic.h @@ -596,6 +596,24 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_SetAtomicU32(SDL_AtomicU32 *a, Uint32 v); */ extern SDL_DECLSPEC Uint32 SDLCALL SDL_GetAtomicU32(SDL_AtomicU32 *a); +/** + * Add to an atomic variable. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_AtomicU32 variable to be modified. + * \param v the desired value to add or subtract. + * \returns the previous value of the atomic variable. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC Uint32 SDLCALL SDL_AddAtomicU32(SDL_AtomicU32 *a, int v); + /** * Set a pointer to a new value if it is currently an old value. * diff --git a/vendor/sdl3/include/SDL_audio.h b/vendor/sdl3/include/SDL_audio.h index c6acf885f..4c362e738 100644 --- a/vendor/sdl3/include/SDL_audio.h +++ b/vendor/sdl3/include/SDL_audio.h @@ -577,6 +577,15 @@ extern SDL_DECLSPEC SDL_AudioDeviceID * SDLCALL SDL_GetAudioRecordingDevices(int /** * Get the human-readable name of a specific audio device. * + * **WARNING**: this function will work with SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK + * and SDL_AUDIO_DEVICE_DEFAULT_RECORDING, returning the current default + * physical devices' names. However, as the default device may change at any + * time, it is likely better to show a generic name to the user, like "System + * default audio device" or perhaps "default [currently %s]". Do not store + * this name to disk to reidentify the device in a later run of the program, + * as the default might change in general, and the string will be the name of + * a specific device and not the abstract system default. + * * \param devid the instance ID of the device to query. * \returns the name of the audio device, or NULL on failure; call * SDL_GetError() for more information. @@ -942,7 +951,10 @@ extern SDL_DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID devid); * Binding a stream to a device will set its output format for playback * devices, and its input format for recording devices, so they match the * device's settings. The caller is welcome to change the other end of the - * stream's format at any time with SDL_SetAudioStreamFormat(). + * stream's format at any time with SDL_SetAudioStreamFormat(). If the other + * end of the stream's format has never been set (the audio stream was created + * with a NULL audio spec), this function will set it to match the device + * end's format. * * \param devid an audio device to bind a stream to. * \param streams an array of audio streams to bind. @@ -1021,7 +1033,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_UnbindAudioStream(SDL_AudioStream *stream); /** * Query an audio stream for its currently-bound device. * - * This reports the audio device that an audio stream is currently bound to. + * This reports the logical audio device that an audio stream is currently + * bound to. * * If not bound, or invalid, this returns zero, which is not a valid device * ID. @@ -1063,6 +1076,17 @@ extern SDL_DECLSPEC SDL_AudioStream * SDLCALL SDL_CreateAudioStream(const SDL_Au /** * Get the properties associated with an audio stream. * + * The application can hang any data it wants here, but the following + * properties are understood by SDL: + * + * - `SDL_PROP_AUDIOSTREAM_AUTO_CLEANUP_BOOLEAN`: if true (the default), the + * stream be automatically cleaned up when the audio subsystem quits. If set + * to false, the streams will persist beyond that. This property is ignored + * for streams created through SDL_OpenAudioDeviceStream(), and will always + * be cleaned up. Streams that are not cleaned up will still be unbound from + * devices when the audio subsystem quits. This property was added in SDL + * 3.4.0. + * * \param stream the SDL_AudioStream to query. * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. @@ -1073,6 +1097,9 @@ extern SDL_DECLSPEC SDL_AudioStream * SDLCALL SDL_CreateAudioStream(const SDL_Au */ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetAudioStreamProperties(SDL_AudioStream *stream); +#define SDL_PROP_AUDIOSTREAM_AUTO_CLEANUP_BOOLEAN "SDL.audiostream.auto_cleanup" + + /** * Query the current format of an audio stream. * @@ -1149,14 +1176,14 @@ extern SDL_DECLSPEC float SDLCALL SDL_GetAudioStreamFrequencyRatio(SDL_AudioStre * * The frequency ratio is used to adjust the rate at which input data is * consumed. Changing this effectively modifies the speed and pitch of the - * audio. A value greater than 1.0 will play the audio faster, and at a higher - * pitch. A value less than 1.0 will play the audio slower, and at a lower - * pitch. + * audio. A value greater than 1.0f will play the audio faster, and at a + * higher pitch. A value less than 1.0f will play the audio slower, and at a + * lower pitch. 1.0f means play at normal speed. * * This is applied during SDL_GetAudioStreamData, and can be continuously * changed to create various effects. * - * \param stream the stream the frequency ratio is being changed. + * \param stream the stream on which the frequency ratio is being changed. * \param ratio the frequency ratio. 1.0 is normal speed. Must be between 0.01 * and 100. * \returns true on success or false on failure; call SDL_GetError() for more @@ -1318,7 +1345,7 @@ extern SDL_DECLSPEC int * SDLCALL SDL_GetAudioStreamOutputChannelMap(SDL_AudioSt * \threadsafety It is safe to call this function from any thread, as it holds * a stream-specific mutex while running. Don't change the * stream's format to have a different number of channels from a - * a different thread at the same time, though! + * different thread at the same time, though! * * \since This function is available since SDL 3.2.0. * @@ -1332,7 +1359,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetAudioStreamInputChannelMap(SDL_AudioStre * Channel maps are optional; most things do not need them, instead passing * data in the [order that SDL expects](CategoryAudio#channel-layouts). * - * The output channel map reorders data that leaving a stream via + * The output channel map reorders data that is leaving a stream via * SDL_GetAudioStreamData. * * Each item in the array represents an input channel, and its value is the @@ -1414,6 +1441,136 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetAudioStreamOutputChannelMap(SDL_AudioStr */ extern SDL_DECLSPEC bool SDLCALL SDL_PutAudioStreamData(SDL_AudioStream *stream, const void *buf, int len); +/** + * A callback that fires for completed SDL_PutAudioStreamDataNoCopy() data. + * + * When using SDL_PutAudioStreamDataNoCopy() to provide data to an + * SDL_AudioStream, it's not safe to dispose of the data until the stream has + * completely consumed it. Often times it's difficult to know exactly when + * this has happened. + * + * This callback fires once when the stream no longer needs the buffer, + * allowing the app to easily free or reuse it. + * + * \param userdata an opaque pointer provided by the app for their personal + * use. + * \param buf the pointer provided to SDL_PutAudioStreamDataNoCopy(). + * \param buflen the size of buffer, in bytes, provided to + * SDL_PutAudioStreamDataNoCopy(). + * + * \threadsafety This callbacks may run from any thread, so if you need to + * protect shared data, you should use SDL_LockAudioStream to + * serialize access; this lock will be held before your callback + * is called, so your callback does not need to manage the lock + * explicitly. + * + * \since This datatype is available since SDL 3.4.0. + * + * \sa SDL_SetAudioStreamGetCallback + * \sa SDL_SetAudioStreamPutCallback + */ +typedef void (SDLCALL *SDL_AudioStreamDataCompleteCallback)(void *userdata, const void *buf, int buflen); + +/** + * Add external data to an audio stream without copying it. + * + * Unlike SDL_PutAudioStreamData(), this function does not make a copy of the + * provided data, instead storing the provided pointer. This means that the + * put operation does not need to allocate and copy the data, but the original + * data must remain available until the stream is done with it, either by + * being read from the stream in its entirety, or a call to + * SDL_ClearAudioStream() or SDL_DestroyAudioStream(). + * + * The data must match the format/channels/samplerate specified in the latest + * call to SDL_SetAudioStreamFormat, or the format specified when creating the + * stream if it hasn't been changed. + * + * An optional callback may be provided, which is called when the stream no + * longer needs the data. Once this callback fires, the stream will not access + * the data again. This callback will fire for any reason the data is no + * longer needed, including clearing or destroying the stream. + * + * Note that there is still an allocation to store tracking information, so + * this function is more efficient for larger blocks of data. If you're + * planning to put a few samples at a time, it will be more efficient to use + * SDL_PutAudioStreamData(), which allocates and buffers in blocks. + * + * \param stream the stream the audio data is being added to. + * \param buf a pointer to the audio data to add. + * \param len the number of bytes to add to the stream. + * \param callback the callback function to call when the data is no longer + * needed by the stream. May be NULL. + * \param userdata an opaque pointer provided to the callback for its own + * personal use. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety It is safe to call this function from any thread, but if the + * stream has a callback set, the caller might need to manage + * extra locking. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_ClearAudioStream + * \sa SDL_FlushAudioStream + * \sa SDL_GetAudioStreamData + * \sa SDL_GetAudioStreamQueued + */ +extern SDL_DECLSPEC bool SDLCALL SDL_PutAudioStreamDataNoCopy(SDL_AudioStream *stream, const void *buf, int len, SDL_AudioStreamDataCompleteCallback callback, void *userdata); + +/** + * Add data to the stream with each channel in a separate array. + * + * This data must match the format/channels/samplerate specified in the latest + * call to SDL_SetAudioStreamFormat, or the format specified when creating the + * stream if it hasn't been changed. + * + * The data will be interleaved and queued. Note that SDL_AudioStream only + * operates on interleaved data, so this is simply a convenience function for + * easily queueing data from sources that provide separate arrays. There is no + * equivalent function to retrieve planar data. + * + * The arrays in `channel_buffers` are ordered as they are to be interleaved; + * the first array will be the first sample in the interleaved data. Any + * individual array may be NULL; in this case, silence will be interleaved for + * that channel. + * + * `num_channels` specifies how many arrays are in `channel_buffers`. This can + * be used as a safety to prevent overflow, in case the stream format has + * changed elsewhere. If more channels are specified than the current input + * spec, they are ignored. If less channels are specified, the missing arrays + * are treated as if they are NULL (silence is written to those channels). If + * the count is -1, SDL will assume the array count matches the current input + * spec. + * + * Note that `num_samples` is the number of _samples per array_. This can also + * be thought of as the number of _sample frames_ to be queued. A value of 1 + * with stereo arrays will queue two samples to the stream. This is different + * than SDL_PutAudioStreamData, which wants the size of a single array in + * bytes. + * + * \param stream the stream the audio data is being added to. + * \param channel_buffers a pointer to an array of arrays, one array per + * channel. + * \param num_channels the number of arrays in `channel_buffers` or -1. + * \param num_samples the number of _samples_ per array to write to the + * stream. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety It is safe to call this function from any thread, but if the + * stream has a callback set, the caller might need to manage + * extra locking. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_ClearAudioStream + * \sa SDL_FlushAudioStream + * \sa SDL_GetAudioStreamData + * \sa SDL_GetAudioStreamQueued + */ +extern SDL_DECLSPEC bool SDLCALL SDL_PutAudioStreamPlanarData(SDL_AudioStream *stream, const void * const *channel_buffers, int num_channels, int num_samples); + /** * Get converted/resampled data from the stream. * @@ -1583,8 +1740,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_PauseAudioStreamDevice(SDL_AudioStream *str * previously been paused. Once unpaused, any bound audio streams will begin * to progress again, and audio can be generated. * - * Remember, SDL_OpenAudioDeviceStream opens device in a paused state, so this - * function call is required for audio playback to begin on such device. + * SDL_OpenAudioDeviceStream opens audio devices in a paused state, so this + * function call is required for audio playback to begin on such devices. * * \param stream the audio stream associated with the audio device to resume. * \returns true on success or false on failure; call SDL_GetError() for more @@ -1841,7 +1998,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_DestroyAudioStream(SDL_AudioStream *stream) * Also unlike other functions, the audio device begins paused. This is to map * more closely to SDL2-style behavior, since there is no extra step here to * bind a stream to begin audio flowing. The audio device should be resumed - * with `SDL_ResumeAudioStreamDevice(stream);` + * with SDL_ResumeAudioStreamDevice(). * * This function works with both playback and recording devices. * diff --git a/vendor/sdl3/include/SDL_begin_code.h b/vendor/sdl3/include/SDL_begin_code.h index a6b47cf4b..675cd7f09 100644 --- a/vendor/sdl3/include/SDL_begin_code.h +++ b/vendor/sdl3/include/SDL_begin_code.h @@ -261,9 +261,9 @@ * * On compilers without restrict support, this is defined to nothing. * - * \since This macro is available since SDL 3.2.0. + * \since This macro is available since SDL 3.4.0. */ -#define SDL_RESTRICT __restrict__ +#define SDL_RESTRICT __restrict /** * Check if the compiler supports a given builtin functionality. @@ -281,9 +281,61 @@ */ #define SDL_HAS_BUILTIN(x) __has_builtin(x) +/** + * A macro to specify data alignment. + * + * This informs the compiler that a given datatype or variable must be aligned + * to a specific byte count. + * + * For example: + * + * ```c + * // make sure this is struct is aligned to 16 bytes for SIMD access. + * typedef struct { + * float x, y, z, w; + * } SDL_ALIGNED(16) MySIMDAlignedData; + * + * // make sure this one field in a struct is aligned to 16 bytes for SIMD access. + * typedef struct { + * SomeStuff stuff; + * float SDL_ALIGNED(16) position[4]; + * SomeOtherStuff other_stuff; + * } MyStruct; + * + * // make sure this variable is aligned to 32 bytes. + * int SDL_ALIGNED(32) myval = 0; + * ``` + * + * Alignment is only guaranteed for things the compiler places: local + * variables on the stack and global/static variables. To dynamically allocate + * something that respects this alignment, use SDL_aligned_alloc() or some + * other mechanism. + * + * On compilers without alignment support, this macro is defined to an invalid + * symbol, to make it clear that the current compiler is likely to generate + * incorrect code when it sees this macro. + * + * \param x the byte count to align to, so the data's address will be a + * multiple of this value. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_ALIGNED(x) __attribute__((aligned(x))) + /* end of wiki documentation section. */ #endif +/* `restrict` is from C99, but __restrict works with both Visual Studio and GCC. */ +#ifndef SDL_RESTRICT +# if defined(restrict) || ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))) +# define SDL_RESTRICT restrict +# elif defined(_MSC_VER) || defined(__GNUC__) || defined(__clang__) +# define SDL_RESTRICT __restrict +# else +# define SDL_RESTRICT +# endif +#endif + #ifndef SDL_HAS_BUILTIN #ifdef __has_builtin #define SDL_HAS_BUILTIN(x) __has_builtin(x) @@ -379,7 +431,7 @@ #endif /* SDL_INLINE not defined */ #ifndef SDL_FORCE_INLINE -#ifdef _MSC_VER +#if defined(_MSC_VER) && (_MSC_VER >= 1200) #define SDL_FORCE_INLINE __forceinline #elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) #define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ @@ -389,7 +441,7 @@ #endif /* SDL_FORCE_INLINE not defined */ #ifndef SDL_NORETURN -#ifdef __GNUC__ +#if defined(__GNUC__) #define SDL_NORETURN __attribute__((noreturn)) #elif defined(_MSC_VER) #define SDL_NORETURN __declspec(noreturn) @@ -484,3 +536,18 @@ #define SDL_ALLOC_SIZE2(p1, p2) #endif #endif /* SDL_ALLOC_SIZE2 not defined */ + +#ifndef SDL_ALIGNED +#if defined(__clang__) || defined(__GNUC__) +#define SDL_ALIGNED(x) __attribute__((aligned(x))) +#elif defined(_MSC_VER) +#define SDL_ALIGNED(x) __declspec(align(x)) +#elif defined(__cplusplus) && (__cplusplus >= 201103L) +#define SDL_ALIGNED(x) alignas(x) +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#define SDL_ALIGNED(x) _Alignas(x) +#else +#define SDL_ALIGNED(x) PLEASE_DEFINE_SDL_ALIGNED +#endif +#endif /* SDL_ALIGNED not defined */ + diff --git a/vendor/sdl3/include/SDL_camera.h b/vendor/sdl3/include/SDL_camera.h index 5f3911fdf..59ce73fe8 100644 --- a/vendor/sdl3/include/SDL_camera.h +++ b/vendor/sdl3/include/SDL_camera.h @@ -119,7 +119,7 @@ typedef struct SDL_CameraSpec int width; /**< Frame width */ int height; /**< Frame height */ int framerate_numerator; /**< Frame rate numerator ((num / denom) == FPS, (denom / num) == duration in seconds) */ - int framerate_denominator; /**< Frame rate demoninator ((num / denom) == FPS, (denom / num) == duration in seconds) */ + int framerate_denominator; /**< Frame rate denominator ((num / denom) == FPS, (denom / num) == duration in seconds) */ } SDL_CameraSpec; /** @@ -136,6 +136,20 @@ typedef enum SDL_CameraPosition SDL_CAMERA_POSITION_BACK_FACING } SDL_CameraPosition; +/** + * The current state of a request for camera access. + * + * \since This enum is available since SDL 3.4.0. + * + * \sa SDL_GetCameraPermissionState + */ +typedef enum SDL_CameraPermissionState +{ + SDL_CAMERA_PERMISSION_STATE_DENIED = -1, + SDL_CAMERA_PERMISSION_STATE_PENDING, + SDL_CAMERA_PERMISSION_STATE_APPROVED, +} SDL_CameraPermissionState; + /** * Use this function to get the number of built-in camera drivers. @@ -346,8 +360,9 @@ extern SDL_DECLSPEC SDL_Camera * SDLCALL SDL_OpenCamera(SDL_CameraID instance_id * on others the approval might be implicit and not alert the user at all. * * This function can be used to check the status of that approval. It will - * return 0 if still waiting for user response, 1 if the camera is approved - * for use, and -1 if the user denied access. + * return SDL_CAMERA_PERMISSION_STATE_PENDING if waiting for user response, + * SDL_CAMERA_PERMISSION_STATE_APPROVED if the camera is approved for use, and + * SDL_CAMERA_PERMISSION_STATE_DENIED if the user denied access. * * Instead of polling with this function, you can wait for a * SDL_EVENT_CAMERA_DEVICE_APPROVED (or SDL_EVENT_CAMERA_DEVICE_DENIED) event @@ -358,8 +373,9 @@ extern SDL_DECLSPEC SDL_Camera * SDLCALL SDL_OpenCamera(SDL_CameraID instance_id * SDL_CloseCamera() to dispose of it. * * \param camera the opened camera device to query. - * \returns -1 if user denied access to the camera, 1 if user approved access, - * 0 if no decision has been made yet. + * \returns an SDL_CameraPermissionState value indicating if access is + * granted, or `SDL_CAMERA_PERMISSION_STATE_PENDING` if the decision + * is still pending. * * \threadsafety It is safe to call this function from any thread. * @@ -368,7 +384,7 @@ extern SDL_DECLSPEC SDL_Camera * SDLCALL SDL_OpenCamera(SDL_CameraID instance_id * \sa SDL_OpenCamera * \sa SDL_CloseCamera */ -extern SDL_DECLSPEC int SDLCALL SDL_GetCameraPermissionState(SDL_Camera *camera); +extern SDL_DECLSPEC SDL_CameraPermissionState SDLCALL SDL_GetCameraPermissionState(SDL_Camera *camera); /** * Get the instance ID of an opened camera. diff --git a/vendor/sdl3/include/SDL_clipboard.h b/vendor/sdl3/include/SDL_clipboard.h index 0d3cbb499..7480eb284 100644 --- a/vendor/sdl3/include/SDL_clipboard.h +++ b/vendor/sdl3/include/SDL_clipboard.h @@ -106,7 +106,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetClipboardText(const char *text); /** * Get UTF-8 text from the clipboard. * - * This functions returns an empty string if there was not enough memory left + * This function returns an empty string if there is not enough memory left * for a copy of the clipboard's content. * * \returns the clipboard text on success or an empty string on failure; call @@ -155,7 +155,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetPrimarySelectionText(const char *text); /** * Get UTF-8 text from the primary selection. * - * This functions returns an empty string if there was not enough memory left + * This function returns an empty string if there is not enough memory left * for a copy of the primary selection's content. * * \returns the primary selection text on success or an empty string on @@ -194,15 +194,14 @@ extern SDL_DECLSPEC bool SDLCALL SDL_HasPrimarySelectionText(void); * clipboard is cleared or new data is set. The clipboard is automatically * cleared in SDL_Quit(). * - * \param userdata a pointer to provided user data. + * \param userdata a pointer to the provided user data. * \param mime_type the requested mime-type. * \param size a pointer filled in with the length of the returned data. * \returns a pointer to the data for the provided mime-type. Returning NULL - * or setting length to 0 will cause no data to be sent to the - * "receiver". It is up to the receiver to handle this. Essentially - * returning no data is more or less undefined behavior and may cause - * breakage in receiving applications. The returned data will not be - * freed so it needs to be retained and dealt with internally. + * or setting the length to 0 will cause zero length data to be sent + * to the "receiver", which should be able to handle this. The + * returned data will not be freed, so it needs to be retained and + * dealt with internally. * * \since This function is available since SDL 3.2.0. * @@ -211,10 +210,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_HasPrimarySelectionText(void); typedef const void *(SDLCALL *SDL_ClipboardDataCallback)(void *userdata, const char *mime_type, size_t *size); /** - * Callback function that will be called when the clipboard is cleared, or new - * data is set. + * Callback function that will be called when the clipboard is cleared, or + * when new data is set. * - * \param userdata a pointer to provided user data. + * \param userdata a pointer to the provided user data. * * \since This function is available since SDL 3.2.0. * @@ -231,7 +230,7 @@ typedef void (SDLCALL *SDL_ClipboardCleanupCallback)(void *userdata); * respond with the data for the requested mime-type. * * The size of text data does not include any terminator, and the text does - * not need to be null terminated (e.g. you can directly copy a portion of a + * not need to be null-terminated (e.g., you can directly copy a portion of a * document). * * \param callback a function pointer to the function that provides the @@ -239,7 +238,8 @@ typedef void (SDLCALL *SDL_ClipboardCleanupCallback)(void *userdata); * \param cleanup a function pointer to the function that cleans up the * clipboard data. * \param userdata an opaque pointer that will be forwarded to the callbacks. - * \param mime_types a list of mime-types that are being offered. + * \param mime_types a list of mime-types that are being offered. SDL copies + * the given list. * \param num_mime_types the number of mime-types in the mime_types list. * \returns true on success or false on failure; call SDL_GetError() for more * information. @@ -269,10 +269,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetClipboardData(SDL_ClipboardDataCallback extern SDL_DECLSPEC bool SDLCALL SDL_ClearClipboardData(void); /** - * Get the data from clipboard for a given mime type. + * Get the data from the clipboard for a given mime type. * * The size of text data does not include the terminator, but the text is - * guaranteed to be null terminated. + * guaranteed to be null-terminated. * * \param mime_type the mime type to read from the clipboard. * \param size a pointer filled in with the length of the returned data. @@ -292,8 +292,8 @@ extern SDL_DECLSPEC void * SDLCALL SDL_GetClipboardData(const char *mime_type, s /** * Query whether there is data in the clipboard for the provided mime type. * - * \param mime_type the mime type to check for data for. - * \returns true if there exists data in clipboard for the provided mime type, + * \param mime_type the mime type to check for data. + * \returns true if data exists in the clipboard for the provided mime type, * false if it does not. * * \threadsafety This function should only be called on the main thread. @@ -310,7 +310,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_HasClipboardData(const char *mime_type); * * \param num_mime_types a pointer filled with the number of mime types, may * be NULL. - * \returns a null terminated array of strings with mime types, or NULL on + * \returns a null-terminated array of strings with mime types, or NULL on * failure; call SDL_GetError() for more information. This should be * freed with SDL_free() when it is no longer needed. * diff --git a/vendor/sdl3/include/SDL_cpuinfo.h b/vendor/sdl3/include/SDL_cpuinfo.h index 1745bd934..b1e125b55 100644 --- a/vendor/sdl3/include/SDL_cpuinfo.h +++ b/vendor/sdl3/include/SDL_cpuinfo.h @@ -344,6 +344,27 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetSystemRAM(void); */ extern SDL_DECLSPEC size_t SDLCALL SDL_GetSIMDAlignment(void); +/** + * Report the size of a page of memory. + * + * Different platforms might have different memory page sizes. In current + * times, 4 kilobytes is not unusual, but newer systems are moving to larger + * page sizes, and esoteric platforms might have any unexpected size. + * + * Note that this function can return 0, which means SDL can't determine the + * page size on this platform. It will _not_ set an error string to be + * retrieved with SDL_GetError() in this case! In this case, defaulting to + * 4096 is often a reasonable option. + * + * \returns the size of a single page of memory, in bytes, or 0 if SDL can't + * determine this information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC int SDLCALL SDL_GetSystemPageSize(void); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/vendor/sdl3/include/SDL_dialog.h b/vendor/sdl3/include/SDL_dialog.h index ddb9e24d5..395b7e8c9 100644 --- a/vendor/sdl3/include/SDL_dialog.h +++ b/vendor/sdl3/include/SDL_dialog.h @@ -139,10 +139,12 @@ typedef void (SDLCALL *SDL_DialogFileCallback)(void *userdata, const char * cons * it will be invoked. * \param window the window that the dialog should be modal for, may be NULL. * Not all platforms support this option. - * \param filters a list of filters, may be NULL. Not all platforms support - * this option, and platforms that do support it may allow the - * user to ignore the filters. If non-NULL, it must remain - * valid at least until the callback is invoked. + * \param filters a list of filters, may be NULL. See the + * [`SDL_DialogFileFilter`](SDL_DialogFileFilter#code-examples) + * documentation for examples]. Not all platforms support this + * option, and platforms that do support it may allow the user + * to ignore the filters. If non-NULL, it must remain valid at + * least until the callback is invoked. * \param nfilters the number of filters. Ignored if filters is NULL. * \param default_location the default folder or file to start the dialog at, * may be NULL. Not all platforms support this option. diff --git a/vendor/sdl3/include/SDL_dlopennote.h b/vendor/sdl3/include/SDL_dlopennote.h new file mode 100644 index 000000000..e866d2a20 --- /dev/null +++ b/vendor/sdl3/include/SDL_dlopennote.h @@ -0,0 +1,234 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: DlopenNotes */ + +/** + * # CategoryDlopenNotes + * + * This header allows you to annotate your code so external tools know about + * dynamic shared library dependencies. + * + * If you determine that your toolchain doesn't support dlopen notes, you can + * disable this feature by defining `SDL_DISABLE_DLOPEN_NOTES`. You can use + * this CMake snippet to check for support: + * + * ```cmake + * include(CheckCSourceCompiles) + * find_package(SDL3 REQUIRED CONFIG COMPONENTS Headers) + * list(APPEND CMAKE_REQUIRED_LIBRARIES SDL3::Headers) + * check_c_source_compiles([==[ + * #include + * SDL_ELF_NOTE_DLOPEN("sdl-video", + * "Support for video through SDL", + * SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED, + * "libSDL-1.2.so.0", "libSDL-2.0.so.0", "libSDL3.so.0" + * ) + * int main(int argc, char *argv[]) { + * return argc + argv[0][1]; + * } + * ]==] COMPILER_SUPPORTS_SDL_ELF_NOTE_DLOPEN) + * if(NOT COMPILER_SUPPORTS_SDL_ELF_NOTE_DLOPEN) + * add_compile_definitions(-DSDL_DISABLE_DLOPEN_NOTE) + * endif() + * ``` + */ + +#ifndef SDL_dlopennote_h +#define SDL_dlopennote_h + +/** + * Use this macro with SDL_ELF_NOTE_DLOPEN() to note that a dynamic shared + * library dependency is optional. + * + * Optional functionality uses the dependency, the binary will work and the + * dependency is only needed for full-featured installations. + * + * \since This macro is available since SDL 3.4.0. + * + * \sa SDL_ELF_NOTE_DLOPEN + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED + */ +#define SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED "suggested" + +/** + * Use this macro with SDL_ELF_NOTE_DLOPEN() to note that a dynamic shared + * library dependency is recommended. + * + * Important functionality needs the dependency, the binary will work but in + * most cases the dependency should be provided. + * + * \since This macro is available since SDL 3.4.0. + * + * \sa SDL_ELF_NOTE_DLOPEN + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED + */ +#define SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED "recommended" + +/** + * Use this macro with SDL_ELF_NOTE_DLOPEN() to note that a dynamic shared + * library dependency is required. + * + * Core functionality needs the dependency, the binary will not work if it + * cannot be found. + * + * \since This macro is available since SDL 3.4.0. + * + * \sa SDL_ELF_NOTE_DLOPEN + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED + */ +#define SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED "required" + + +#if !defined(SDL_PLATFORM_UNIX) || defined(SDL_PLATFORM_ANDROID) +/* The dlopen note functionality isn't used on this platform */ +#ifndef SDL_DISABLE_DLOPEN_NOTES +#define SDL_DISABLE_DLOPEN_NOTES +#endif +#elif defined(__GNUC__) && (__GNUC__ < 3 || (__GNUC__ == 3 && __GNUC_MINOR__ < 1)) +/* gcc < 3.1 too old */ +#ifndef SDL_DISABLE_DLOPEN_NOTES +#define SDL_DISABLE_DLOPEN_NOTES +#endif +#endif /* SDL_PLATFORM_UNIX || SDL_PLATFORM_ANDROID */ + +#if defined(__ELF__) && !defined(SDL_DISABLE_DLOPEN_NOTES) + +#include + +#define SDL_ELF_NOTE_DLOPEN_VENDOR "FDO" +#define SDL_ELF_NOTE_DLOPEN_TYPE 0x407c0c0aU + +#define SDL_ELF_NOTE_INTERNAL2(json, variable_name) \ + __attribute__((aligned(4), used, section(".note.dlopen"))) \ + static const struct { \ + struct { \ + Uint32 n_namesz; \ + Uint32 n_descsz; \ + Uint32 n_type; \ + } nhdr; \ + char name[4]; \ + __attribute__((aligned(4))) char dlopen_json[sizeof(json)]; \ + } variable_name = { \ + { \ + sizeof(SDL_ELF_NOTE_DLOPEN_VENDOR), \ + sizeof(json), \ + SDL_ELF_NOTE_DLOPEN_TYPE \ + }, \ + SDL_ELF_NOTE_DLOPEN_VENDOR, \ + json \ + } + +#define SDL_ELF_NOTE_INTERNAL(json, variable_name) \ + SDL_ELF_NOTE_INTERNAL2(json, variable_name) + +#define SDL_DLNOTE_JSON_ARRAY1(N1) "[\"" N1 "\"]" +#define SDL_DLNOTE_JSON_ARRAY2(N1,N2) "[\"" N1 "\",\"" N2 "\"]" +#define SDL_DLNOTE_JSON_ARRAY3(N1,N2,N3) "[\"" N1 "\",\"" N2 "\",\"" N3 "\"]" +#define SDL_DLNOTE_JSON_ARRAY4(N1,N2,N3,N4) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\"]" +#define SDL_DLNOTE_JSON_ARRAY5(N1,N2,N3,N4,N5) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\"]" +#define SDL_DLNOTE_JSON_ARRAY6(N1,N2,N3,N4,N5,N6) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\"]" +#define SDL_DLNOTE_JSON_ARRAY7(N1,N2,N3,N4,N5,N6,N7) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\"]" +#define SDL_DLNOTE_JSON_ARRAY8(N1,N2,N3,N4,N5,N6,N7,N8) "[\"" N1 "\",\"" N2 "\",\"" N3 "\",\"" N4 "\",\"" N5 "\",\"" N6 "\",\"" N7 "\",\"" N8 "\"]" +#define SDL_DLNOTE_JSON_ARRAY_GET(N1,N2,N3,N4,N5,N6,N7,N8,NAME,...) NAME +#define SDL_DLNOTE_JSON_ARRAY(...) \ + SDL_DLNOTE_JSON_ARRAY_GET( \ + __VA_ARGS__, \ + SDL_DLNOTE_JSON_ARRAY8, \ + SDL_DLNOTE_JSON_ARRAY7, \ + SDL_DLNOTE_JSON_ARRAY6, \ + SDL_DLNOTE_JSON_ARRAY5, \ + SDL_DLNOTE_JSON_ARRAY4, \ + SDL_DLNOTE_JSON_ARRAY3, \ + SDL_DLNOTE_JSON_ARRAY2, \ + SDL_DLNOTE_JSON_ARRAY1 \ + )(__VA_ARGS__) + +/* Create "unique" variable name using __LINE__, + * so creating multiple elf notes on the same line is not supported + */ +#define SDL_DLNOTE_JOIN2(A,B) A##B +#define SDL_DLNOTE_JOIN(A,B) SDL_DLNOTE_JOIN2(A,B) +#define SDL_DLNOTE_UNIQUE_NAME SDL_DLNOTE_JOIN(s_SDL_dlopen_note_, __LINE__) + +/** + * Add a note that your application has dynamic shared library dependencies. + * + * You can do this by adding the following to the global scope: + * + * ```c + * SDL_ELF_NOTE_DLOPEN( + * "png", + * "Support for loading PNG images using libpng (required for APNG)", + * SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED, + * "libpng12.so.0" + * ) + * ``` + * + * A trailing semicolon is not needed. + * + * Or if you support multiple versions of a library, you can list them: + * + * ```c + * // Our app supports SDL1, SDL2, and SDL3 by dynamically loading them + * SDL_ELF_NOTE_DLOPEN( + * "SDL", + * "Create windows through SDL video backend", + * SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED + * "libSDL-1.2.so.0", "libSDL2-2.0.so.0", "libSDL3.so.0" + * ) + * ``` + * + * This macro is not available for compilers that do not support variadic + * macro's. + * + * \since This macro is available since SDL 3.4.0. + * + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_SUGGESTED + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_RECOMMENDED + * \sa SDL_ELF_NOTE_DLOPEN_PRIORITY_REQUIRED + */ +#define SDL_ELF_NOTE_DLOPEN(feature, description, priority, ...) \ + SDL_ELF_NOTE_INTERNAL( \ + "[{\"feature\":\"" feature \ + "\",\"description\":\"" description \ + "\",\"priority\":\"" priority \ + "\",\"soname\":" SDL_DLNOTE_JSON_ARRAY(__VA_ARGS__) "}]", \ + SDL_DLNOTE_UNIQUE_NAME); + +#elif defined(__GNUC__) && __GNUC__ < 3 + +#define SDL_ELF_NOTE_DLOPEN(args...) + +#elif defined(_MSC_VER) && _MSC_VER < 1400 + +/* Variadic macros are not supported */ + +#else + +#define SDL_ELF_NOTE_DLOPEN(...) + +#endif + +#endif /* SDL_dlopennote_h */ diff --git a/vendor/sdl3/include/SDL_endian.h b/vendor/sdl3/include/SDL_endian.h index a34e9d4b0..6b1b4cbcf 100644 --- a/vendor/sdl3/include/SDL_endian.h +++ b/vendor/sdl3/include/SDL_endian.h @@ -46,7 +46,7 @@ #if defined(_MSC_VER) && (_MSC_VER >= 1400) /* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ -#ifdef __clang__ +#if defined(__clang__) && !SDL_HAS_BUILTIN(_m_prefetch) #ifndef __PRFCHWINTRIN_H #define __PRFCHWINTRIN_H static __inline__ void __attribute__((__always_inline__, __nodebug__)) @@ -128,7 +128,7 @@ _m_prefetch(void *__P) * \sa SDL_BIG_ENDIAN */ #define SDL_BYTEORDER SDL_LIL_ENDIAN___or_maybe___SDL_BIG_ENDIAN -#elif defined(SDL_PLATFORM_LINUX) +#elif defined(SDL_PLATFORM_LINUX) || defined(__GLIBC__) #include #define SDL_BYTEORDER __BYTE_ORDER #elif defined(SDL_PLATFORM_SOLARIS) @@ -252,7 +252,7 @@ SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) #elif defined(__x86_64__) SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x) { - __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + __asm__("xchgb %b0,%h0": "=abcd"(x):"0"(x)); return x; } #elif (defined(__powerpc__) || defined(__ppc__)) @@ -486,7 +486,7 @@ SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x) { return x_but_byteswapped; } * * \since This function is available since SDL 3.2.0. */ -SDL_FORCE_INLINE Uint32 SDL_Swap64(Uint64 x) { return x_but_byteswapped; } +SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x) { return x_but_byteswapped; } /** * Swap a 16-bit value from littleendian to native byte order. diff --git a/vendor/sdl3/include/SDL_events.h b/vendor/sdl3/include/SDL_events.h index d267f051f..4c06e45b1 100644 --- a/vendor/sdl3/include/SDL_events.h +++ b/vendor/sdl3/include/SDL_events.h @@ -30,7 +30,7 @@ * coming and going, the system changing in some way, etc. * * An app generally takes a moment, perhaps at the start of a new frame, to - * examine any events that have occured since the last time and process or + * examine any events that have occurred since the last time and process or * ignore them. This is generally done by calling SDL_PollEvent() in a loop * until it returns false (or, if using the main callbacks, events are * provided one at a time in calls to SDL_AppEvent() before the next call to @@ -127,15 +127,17 @@ typedef enum SDL_EventType SDL_EVENT_DISPLAY_DESKTOP_MODE_CHANGED, /**< Display has changed desktop mode */ SDL_EVENT_DISPLAY_CURRENT_MODE_CHANGED, /**< Display has changed current mode */ SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED, /**< Display has changed content scale */ + SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED, /**< Display has changed usable bounds */ SDL_EVENT_DISPLAY_FIRST = SDL_EVENT_DISPLAY_ORIENTATION, - SDL_EVENT_DISPLAY_LAST = SDL_EVENT_DISPLAY_CONTENT_SCALE_CHANGED, + SDL_EVENT_DISPLAY_LAST = SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGED, /* Window events */ /* 0x200 was SDL_WINDOWEVENT, reserve the number for sdl2-compat */ /* 0x201 was SDL_SYSWMEVENT, reserve the number for sdl2-compat */ SDL_EVENT_WINDOW_SHOWN = 0x202, /**< Window has been shown */ SDL_EVENT_WINDOW_HIDDEN, /**< Window has been hidden */ - SDL_EVENT_WINDOW_EXPOSED, /**< Window has been exposed and should be redrawn, and can be redrawn directly from event watchers for this event */ + SDL_EVENT_WINDOW_EXPOSED, /**< Window has been exposed and should be redrawn, and can be redrawn directly from event watchers for this event. + data1 is 1 for live-resize expose events, 0 otherwise. */ SDL_EVENT_WINDOW_MOVED, /**< Window has been moved to data1, data2 */ SDL_EVENT_WINDOW_RESIZED, /**< Window has been resized to data1xdata2 */ SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED,/**< The pixel size of the window has changed to data1xdata2 */ @@ -174,6 +176,8 @@ typedef enum SDL_EventType SDL_EVENT_KEYBOARD_ADDED, /**< A new keyboard has been inserted into the system */ SDL_EVENT_KEYBOARD_REMOVED, /**< A keyboard has been removed */ SDL_EVENT_TEXT_EDITING_CANDIDATES, /**< Keyboard text editing candidates */ + SDL_EVENT_SCREEN_KEYBOARD_SHOWN, /**< The on-screen keyboard has been shown */ + SDL_EVENT_SCREEN_KEYBOARD_HIDDEN, /**< The on-screen keyboard has been hidden */ /* Mouse events */ SDL_EVENT_MOUSE_MOTION = 0x400, /**< Mouse moved */ @@ -214,10 +218,15 @@ typedef enum SDL_EventType SDL_EVENT_FINGER_MOTION, SDL_EVENT_FINGER_CANCELED, + /* Pinch events */ + SDL_EVENT_PINCH_BEGIN = 0x710, /**< Pinch gesture started */ + SDL_EVENT_PINCH_UPDATE, /**< Pinch gesture updated */ + SDL_EVENT_PINCH_END, /**< Pinch gesture ended */ + /* 0x800, 0x801, and 0x802 were the Gesture events from SDL2. Do not reuse these values! sdl2-compat needs them! */ /* Clipboard events */ - SDL_EVENT_CLIPBOARD_UPDATE = 0x900, /**< The clipboard or primary selection changed */ + SDL_EVENT_CLIPBOARD_UPDATE = 0x900, /**< The clipboard changed */ /* Drag and drop events */ SDL_EVENT_DROP_FILE = 0x1000, /**< The system requests a file open */ @@ -298,7 +307,7 @@ typedef struct SDL_CommonEvent */ typedef struct SDL_DisplayEvent { - SDL_EventType type; /**< SDL_DISPLAYEVENT_* */ + SDL_EventType type; /**< SDL_EVENT_DISPLAY_* */ Uint32 reserved; Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */ SDL_DisplayID displayID;/**< The associated display */ @@ -704,6 +713,10 @@ typedef struct SDL_GamepadSensorEvent /** * Audio device event structure (event.adevice.*) * + * Note that SDL will send a SDL_EVENT_AUDIO_DEVICE_ADDED event for every + * device it discovers during initialization. After that, this event will only + * arrive when a device is hotplugged during the program's run. + * * \since This struct is available since SDL 3.2.0. */ typedef struct SDL_AudioDeviceEvent @@ -781,7 +794,19 @@ typedef struct SDL_TouchFingerEvent } SDL_TouchFingerEvent; /** - * Pressure-sensitive pen proximity event structure (event.pmotion.*) + * Pinch event structure (event.pinch.*) + */ +typedef struct SDL_PinchFingerEvent +{ + SDL_EventType type; /**< ::SDL_EVENT_PINCH_BEGIN or ::SDL_EVENT_PINCH_UPDATE or ::SDL_EVENT_PINCH_END */ + Uint32 reserved; + Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */ + float scale; /**< The scale change since the last SDL_EVENT_PINCH_UPDATE. Scale < 1 is "zoom out". Scale > 1 is "zoom in". */ + SDL_WindowID windowID; /**< The window underneath the finger, if any */ +} SDL_PinchFingerEvent; + +/** + * Pressure-sensitive pen proximity event structure (event.pproximity.*) * * When a pen becomes visible to the system (it is close enough to a tablet, * etc), SDL will send an SDL_EVENT_PEN_PROXIMITY_IN event with the new pen's @@ -793,6 +818,9 @@ typedef struct SDL_TouchFingerEvent * is there." The pen touching and lifting off from the tablet while not * leaving the area are handled by SDL_EVENT_PEN_DOWN and SDL_EVENT_PEN_UP. * + * Not all platforms have a window associated with the pen during proximity + * events. Some wait until motion/button/etc events to offer this info. + * * \since This struct is available since SDL 3.2.0. */ typedef struct SDL_PenProximityEvent @@ -967,7 +995,7 @@ typedef struct SDL_QuitEvent */ typedef struct SDL_UserEvent { - Uint32 type; /**< SDL_EVENT_USER through SDL_EVENT_LAST-1, Uint32 because these are not in the SDL_EventType enumeration */ + Uint32 type; /**< SDL_EVENT_USER through SDL_EVENT_LAST, Uint32 because these are not in the SDL_EventType enumeration */ Uint32 reserved; Uint64 timestamp; /**< In nanoseconds, populated using SDL_GetTicksNS() */ SDL_WindowID windowID; /**< The associated window if any */ @@ -1017,6 +1045,7 @@ typedef union SDL_Event SDL_QuitEvent quit; /**< Quit request event data */ SDL_UserEvent user; /**< Custom event data */ SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ + SDL_PinchFingerEvent pinch; /**< Pinch event data */ SDL_PenProximityEvent pproximity; /**< Pen proximity event data */ SDL_PenTouchEvent ptouch; /**< Pen tip touching event data */ SDL_PenMotionEvent pmotion; /**< Pen motion event data */ @@ -1043,7 +1072,7 @@ typedef union SDL_Event } SDL_Event; /* Make sure we haven't broken binary compatibility */ -SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); +SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof((SDL_static_cast(SDL_Event *, NULL))->padding)); /* Function prototypes */ @@ -1255,6 +1284,13 @@ extern SDL_DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType) * } * ``` * + * Note that Windows (and possibly other platforms) has a quirk about how it + * handles events while dragging/resizing a window, which can cause this + * function to block for significant amounts of time. Technical explanations + * and solutions are discussed on the wiki: + * + * https://wiki.libsdl.org/SDL3/AppFreezeDuringDrag + * * \param event the SDL_Event structure to be filled with the next event from * the queue, or NULL. * \returns true if this got an event or false if there are none available. @@ -1391,7 +1427,10 @@ typedef bool (SDLCALL *SDL_EventFilter)(void *userdata, SDL_Event *event); * allows selective filtering of dynamically arriving events. * * **WARNING**: Be very careful of what you do in the event filter function, - * as it may run in a different thread! + * as it may run in a different thread! The exception is handling of + * SDL_EVENT_WINDOW_EXPOSED, which is guaranteed to be sent from the OS on the + * main thread and you are expected to redraw your window in response to this + * event. * * On platforms that support it, if the quit event is generated by an * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the @@ -1404,7 +1443,7 @@ typedef bool (SDLCALL *SDL_EventFilter)(void *userdata, SDL_Event *event); * the event filter, but events pushed onto the queue with SDL_PeepEvents() do * not. * - * \param filter an SDL_EventFilter function to call when an event happens. + * \param filter a function to call when an event happens. * \param userdata a pointer that is passed to `filter`. * * \threadsafety It is safe to call this function from any thread. @@ -1567,6 +1606,38 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); */ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromEvent(const SDL_Event *event); +/** + * Generate an English description of an event. + * + * This will fill `buf` with a null-terminated string that might look + * something like this: + * + * ``` + * SDL_EVENT_MOUSE_MOTION (timestamp=1140256324 windowid=2 which=0 state=0 x=492.99 y=139.09 xrel=52 yrel=6) + * ``` + * + * The exact format of the string is not guaranteed; it is intended for + * logging purposes, to be read by a human, and not parsed by a computer. + * + * The returned value follows the same rules as SDL_snprintf(): `buf` will + * always be NULL-terminated (unless `buflen` is zero), and will be truncated + * if `buflen` is too small. The return code is the number of bytes needed for + * the complete string, not counting the NULL-terminator, whether the string + * was truncated or not. Unlike SDL_snprintf(), though, this function never + * returns -1. + * + * \param event an event to describe. May be NULL. + * \param buf the buffer to fill with the description string. May be NULL. + * \param buflen the maximum bytes that can be written to `buf`. + * \returns number of bytes needed for the full string, not counting the + * null-terminator byte. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC int SDLCALL SDL_GetEventDescription(const SDL_Event *event, char *buf, int buflen); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/vendor/sdl3/include/SDL_filesystem.h b/vendor/sdl3/include/SDL_filesystem.h index af3ca27e0..67f6d7ac8 100644 --- a/vendor/sdl3/include/SDL_filesystem.h +++ b/vendor/sdl3/include/SDL_filesystem.h @@ -77,6 +77,9 @@ extern "C" { * - `parent`: the containing directory of the bundle. For example: * `/Applications/SDLApp/` * + * **Android Specific Functionality**: This function returns "./", which + * allows filesystem operations to use internal storage and the asset system. + * * **Nintendo 3DS Specific Functionality**: This function returns "romfs" * directory of the application as it is uncommon to store resources outside * the executable. As such it is not a writable directory. @@ -89,6 +92,8 @@ extern "C" { * doesn't implement this functionality, call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetPrefPath @@ -134,6 +139,12 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetBasePath(void); * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. * + * Due to historical mistakes, `org` is allowed to be NULL or "". In such + * cases, SDL will omit the org subdirectory, including on platforms where it + * shouldn't, and including on platforms where this would make your app fail + * certification for an app store. New apps should definitely specify a real + * string for `org`. + * * The returned path is guaranteed to end with a path separator ('\\' on * Windows, '/' on most other platforms). * @@ -144,6 +155,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetBasePath(void); * etc.). This should be freed with SDL_free() when it is no longer * needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetBasePath @@ -216,6 +229,8 @@ typedef enum SDL_Folder * \returns either a null-terminated C string containing the full path to the * folder, or NULL if an error happened. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC const char * SDLCALL SDL_GetUserFolder(SDL_Folder folder); @@ -283,6 +298,8 @@ typedef Uint32 SDL_GlobFlags; * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_CreateDirectory(const char *path); @@ -346,6 +363,8 @@ typedef SDL_EnumerationResult (SDLCALL *SDL_EnumerateDirectoryCallback)(void *us * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_EnumerateDirectory(const char *path, SDL_EnumerateDirectoryCallback callback, void *userdata); @@ -360,6 +379,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_EnumerateDirectory(const char *path, SDL_En * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_RemovePath(const char *path); @@ -367,7 +388,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RemovePath(const char *path); /** * Rename a file or directory. * - * If the file at `newpath` already exists, it will replaced. + * If the file at `newpath` already exists, it will be replaced. * * Note that this will not copy files across filesystems/drives/volumes, as * that is a much more complicated (and possibly time-consuming) operation. @@ -383,6 +404,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RemovePath(const char *path); * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_RenamePath(const char *oldpath, const char *newpath); @@ -423,6 +446,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenamePath(const char *oldpath, const char * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread, but this + * operation is not atomic, so the app might need to protect + * access to specific paths from other threads if appropriate. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_CopyFile(const char *oldpath, const char *newpath); @@ -436,6 +463,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_CopyFile(const char *oldpath, const char *n * \returns true on success or false if the file doesn't exist, or another * failure; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_GetPathInfo(const char *path, SDL_PathInfo *info); @@ -444,10 +473,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetPathInfo(const char *path, SDL_PathInfo * Enumerate a directory tree, filtered by pattern, and return a list. * * Files are filtered out if they don't match the string in `pattern`, which - * may contain wildcard characters '\*' (match everything) and '?' (match one + * may contain wildcard characters `*` (match everything) and `?` (match one * character). If pattern is NULL, no filtering is done and all results are * returned. Subdirectories are permitted, and are specified with a path - * separator of '/'. Wildcard characters '\*' and '?' never match a path + * separator of `/`. Wildcard characters `*` and `?` never match a path * separator. * * `flags` may be set to SDL_GLOB_CASEINSENSITIVE to make the pattern matching @@ -490,6 +519,8 @@ extern SDL_DECLSPEC char ** SDLCALL SDL_GlobDirectory(const char *path, const ch * platform-dependent notation. NULL if there's a problem. This * should be freed with SDL_free() when it is no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC char * SDLCALL SDL_GetCurrentDirectory(void); diff --git a/vendor/sdl3/include/SDL_gamepad.h b/vendor/sdl3/include/SDL_gamepad.h index 99f8b6593..0102f1544 100644 --- a/vendor/sdl3/include/SDL_gamepad.h +++ b/vendor/sdl3/include/SDL_gamepad.h @@ -48,6 +48,9 @@ * SDL_INIT_GAMEPAD flag. This causes SDL to scan the system for gamepads, and * load appropriate drivers. * + * If you're using SDL gamepad support in a Steam game, you must call + * SteamAPI_InitEx() before calling SDL_Init(). + * * If you would like to receive gamepad updates while the application is in * the background, you should set the following hint before calling * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS @@ -118,6 +121,7 @@ typedef enum SDL_GamepadType SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_LEFT, SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT, SDL_GAMEPAD_TYPE_NINTENDO_SWITCH_JOYCON_PAIR, + SDL_GAMEPAD_TYPE_GAMECUBE, SDL_GAMEPAD_TYPE_COUNT } SDL_GamepadType; @@ -127,8 +131,9 @@ typedef enum SDL_GamepadType * For controllers that use a diamond pattern for the face buttons, the * south/east/west/north buttons below correspond to the locations in the * diamond pattern. For Xbox controllers, this would be A/B/X/Y, for Nintendo - * Switch controllers, this would be B/A/Y/X, for PlayStation controllers this - * would be Cross/Circle/Square/Triangle. + * Switch controllers, this would be B/A/Y/X, for GameCube controllers this + * would be A/X/B/Y, for PlayStation controllers this would be + * Cross/Circle/Square/Triangle. * * For controllers that don't use a diamond pattern for the face buttons, the * south/east/west/north buttons indicate the buttons labeled A, B, C, D, or @@ -163,14 +168,14 @@ typedef enum SDL_GamepadButton SDL_GAMEPAD_BUTTON_DPAD_LEFT, SDL_GAMEPAD_BUTTON_DPAD_RIGHT, SDL_GAMEPAD_BUTTON_MISC1, /**< Additional button (e.g. Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button, Google Stadia capture button) */ - SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1, /**< Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1) */ - SDL_GAMEPAD_BUTTON_LEFT_PADDLE1, /**< Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3) */ - SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2, /**< Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2) */ - SDL_GAMEPAD_BUTTON_LEFT_PADDLE2, /**< Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4) */ + SDL_GAMEPAD_BUTTON_RIGHT_PADDLE1, /**< Upper or primary paddle, under your right hand (e.g. Xbox Elite paddle P1, DualSense Edge RB button, Right Joy-Con SR button) */ + SDL_GAMEPAD_BUTTON_LEFT_PADDLE1, /**< Upper or primary paddle, under your left hand (e.g. Xbox Elite paddle P3, DualSense Edge LB button, Left Joy-Con SL button) */ + SDL_GAMEPAD_BUTTON_RIGHT_PADDLE2, /**< Lower or secondary paddle, under your right hand (e.g. Xbox Elite paddle P2, DualSense Edge right Fn button, Right Joy-Con SL button) */ + SDL_GAMEPAD_BUTTON_LEFT_PADDLE2, /**< Lower or secondary paddle, under your left hand (e.g. Xbox Elite paddle P4, DualSense Edge left Fn button, Left Joy-Con SR button) */ SDL_GAMEPAD_BUTTON_TOUCHPAD, /**< PS4/PS5 touchpad button */ SDL_GAMEPAD_BUTTON_MISC2, /**< Additional button */ - SDL_GAMEPAD_BUTTON_MISC3, /**< Additional button */ - SDL_GAMEPAD_BUTTON_MISC4, /**< Additional button */ + SDL_GAMEPAD_BUTTON_MISC3, /**< Additional button (e.g. Nintendo GameCube left trigger click) */ + SDL_GAMEPAD_BUTTON_MISC4, /**< Additional button (e.g. Nintendo GameCube right trigger click) */ SDL_GAMEPAD_BUTTON_MISC5, /**< Additional button */ SDL_GAMEPAD_BUTTON_MISC6, /**< Additional button */ SDL_GAMEPAD_BUTTON_COUNT @@ -422,6 +427,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_AddGamepadMappingsFromFile(const char *file) * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_ReloadGamepadMappings(void); @@ -436,6 +443,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReloadGamepadMappings(void); * single allocation that should be freed with SDL_free() when it is * no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC char ** SDLCALL SDL_GetGamepadMappings(int *count); @@ -448,6 +457,8 @@ extern SDL_DECLSPEC char ** SDLCALL SDL_GetGamepadMappings(int *count); * information. This should be freed with SDL_free() when it is no * longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickGUIDForID @@ -465,6 +476,8 @@ extern SDL_DECLSPEC char * SDLCALL SDL_GetGamepadMappingForGUID(SDL_GUID guid); * available; call SDL_GetError() for more information. This should * be freed with SDL_free() when it is no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_AddGamepadMapping @@ -485,6 +498,8 @@ extern SDL_DECLSPEC char * SDLCALL SDL_GetGamepadMapping(SDL_Gamepad *gamepad); * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_AddGamepadMapping @@ -497,6 +512,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetGamepadMapping(SDL_JoystickID instance_i * * \returns true if a gamepad is connected, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepads @@ -512,6 +529,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_HasGamepad(void); * call SDL_GetError() for more information. This should be freed * with SDL_free() when it is no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_HasGamepad @@ -526,6 +545,8 @@ extern SDL_DECLSPEC SDL_JoystickID * SDLCALL SDL_GetGamepads(int *count); * \returns true if the given joystick is supported by the gamepad interface, * false if it isn't or it's an invalid index. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoysticks @@ -542,6 +563,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_IsGamepad(SDL_JoystickID instance_id); * \returns the name of the selected gamepad. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadName @@ -558,6 +581,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadNameForID(SDL_JoystickID * \returns the path of the selected gamepad. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadPath @@ -573,6 +598,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadPathForID(SDL_JoystickID * \param instance_id the joystick instance ID. * \returns the player index of a gamepad, or -1 if it's not available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadPlayerIndex @@ -589,6 +616,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetGamepadPlayerIndexForID(SDL_JoystickID in * \returns the GUID of the selected gamepad. If called on an invalid index, * this function returns a zero GUID. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GUIDToString @@ -606,6 +635,8 @@ extern SDL_DECLSPEC SDL_GUID SDLCALL SDL_GetGamepadGUIDForID(SDL_JoystickID inst * \returns the USB vendor ID of the selected gamepad. If called on an invalid * index, this function returns zero. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadVendor @@ -623,6 +654,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadVendorForID(SDL_JoystickID inst * \returns the USB product ID of the selected gamepad. If called on an * invalid index, this function returns zero. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadProduct @@ -640,6 +673,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadProductForID(SDL_JoystickID ins * \returns the product version of the selected gamepad. If called on an * invalid index, this function returns zero. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadProductVersion @@ -655,6 +690,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadProductVersionForID(SDL_Joystic * \param instance_id the joystick instance ID. * \returns the gamepad type. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadType @@ -671,6 +708,8 @@ extern SDL_DECLSPEC SDL_GamepadType SDLCALL SDL_GetGamepadTypeForID(SDL_Joystick * \param instance_id the joystick instance ID. * \returns the gamepad type. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadTypeForID @@ -688,6 +727,8 @@ extern SDL_DECLSPEC SDL_GamepadType SDLCALL SDL_GetRealGamepadTypeForID(SDL_Joys * \returns the mapping string. Returns NULL if no mapping is available. This * should be freed with SDL_free() when it is no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepads @@ -702,6 +743,8 @@ extern SDL_DECLSPEC char * SDLCALL SDL_GetGamepadMappingForID(SDL_JoystickID ins * \returns a gamepad identifier or NULL if an error occurred; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_CloseGamepad @@ -717,6 +760,8 @@ extern SDL_DECLSPEC SDL_Gamepad * SDLCALL SDL_OpenGamepad(SDL_JoystickID instanc * \returns an SDL_Gamepad on success or NULL on failure or if it hasn't been * opened yet; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_Gamepad * SDLCALL SDL_GetGamepadFromID(SDL_JoystickID instance_id); @@ -727,6 +772,8 @@ extern SDL_DECLSPEC SDL_Gamepad * SDLCALL SDL_GetGamepadFromID(SDL_JoystickID in * \param player_index the player index, which different from the instance ID. * \returns the SDL_Gamepad associated with a player index. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadPlayerIndex @@ -757,6 +804,8 @@ extern SDL_DECLSPEC SDL_Gamepad * SDLCALL SDL_GetGamepadFromPlayerIndex(int play * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetGamepadProperties(SDL_Gamepad *gamepad); @@ -775,6 +824,8 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetGamepadProperties(SDL_Gamepa * \returns the instance ID of the specified gamepad on success or 0 on * failure; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_GetGamepadID(SDL_Gamepad *gamepad); @@ -787,6 +838,8 @@ extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_GetGamepadID(SDL_Gamepad *gamepad * \returns the implementation dependent name for the gamepad, or NULL if * there is no name or the identifier passed is invalid. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadNameForID @@ -801,6 +854,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadName(SDL_Gamepad *gamepad * \returns the implementation dependent path for the gamepad, or NULL if * there is no path or the identifier passed is invalid. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadPathForID @@ -814,6 +869,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadPath(SDL_Gamepad *gamepad * \returns the gamepad type, or SDL_GAMEPAD_TYPE_UNKNOWN if it's not * available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadTypeForID @@ -827,6 +884,8 @@ extern SDL_DECLSPEC SDL_GamepadType SDLCALL SDL_GetGamepadType(SDL_Gamepad *game * \returns the gamepad type, or SDL_GAMEPAD_TYPE_UNKNOWN if it's not * available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetRealGamepadTypeForID @@ -841,6 +900,8 @@ extern SDL_DECLSPEC SDL_GamepadType SDLCALL SDL_GetRealGamepadType(SDL_Gamepad * * \param gamepad the gamepad object to query. * \returns the player index for gamepad, or -1 if it's not available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_SetGamepadPlayerIndex @@ -856,6 +917,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetGamepadPlayerIndex(SDL_Gamepad *gamepad); * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadPlayerIndex @@ -870,6 +933,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetGamepadPlayerIndex(SDL_Gamepad *gamepad, * \param gamepad the gamepad object to query. * \returns the USB vendor ID, or zero if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadVendorForID @@ -884,6 +949,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadVendor(SDL_Gamepad *gamepad); * \param gamepad the gamepad object to query. * \returns the USB product ID, or zero if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadProductForID @@ -898,6 +965,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadProduct(SDL_Gamepad *gamepad); * \param gamepad the gamepad object to query. * \returns the USB product version, or zero if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadProductVersionForID @@ -912,6 +981,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadProductVersion(SDL_Gamepad *gam * \param gamepad the gamepad object to query. * \returns the gamepad firmware version, or zero if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadFirmwareVersion(SDL_Gamepad *gamepad); @@ -924,6 +995,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetGamepadFirmwareVersion(SDL_Gamepad *ga * \param gamepad the gamepad object to query. * \returns the serial number, or NULL if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadSerial(SDL_Gamepad *gamepad); @@ -937,6 +1010,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadSerial(SDL_Gamepad *gamep * \param gamepad the gamepad object to query. * \returns the gamepad handle, or 0 if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetGamepadSteamHandle(SDL_Gamepad *gamepad); @@ -949,6 +1024,8 @@ extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetGamepadSteamHandle(SDL_Gamepad *gamepa * `SDL_JOYSTICK_CONNECTION_INVALID` on failure; call SDL_GetError() * for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_JoystickConnectionState SDLCALL SDL_GetGamepadConnectionState(SDL_Gamepad *gamepad); @@ -969,6 +1046,8 @@ extern SDL_DECLSPEC SDL_JoystickConnectionState SDLCALL SDL_GetGamepadConnection * battery. * \returns the current battery state. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_PowerState SDLCALL SDL_GetGamepadPowerInfo(SDL_Gamepad *gamepad, int *percent); @@ -981,6 +1060,8 @@ extern SDL_DECLSPEC SDL_PowerState SDLCALL SDL_GetGamepadPowerInfo(SDL_Gamepad * * \returns true if the gamepad has been opened and is currently connected, or * false if not. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadConnected(SDL_Gamepad *gamepad); @@ -1001,6 +1082,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadConnected(SDL_Gamepad *gamepad); * \returns an SDL_Joystick object, or NULL on failure; call SDL_GetError() * for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_GetGamepadJoystick(SDL_Gamepad *gamepad); @@ -1013,6 +1096,8 @@ extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_GetGamepadJoystick(SDL_Gamepad *g * * \param enabled whether to process gamepad events or not. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GamepadEventsEnabled @@ -1028,6 +1113,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_SetGamepadEventsEnabled(bool enabled); * * \returns true if gamepad events are being processed, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_SetGamepadEventsEnabled @@ -1044,6 +1131,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadEventsEnabled(void); * single allocation that should be freed with SDL_free() when it is * no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_GamepadBinding ** SDLCALL SDL_GetGamepadBindings(SDL_Gamepad *gamepad, int *count); @@ -1055,6 +1144,8 @@ extern SDL_DECLSPEC SDL_GamepadBinding ** SDLCALL SDL_GetGamepadBindings(SDL_Gam * enabled. Under such circumstances, it will not be necessary to call this * function. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC void SDLCALL SDL_UpdateGamepads(void); @@ -1071,6 +1162,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_UpdateGamepads(void); * \returns the SDL_GamepadType enum corresponding to the input string, or * `SDL_GAMEPAD_TYPE_UNKNOWN` if no match was found. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadStringForType @@ -1085,6 +1178,8 @@ extern SDL_DECLSPEC SDL_GamepadType SDLCALL SDL_GetGamepadTypeFromString(const c * specified. The string returned is of the format used by * SDL_Gamepad mapping strings. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadTypeFromString @@ -1107,6 +1202,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadStringForType(SDL_Gamepad * \returns the SDL_GamepadAxis enum corresponding to the input string, or * `SDL_GAMEPAD_AXIS_INVALID` if no match was found. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadStringForAxis @@ -1121,6 +1218,8 @@ extern SDL_DECLSPEC SDL_GamepadAxis SDLCALL SDL_GetGamepadAxisFromString(const c * specified. The string returned is of the format used by * SDL_Gamepad mapping strings. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadAxisFromString @@ -1137,6 +1236,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadStringForAxis(SDL_Gamepad * \param axis an axis enum value (an SDL_GamepadAxis value). * \returns true if the gamepad has this axis, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GamepadHasButton @@ -1156,10 +1257,14 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadHasAxis(SDL_Gamepad *gamepad, SDL_Ga * return a negative value. Note that this differs from the value reported by * the lower-level SDL_GetJoystickAxis(), which normally uses the full range. * + * Note that for invalid gamepads or axes, this will return 0. Zero is also a + * valid value in normal operation; usually it means a centered axis. + * * \param gamepad a gamepad. * \param axis an axis index (one of the SDL_GamepadAxis values). - * \returns axis state (including 0) on success or 0 (also) on failure; call - * SDL_GetError() for more information. + * \returns axis state. + * + * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. * @@ -1176,10 +1281,12 @@ extern SDL_DECLSPEC Sint16 SDLCALL SDL_GetGamepadAxis(SDL_Gamepad *gamepad, SDL_ * You do not normally need to call this function unless you are parsing * SDL_Gamepad mappings in your own code. * - * \param str string representing a SDL_Gamepad axis. + * \param str string representing a SDL_Gamepad button. * \returns the SDL_GamepadButton enum corresponding to the input string, or * `SDL_GAMEPAD_BUTTON_INVALID` if no match was found. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadStringForButton @@ -1194,6 +1301,8 @@ extern SDL_DECLSPEC SDL_GamepadButton SDLCALL SDL_GetGamepadButtonFromString(con * specified. The string returned is of the format used by * SDL_Gamepad mapping strings. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadButtonFromString @@ -1210,6 +1319,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadStringForButton(SDL_Gamep * \param button a button enum value (an SDL_GamepadButton value). * \returns true if the gamepad has this button, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GamepadHasAxis @@ -1223,6 +1334,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadHasButton(SDL_Gamepad *gamepad, SDL_ * \param button a button index (one of the SDL_GamepadButton values). * \returns true if the button is pressed, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GamepadHasButton @@ -1237,6 +1350,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetGamepadButton(SDL_Gamepad *gamepad, SDL_ * \param button a button index (one of the SDL_GamepadButton values). * \returns the SDL_GamepadButtonLabel enum corresponding to the button label. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadButtonLabel @@ -1250,6 +1365,8 @@ extern SDL_DECLSPEC SDL_GamepadButtonLabel SDLCALL SDL_GetGamepadButtonLabelForT * \param button a button index (one of the SDL_GamepadButton values). * \returns the SDL_GamepadButtonLabel enum corresponding to the button label. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadButtonLabelForType @@ -1262,6 +1379,8 @@ extern SDL_DECLSPEC SDL_GamepadButtonLabel SDLCALL SDL_GetGamepadButtonLabel(SDL * \param gamepad a gamepad. * \returns number of touchpads. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetNumGamepadTouchpadFingers @@ -1276,6 +1395,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumGamepadTouchpads(SDL_Gamepad *gamepad) * \param touchpad a touchpad. * \returns number of supported simultaneous fingers. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadTouchpadFinger @@ -1299,6 +1420,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumGamepadTouchpadFingers(SDL_Gamepad *ga * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetNumGamepadTouchpadFingers @@ -1312,6 +1435,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetGamepadTouchpadFinger(SDL_Gamepad *gamep * \param type the type of sensor to query. * \returns true if the sensor exists, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadSensorData @@ -1329,6 +1454,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadHasSensor(SDL_Gamepad *gamepad, SDL_ * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GamepadHasSensor @@ -1343,6 +1470,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetGamepadSensorEnabled(SDL_Gamepad *gamepa * \param type the type of sensor to query. * \returns true if the sensor is enabled, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_SetGamepadSensorEnabled @@ -1356,6 +1485,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GamepadSensorEnabled(SDL_Gamepad *gamepad, * \param type the type of sensor to query. * \returns the data rate, or 0.0f if the data rate is not available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC float SDLCALL SDL_GetGamepadSensorDataRate(SDL_Gamepad *gamepad, SDL_SensorType type); @@ -1364,7 +1495,7 @@ extern SDL_DECLSPEC float SDLCALL SDL_GetGamepadSensorDataRate(SDL_Gamepad *game * Get the current state of a gamepad sensor. * * The number of values and interpretation of the data is sensor dependent. - * See SDL_sensor.h for the details for each type of sensor. + * See the remarks in SDL_SensorType for details for each type of sensor. * * \param gamepad the gamepad to query. * \param type the type of sensor to query. @@ -1373,6 +1504,8 @@ extern SDL_DECLSPEC float SDLCALL SDL_GetGamepadSensorDataRate(SDL_Gamepad *game * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_GetGamepadSensorData(SDL_Gamepad *gamepad, SDL_SensorType type, float *data, int num_values); @@ -1395,6 +1528,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetGamepadSensorData(SDL_Gamepad *gamepad, * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_RumbleGamepad(SDL_Gamepad *gamepad, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); @@ -1421,6 +1556,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RumbleGamepad(SDL_Gamepad *gamepad, Uint16 * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_RumbleGamepad @@ -1443,6 +1580,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RumbleGamepadTriggers(SDL_Gamepad *gamepad, * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_SetGamepadLED(SDL_Gamepad *gamepad, Uint8 red, Uint8 green, Uint8 blue); @@ -1456,6 +1595,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetGamepadLED(SDL_Gamepad *gamepad, Uint8 r * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_SendGamepadEffect(SDL_Gamepad *gamepad, const void *data, int size); @@ -1466,6 +1607,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SendGamepadEffect(SDL_Gamepad *gamepad, con * \param gamepad a gamepad identifier previously returned by * SDL_OpenGamepad(). * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_OpenGamepad @@ -1480,6 +1623,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_CloseGamepad(SDL_Gamepad *gamepad); * \param button a button on the gamepad. * \returns the sfSymbolsName or NULL if the name can't be found. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadAppleSFSymbolsNameForAxis @@ -1493,6 +1638,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGamepadAppleSFSymbolsNameForButt * \param axis an axis on the gamepad. * \returns the sfSymbolsName or NULL if the name can't be found. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetGamepadAppleSFSymbolsNameForButton diff --git a/vendor/sdl3/include/SDL_gpu.h b/vendor/sdl3/include/SDL_gpu.h index b61661909..d35104a7d 100644 --- a/vendor/sdl3/include/SDL_gpu.h +++ b/vendor/sdl3/include/SDL_gpu.h @@ -206,14 +206,20 @@ * underlying graphics API. While it's possible that we have done something * inefficiently, it's very unlikely especially if you are relatively * inexperienced with GPU rendering. Please see the performance tips above and - * make sure you are following them. Additionally, tools like RenderDoc can be - * very helpful for diagnosing incorrect behavior and performance issues. + * make sure you are following them. Additionally, tools like + * [RenderDoc](https://renderdoc.org/) + * can be very helpful for diagnosing incorrect behavior and performance + * issues. * * ## System Requirements * - * **Vulkan:** Supported on Windows, Linux, Nintendo Switch, and certain - * Android devices. Requires Vulkan 1.0 with the following extensions and - * device features: + * ### Vulkan + * + * SDL driver name: "vulkan" (for use in SDL_CreateGPUDevice() and + * SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING) + * + * Supported on Windows, Linux, Nintendo Switch, and certain Android devices. + * Requires Vulkan 1.0 with the following extensions and device features: * * - `VK_KHR_swapchain` * - `VK_KHR_maintenance1` @@ -222,13 +228,37 @@ * - `depthClamp` * - `shaderClipDistance` * - `drawIndirectFirstInstance` + * - `sampleRateShading` * - * **D3D12:** Supported on Windows 10 or newer, Xbox One (GDK), and Xbox - * Series X|S (GDK). Requires a GPU that supports DirectX 12 Feature Level - * 11_1. + * You can remove some of these requirements to increase compatibility with + * Android devices by using these properties when creating the GPU device with + * SDL_CreateGPUDeviceWithProperties(): * - * **Metal:** Supported on macOS 10.14+ and iOS/tvOS 13.0+. Hardware - * requirements vary by operating system: + * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN + * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN + * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN + * - SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN + * + * ### D3D12 + * + * SDL driver name: "direct3d12" + * + * Supported on Windows 10 or newer, Xbox One (GDK), and Xbox Series X|S + * (GDK). Requires a GPU that supports DirectX 12 Feature Level 11_0 and + * Resource Binding Tier 2 or above. + * + * You can remove the Tier 2 resource binding requirement to support Intel + * Haswell and Broadwell GPUs by using this property when creating the GPU + * device with SDL_CreateGPUDeviceWithProperties(): + * + * - SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN + * + * ### Metal + * + * SDL driver name: "metal" + * + * Supported on macOS 10.14+ and iOS/tvOS 13.0+. Hardware requirements vary by + * operating system: * * - macOS requires an Apple Silicon or * [Intel Mac2 family](https://developer.apple.com/documentation/metal/mtlfeatureset/mtlfeatureset_macos_gpufamily2_v1?language=objc) @@ -236,6 +266,26 @@ * - iOS/tvOS requires an A9 GPU or newer * - iOS Simulator and tvOS Simulator are unsupported * + * ## Coordinate System + * + * The GPU API uses a left-handed coordinate system, following the convention + * of D3D12 and Metal. Specifically: + * + * - **Normalized Device Coordinates:** The lower-left corner has an x,y + * coordinate of `(-1.0, -1.0)`. The upper-right corner is `(1.0, 1.0)`. Z + * values range from `[0.0, 1.0]` where 0 is the near plane. + * - **Viewport Coordinates:** The top-left corner has an x,y coordinate of + * `(0, 0)` and extends to the bottom-right corner at `(viewportWidth, + * viewportHeight)`. +Y is down. + * - **Texture Coordinates:** The top-left corner has an x,y coordinate of + * `(0, 0)` and extends to the bottom-right corner at `(1.0, 1.0)`. +Y is + * down. + * + * If the backend driver differs from this convention (e.g. Vulkan, which has + * an NDC that assumes +Y is down), SDL will automatically convert the + * coordinate system behind the scenes, so you don't need to perform any + * coordinate flipping logic in your shaders. + * * ## Uniform Data * * Uniforms are for passing data to shaders. The uniform data will be constant @@ -301,6 +351,39 @@ * unreferenced data in a bound resource without cycling, but overwriting a * section of data that has already been referenced will produce unexpected * results. + * + * ## Debugging + * + * At some point of your GPU journey, you will probably encounter issues that + * are not traceable with regular debugger - for example, your code compiles + * but you get an empty screen, or your shader fails in runtime. + * + * For debugging such cases, there are tools that allow visually inspecting + * the whole GPU frame, every drawcall, every bound resource, memory buffers, + * etc. They are the following, per platform: + * + * * For Windows/Linux, use + * [RenderDoc](https://renderdoc.org/) + * * For MacOS (Metal), use Xcode built-in debugger (Open XCode, go to Debug > + * Debug Executable..., select your application, set "GPU Frame Capture" to + * "Metal" in scheme "Options" window, run your app, and click the small + * Metal icon on the bottom to capture a frame) + * + * Aside from that, you may want to enable additional debug layers to receive + * more detailed error messages, based on your GPU backend: + * + * * For D3D12, the debug layer is an optional feature that can be installed + * via "Windows Settings -> System -> Optional features" and adding the + * "Graphics Tools" optional feature. + * * For Vulkan, you will need to install Vulkan SDK on Windows, and on Linux, + * you usually have some sort of `vulkan-validation-layers` system package + * that should be installed. + * * For Metal, it should be enough just to run the application from XCode to + * receive detailed errors or warnings in the output. + * + * Don't hesitate to use tools as RenderDoc when encountering runtime issues + * or unexpected output on screen, quick GPU frame inspection can usually help + * you fix the majority of such problems. */ #ifndef SDL_gpu_h_ @@ -1091,7 +1174,7 @@ typedef enum SDL_GPUCompareOp SDL_GPU_COMPAREOP_LESS_OR_EQUAL, /**< The comparison evaluates reference <= test. */ SDL_GPU_COMPAREOP_GREATER, /**< The comparison evaluates reference > test. */ SDL_GPU_COMPAREOP_NOT_EQUAL, /**< The comparison evaluates reference != test. */ - SDL_GPU_COMPAREOP_GREATER_OR_EQUAL, /**< The comparison evalutes reference >= test. */ + SDL_GPU_COMPAREOP_GREATER_OR_EQUAL, /**< The comparison evaluates reference >= test. */ SDL_GPU_COMPAREOP_ALWAYS /**< The comparison always evaluates true. */ } SDL_GPUCompareOp; @@ -1310,6 +1393,17 @@ typedef struct SDL_GPUViewport * A structure specifying parameters related to transferring data to or from a * texture. * + * If either of `pixels_per_row` or `rows_per_layer` is zero, then width and + * height of passed SDL_GPUTextureRegion to SDL_UploadToGPUTexture or + * SDL_DownloadFromGPUTexture are used as default values respectively and data + * is considered to be tightly packed. + * + * **WARNING**: Direct3D 12 requires texture data row pitch to be 256 byte + * aligned, and offsets to be aligned to 512 bytes. If they are not, SDL will + * make a temporary copy of the data that is properly aligned, but this adds + * overhead to the transfer process. Apps can avoid this by aligning their + * data appropriately, or using a different GPU backend than Direct3D 12. + * * \since This struct is available since SDL 3.2.0. * * \sa SDL_UploadToGPUTexture @@ -1391,7 +1485,7 @@ typedef struct SDL_GPUTextureRegion */ typedef struct SDL_GPUBlitRegion { - SDL_GPUTexture *texture; /**< The texture. */ + SDL_GPUTexture *texture; /**< The texture. */ Uint32 mip_level; /**< The mip level index of the region. */ Uint32 layer_or_depth_plane; /**< The layer index or depth plane of the region. This value is treated as a layer index on 2D array and cube textures, and as a depth plane on 3D textures. */ Uint32 x; /**< The left offset of the region. */ @@ -1520,8 +1614,8 @@ typedef struct SDL_GPUSamplerCreateInfo SDL_GPUCompareOp compare_op; /**< The comparison operator to apply to fetched data before filtering. */ float min_lod; /**< Clamps the minimum of the computed LOD value. */ float max_lod; /**< Clamps the maximum of the computed LOD value. */ - bool enable_anisotropy; /**< true to enable anisotropic filtering. */ - bool enable_compare; /**< true to enable comparison against a reference value during lookups. */ + bool enable_anisotropy; /**< true to enable anisotropic filtering. */ + bool enable_compare; /**< true to enable comparison against a reference value during lookups. */ Uint8 padding1; Uint8 padding2; @@ -1549,7 +1643,7 @@ typedef struct SDL_GPUSamplerCreateInfo typedef struct SDL_GPUVertexBufferDescription { Uint32 slot; /**< The binding slot of the vertex buffer. */ - Uint32 pitch; /**< The byte pitch between consecutive elements of the vertex buffer. */ + Uint32 pitch; /**< The size of a single element + the offset between elements. */ SDL_GPUVertexInputRate input_rate; /**< Whether attribute addressing is a function of the vertex index or instance index. */ Uint32 instance_step_rate; /**< Reserved for future use. Must be set to 0. */ } SDL_GPUVertexBufferDescription; @@ -1613,6 +1707,9 @@ typedef struct SDL_GPUStencilOpState * \since This struct is available since SDL 3.2.0. * * \sa SDL_GPUColorTargetDescription + * \sa SDL_GPUBlendFactor + * \sa SDL_GPUBlendOp + * \sa SDL_GPUColorComponentFlags */ typedef struct SDL_GPUColorTargetBlendState { @@ -1623,8 +1720,8 @@ typedef struct SDL_GPUColorTargetBlendState SDL_GPUBlendFactor dst_alpha_blendfactor; /**< The value to be multiplied by the destination alpha. */ SDL_GPUBlendOp alpha_blend_op; /**< The blend operation for the alpha component. */ SDL_GPUColorComponentFlags color_write_mask; /**< A bitmask specifying which of the RGBA components are enabled for writing. Writes to all channels if enable_color_write_mask is false. */ - bool enable_blend; /**< Whether blending is enabled for the color target. */ - bool enable_color_write_mask; /**< Whether the color write mask is enabled. */ + bool enable_blend; /**< Whether blending is enabled for the color target. */ + bool enable_color_write_mask; /**< Whether the color write mask is enabled. */ Uint8 padding1; Uint8 padding2; } SDL_GPUColorTargetBlendState; @@ -1636,6 +1733,8 @@ typedef struct SDL_GPUColorTargetBlendState * \since This struct is available since SDL 3.2.0. * * \sa SDL_CreateGPUShader + * \sa SDL_GPUShaderFormat + * \sa SDL_GPUShaderStage */ typedef struct SDL_GPUShaderCreateInfo { @@ -1741,8 +1840,8 @@ typedef struct SDL_GPURasterizerState float depth_bias_constant_factor; /**< A scalar factor controlling the depth value added to each fragment. */ float depth_bias_clamp; /**< The maximum depth bias of a fragment. */ float depth_bias_slope_factor; /**< A scalar factor applied to a fragment's slope in depth calculations. */ - bool enable_depth_bias; /**< true to bias fragment depth values. */ - bool enable_depth_clip; /**< true to enable depth clip, false to enable depth clamp. */ + bool enable_depth_bias; /**< true to bias fragment depth values. */ + bool enable_depth_clip; /**< true to enable depth clip, false to enable depth clamp. */ Uint8 padding1; Uint8 padding2; } SDL_GPURasterizerState; @@ -1759,8 +1858,8 @@ typedef struct SDL_GPUMultisampleState { SDL_GPUSampleCount sample_count; /**< The number of samples to be used in rasterization. */ Uint32 sample_mask; /**< Reserved for future use. Must be set to 0. */ - bool enable_mask; /**< Reserved for future use. Must be set to false. */ - Uint8 padding1; + bool enable_mask; /**< Reserved for future use. Must be set to false. */ + bool enable_alpha_to_coverage; /**< true enables the alpha-to-coverage feature. */ Uint8 padding2; Uint8 padding3; } SDL_GPUMultisampleState; @@ -1780,9 +1879,9 @@ typedef struct SDL_GPUDepthStencilState SDL_GPUStencilOpState front_stencil_state; /**< The stencil op state for front-facing triangles. */ Uint8 compare_mask; /**< Selects the bits of the stencil values participating in the stencil test. */ Uint8 write_mask; /**< Selects the bits of the stencil values updated by the stencil test. */ - bool enable_depth_test; /**< true enables the depth test. */ - bool enable_depth_write; /**< true enables depth writes. Depth writes are always disabled when enable_depth_test is false. */ - bool enable_stencil_test; /**< true enables the stencil test. */ + bool enable_depth_test; /**< true enables the depth test. */ + bool enable_depth_write; /**< true enables depth writes. Depth writes are always disabled when enable_depth_test is false. */ + bool enable_stencil_test; /**< true enables the stencil test. */ Uint8 padding1; Uint8 padding2; Uint8 padding3; @@ -1817,7 +1916,7 @@ typedef struct SDL_GPUGraphicsPipelineTargetInfo const SDL_GPUColorTargetDescription *color_target_descriptions; /**< A pointer to an array of color target descriptions. */ Uint32 num_color_targets; /**< The number of color target descriptions in the above array. */ SDL_GPUTextureFormat depth_stencil_format; /**< The pixel format of the depth-stencil target. Ignored if has_depth_stencil_target is false. */ - bool has_depth_stencil_target; /**< true specifies that the pipeline uses a depth-stencil target. */ + bool has_depth_stencil_target; /**< true specifies that the pipeline uses a depth-stencil target. */ Uint8 padding1; Uint8 padding2; Uint8 padding3; @@ -1912,6 +2011,7 @@ typedef struct SDL_GPUComputePipelineCreateInfo * \since This struct is available since SDL 3.2.0. * * \sa SDL_BeginGPURenderPass + * \sa SDL_FColor */ typedef struct SDL_GPUColorTargetInfo { @@ -1924,8 +2024,8 @@ typedef struct SDL_GPUColorTargetInfo SDL_GPUTexture *resolve_texture; /**< The texture that will receive the results of a multisample resolve operation. Ignored if a RESOLVE* store_op is not used. */ Uint32 resolve_mip_level; /**< The mip level of the resolve texture to use for the resolve operation. Ignored if a RESOLVE* store_op is not used. */ Uint32 resolve_layer; /**< The layer index of the resolve texture to use for the resolve operation. Ignored if a RESOLVE* store_op is not used. */ - bool cycle; /**< true cycles the texture if the texture is bound and load_op is not LOAD */ - bool cycle_resolve_texture; /**< true cycles the resolve texture if the resolve texture is bound. Ignored if a RESOLVE* store_op is not used. */ + bool cycle; /**< true cycles the texture if the texture is bound and load_op is not LOAD */ + bool cycle_resolve_texture; /**< true cycles the resolve texture if the resolve texture is bound. Ignored if a RESOLVE* store_op is not used. */ Uint8 padding1; Uint8 padding2; } SDL_GPUColorTargetInfo; @@ -1970,6 +2070,9 @@ typedef struct SDL_GPUColorTargetInfo * * Note that depth/stencil targets do not support multisample resolves. * + * Due to ABI limitations, depth textures with more than 255 layers are not + * supported. + * * \since This struct is available since SDL 3.2.0. * * \sa SDL_BeginGPURenderPass @@ -1982,10 +2085,10 @@ typedef struct SDL_GPUDepthStencilTargetInfo SDL_GPUStoreOp store_op; /**< What is done with the depth results of the render pass. */ SDL_GPULoadOp stencil_load_op; /**< What is done with the stencil contents at the beginning of the render pass. */ SDL_GPUStoreOp stencil_store_op; /**< What is done with the stencil results of the render pass. */ - bool cycle; /**< true cycles the texture if the texture is bound and any load ops are not LOAD */ + bool cycle; /**< true cycles the texture if the texture is bound and any load ops are not LOAD */ Uint8 clear_stencil; /**< The value to clear the stencil component to at the beginning of the render pass. Ignored if SDL_GPU_LOADOP_CLEAR is not used. */ - Uint8 padding1; - Uint8 padding2; + Uint8 mip_level; /**< The mip level to use as the depth stencil target. */ + Uint8 layer; /**< The layer index to use as the depth stencil target. */ } SDL_GPUDepthStencilTargetInfo; /** @@ -2002,7 +2105,7 @@ typedef struct SDL_GPUBlitInfo { SDL_FColor clear_color; /**< The color to clear the destination region to before the blit. Ignored if load_op is not SDL_GPU_LOADOP_CLEAR. */ SDL_FlipMode flip_mode; /**< The flip mode for the source region. */ SDL_GPUFilter filter; /**< The filter mode used when blitting. */ - bool cycle; /**< true cycles the destination texture if it is already bound. */ + bool cycle; /**< true cycles the destination texture if it is already bound. */ Uint8 padding1; Uint8 padding2; Uint8 padding3; @@ -2031,6 +2134,8 @@ typedef struct SDL_GPUBufferBinding * * \sa SDL_BindGPUVertexSamplers * \sa SDL_BindGPUFragmentSamplers + * \sa SDL_GPUTexture + * \sa SDL_GPUSampler */ typedef struct SDL_GPUTextureSamplerBinding { @@ -2111,6 +2216,13 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GPUSupportsProperties( /** * Creates a GPU context. * + * The GPU driver name can be one of the following: + * + * - "vulkan": [Vulkan](CategoryGPU#vulkan) + * - "direct3d12": [D3D12](CategoryGPU#d3d12) + * - "metal": [Metal](CategoryGPU#metal) + * - NULL: let SDL pick the optimal driver + * * \param format_flags a bitflag indicating which shader formats the app is * able to provide. * \param debug_mode enable debug mode properties and validations. @@ -2121,6 +2233,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GPUSupportsProperties( * * \since This function is available since SDL 3.2.0. * + * \sa SDL_CreateGPUDeviceWithProperties * \sa SDL_GetGPUShaderFormats * \sa SDL_GetGPUDeviceDriver * \sa SDL_DestroyGPUDevice @@ -2140,8 +2253,31 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice( * properties and validations, defaults to true. * - `SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN`: enable to prefer * energy efficiency over maximum GPU performance, defaults to false. + * - `SDL_PROP_GPU_DEVICE_CREATE_VERBOSE_BOOLEAN`: enable to automatically log + * useful debug information on device creation, defaults to true. * - `SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING`: the name of the GPU driver to * use, if a specific one is desired. + * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN`: Enable Vulkan + * device feature shaderClipDistance. If disabled, clip distances are not + * supported in shader code: gl_ClipDistance[] built-ins of GLSL, + * SV_ClipDistance0/1 semantics of HLSL and [[clip_distance]] attribute of + * Metal. Disabling optional features allows the application to run on some + * older Android devices. Defaults to true. + * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN`: Enable + * Vulkan device feature depthClamp. If disabled, there is no depth clamp + * support and enable_depth_clip in SDL_GPURasterizerState must always be + * set to true. Disabling optional features allows the application to run on + * some older Android devices. Defaults to true. + * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN`: + * Enable Vulkan device feature drawIndirectFirstInstance. If disabled, the + * argument first_instance of SDL_GPUIndirectDrawCommand must be set to + * zero. Disabling optional features allows the application to run on some + * older Android devices. Defaults to true. + * - `SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN`: Enable Vulkan + * device feature samplerAnisotropy. If disabled, enable_anisotropy of + * SDL_GPUSamplerCreateInfo must be set to false. Disabling optional + * features allows the application to run on some older Android devices. + * Defaults to true. * * These are the current shader format properties: * @@ -2158,10 +2294,32 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice( * - `SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN`: The app is able to * provide Metal shader libraries if applicable. * - * With the D3D12 renderer: + * With the D3D12 backend: * * - `SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING`: the prefix to * use for all vertex semantics, default is "TEXCOORD". + * - `SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN`: By + * default, Resourcing Binding Tier 2 is required for D3D12 support. + * However, an application can set this property to true to enable Tier 1 + * support, if (and only if) the application uses 8 or fewer storage + * resources across all shader stages. As of writing, this property is + * useful for targeting Intel Haswell and Broadwell GPUs; other hardware + * either supports Tier 2 Resource Binding or does not support D3D12 in any + * capacity. Defaults to false. + * + * With the Vulkan backend: + * + * - `SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN`: + * By default, Vulkan device enumeration includes drivers of all types, + * including software renderers (for example, the Lavapipe Mesa driver). + * This can be useful if your application _requires_ SDL_GPU, but if you can + * provide your own fallback renderer (for example, an OpenGL renderer) this + * property can be set to true. Defaults to false. + * - `SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER`: a pointer to an + * SDL_GPUVulkanOptions structure to be processed during device creation. + * This allows configuring a variety of Vulkan-specific options such as + * increasing the API version and opting into extensions aside from the + * minimal set SDL requires. * * \param props the properties to use. * \returns a GPU context on success or NULL on failure; call SDL_GetError() @@ -2177,16 +2335,52 @@ extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDevice( extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_CreateGPUDeviceWithProperties( SDL_PropertiesID props); -#define SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN "SDL.gpu.device.create.debugmode" -#define SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN "SDL.gpu.device.create.preferlowpower" -#define SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING "SDL.gpu.device.create.name" -#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN "SDL.gpu.device.create.shaders.private" -#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN "SDL.gpu.device.create.shaders.spirv" -#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN "SDL.gpu.device.create.shaders.dxbc" -#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN "SDL.gpu.device.create.shaders.dxil" -#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN "SDL.gpu.device.create.shaders.msl" -#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN "SDL.gpu.device.create.shaders.metallib" -#define SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING "SDL.gpu.device.create.d3d12.semantic" +#define SDL_PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN "SDL.gpu.device.create.debugmode" +#define SDL_PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN "SDL.gpu.device.create.preferlowpower" +#define SDL_PROP_GPU_DEVICE_CREATE_VERBOSE_BOOLEAN "SDL.gpu.device.create.verbose" +#define SDL_PROP_GPU_DEVICE_CREATE_NAME_STRING "SDL.gpu.device.create.name" +#define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN "SDL.gpu.device.create.feature.clip_distance" +#define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN "SDL.gpu.device.create.feature.depth_clamping" +#define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN "SDL.gpu.device.create.feature.indirect_draw_first_instance" +#define SDL_PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN "SDL.gpu.device.create.feature.anisotropy" +#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN "SDL.gpu.device.create.shaders.private" +#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN "SDL.gpu.device.create.shaders.spirv" +#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN "SDL.gpu.device.create.shaders.dxbc" +#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN "SDL.gpu.device.create.shaders.dxil" +#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN "SDL.gpu.device.create.shaders.msl" +#define SDL_PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN "SDL.gpu.device.create.shaders.metallib" +#define SDL_PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN "SDL.gpu.device.create.d3d12.allowtier1resourcebinding" +#define SDL_PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING "SDL.gpu.device.create.d3d12.semantic" +#define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN "SDL.gpu.device.create.vulkan.requirehardwareacceleration" +#define SDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER "SDL.gpu.device.create.vulkan.options" + + +/** + * A structure specifying additional options when using Vulkan. + * + * When no such structure is provided, SDL will use Vulkan API version 1.0 and + * a minimal set of features. The requested API version influences how the + * feature_list is processed by SDL. When requesting API version 1.0, the + * feature_list is ignored. Only the vulkan_10_physical_device_features and + * the extension lists are used. When requesting API version 1.1, the + * feature_list is scanned for feature structures introduced in Vulkan 1.1. + * When requesting Vulkan 1.2 or higher, the feature_list is additionally + * scanned for compound feature structs such as + * VkPhysicalDeviceVulkan11Features. The device and instance extension lists, + * as well as vulkan_10_physical_device_features, are always processed. + * + * \since This struct is available since SDL 3.4.0. + */ +typedef struct SDL_GPUVulkanOptions +{ + Uint32 vulkan_api_version; /**< The Vulkan API version to request for the instance. Use Vulkan's VK_MAKE_VERSION or VK_MAKE_API_VERSION. */ + void *feature_list; /**< Pointer to the first element of a chain of Vulkan feature structs. (Requires API version 1.1 or higher.)*/ + void *vulkan_10_physical_device_features; /**< Pointer to a VkPhysicalDeviceFeatures struct to enable additional Vulkan 1.0 features. */ + Uint32 device_extension_count; /**< Number of additional device extensions to require. */ + const char **device_extension_names; /**< Pointer to a list of additional device extensions to require. */ + Uint32 instance_extension_count; /**< Number of additional instance extensions to require. */ + const char **instance_extension_names; /**< Pointer to a list of additional instance extensions to require. */ +} SDL_GPUVulkanOptions; /** * Destroys a GPU context previously returned by SDL_CreateGPUDevice. @@ -2250,6 +2444,116 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetGPUDeviceDriver(SDL_GPUDevice *d */ extern SDL_DECLSPEC SDL_GPUShaderFormat SDLCALL SDL_GetGPUShaderFormats(SDL_GPUDevice *device); +/** + * Get the properties associated with a GPU device. + * + * All properties are optional and may differ between GPU backends and SDL + * versions. + * + * The following properties are provided by SDL: + * + * `SDL_PROP_GPU_DEVICE_NAME_STRING`: Contains the name of the underlying + * device as reported by the system driver. This string has no standardized + * format, is highly inconsistent between hardware devices and drivers, and is + * able to change at any time. Do not attempt to parse this string as it is + * bound to fail at some point in the future when system drivers are updated, + * new hardware devices are introduced, or when SDL adds new GPU backends or + * modifies existing ones. + * + * Strings that have been found in the wild include: + * + * - GTX 970 + * - GeForce GTX 970 + * - NVIDIA GeForce GTX 970 + * - Microsoft Direct3D12 (NVIDIA GeForce GTX 970) + * - NVIDIA Graphics Device + * - GeForce GPU + * - P106-100 + * - AMD 15D8:C9 + * - AMD Custom GPU 0405 + * - AMD Radeon (TM) Graphics + * - ASUS Radeon RX 470 Series + * - Intel(R) Arc(tm) A380 Graphics (DG2) + * - Virtio-GPU Venus (NVIDIA TITAN V) + * - SwiftShader Device (LLVM 16.0.0) + * - llvmpipe (LLVM 15.0.4, 256 bits) + * - Microsoft Basic Render Driver + * - unknown device + * + * The above list shows that the same device can have different formats, the + * vendor name may or may not appear in the string, the included vendor name + * may not be the vendor of the chipset on the device, some manufacturers + * include pseudo-legal marks while others don't, some devices may not use a + * marketing name in the string, the device string may be wrapped by the name + * of a translation interface, the device may be emulated in software, or the + * string may contain generic text that does not identify the device at all. + * + * `SDL_PROP_GPU_DEVICE_DRIVER_NAME_STRING`: Contains the self-reported name + * of the underlying system driver. + * + * Strings that have been found in the wild include: + * + * - Intel Corporation + * - Intel open-source Mesa driver + * - Qualcomm Technologies Inc. Adreno Vulkan Driver + * - MoltenVK + * - Mali-G715 + * - venus + * + * `SDL_PROP_GPU_DEVICE_DRIVER_VERSION_STRING`: Contains the self-reported + * version of the underlying system driver. This is a relatively short version + * string in an unspecified format. If SDL_PROP_GPU_DEVICE_DRIVER_INFO_STRING + * is available then that property should be preferred over this one as it may + * contain additional information that is useful for identifying the exact + * driver version used. + * + * Strings that have been found in the wild include: + * + * - 53.0.0 + * - 0.405.2463 + * - 32.0.15.6614 + * + * `SDL_PROP_GPU_DEVICE_DRIVER_INFO_STRING`: Contains the detailed version + * information of the underlying system driver as reported by the driver. This + * is an arbitrary string with no standardized format and it may contain + * newlines. This property should be preferred over + * SDL_PROP_GPU_DEVICE_DRIVER_VERSION_STRING if it is available as it usually + * contains the same information but in a format that is easier to read. + * + * Strings that have been found in the wild include: + * + * - 101.6559 + * - 1.2.11 + * - Mesa 21.2.2 (LLVM 12.0.1) + * - Mesa 22.2.0-devel (git-f226222 2022-04-14 impish-oibaf-ppa) + * - v1.r53p0-00eac0.824c4f31403fb1fbf8ee1042422c2129 + * + * This string has also been observed to be a multiline string (which has a + * trailing newline): + * + * ``` + * Driver Build: 85da404, I46ff5fc46f, 1606794520 + * Date: 11/30/20 + * Compiler Version: EV031.31.04.01 + * Driver Branch: promo490_3_Google + * ``` + * + * \param device a GPU context to query. + * \returns a valid property ID on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetGPUDeviceProperties(SDL_GPUDevice *device); + +#define SDL_PROP_GPU_DEVICE_NAME_STRING "SDL.gpu.device.name" +#define SDL_PROP_GPU_DEVICE_DRIVER_NAME_STRING "SDL.gpu.device.driver_name" +#define SDL_PROP_GPU_DEVICE_DRIVER_VERSION_STRING "SDL.gpu.device.driver_version" +#define SDL_PROP_GPU_DEVICE_DRIVER_INFO_STRING "SDL.gpu.device.driver_info" + + /* State Creation */ /** @@ -2440,7 +2744,8 @@ extern SDL_DECLSPEC SDL_GPUShader * SDLCALL SDL_CreateGPUShader( * Creates a texture object to be used in graphics or compute workflows. * * The contents of this texture are undefined until data is written to the - * texture. + * texture, either via SDL_UploadToGPUTexture or by performing a render or + * compute pass with this texture as a target. * * Note that certain combinations of usage flags are invalid. For example, a * texture cannot have both the SAMPLER and GRAPHICS_STORAGE_READ flags. @@ -2482,6 +2787,8 @@ extern SDL_DECLSPEC SDL_GPUShader * SDLCALL SDL_CreateGPUShader( * * \sa SDL_UploadToGPUTexture * \sa SDL_DownloadFromGPUTexture + * \sa SDL_BeginGPURenderPass + * \sa SDL_BeginGPUComputePass * \sa SDL_BindGPUVertexSamplers * \sa SDL_BindGPUVertexStorageTextures * \sa SDL_BindGPUFragmentSamplers @@ -2638,6 +2945,12 @@ extern SDL_DECLSPEC void SDLCALL SDL_SetGPUTextureName( * * Useful for debugging. * + * On Direct3D 12, using SDL_InsertGPUDebugLabel requires + * WinPixEventRuntime.dll to be in your PATH or in the same directory as your + * executable. See + * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/) + * for instructions on how to obtain it. + * * \param command_buffer a command buffer. * \param text a UTF-8 string constant to insert as the label. * @@ -2648,7 +2961,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_InsertGPUDebugLabel( const char *text); /** - * Begins a debug group with an arbitary name. + * Begins a debug group with an arbitrary name. * * Used for denoting groups of calls when viewing the command buffer * callstream in a graphics debugging tool. @@ -2656,6 +2969,11 @@ extern SDL_DECLSPEC void SDLCALL SDL_InsertGPUDebugLabel( * Each call to SDL_PushGPUDebugGroup must have a corresponding call to * SDL_PopGPUDebugGroup. * + * On Direct3D 12, using SDL_PushGPUDebugGroup requires WinPixEventRuntime.dll + * to be in your PATH or in the same directory as your executable. See + * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/) + * for instructions on how to obtain it. + * * On some backends (e.g. Metal), pushing a debug group during a * render/blit/compute pass will create a group that is scoped to the native * pass rather than the command buffer. For best results, if you push a debug @@ -2675,6 +2993,11 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUDebugGroup( /** * Ends the most-recently pushed debug group. * + * On Direct3D 12, using SDL_PopGPUDebugGroup requires WinPixEventRuntime.dll + * to be in your PATH or in the same directory as your executable. See + * [here](https://devblogs.microsoft.com/pix/winpixeventruntime/) + * for instructions on how to obtain it. + * * \param command_buffer a command buffer. * * \since This function is available since SDL 3.2.0. @@ -2816,12 +3139,15 @@ extern SDL_DECLSPEC SDL_GPUCommandBuffer * SDLCALL SDL_AcquireGPUCommandBuffer( /** * Pushes data to a vertex uniform slot on the command buffer. * - * Subsequent draw calls will use this uniform data. + * Subsequent draw calls in this command buffer will use this uniform data. * * The data being pushed must respect std140 layout conventions. In practical * terms this means you must ensure that vec3 and vec4 fields are 16-byte * aligned. * + * For detailed information about accessing uniform data from a shader, please + * refer to SDL_CreateGPUShader. + * * \param command_buffer a command buffer. * \param slot_index the vertex uniform slot to push data to. * \param data client data to write. @@ -2838,7 +3164,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUVertexUniformData( /** * Pushes data to a fragment uniform slot on the command buffer. * - * Subsequent draw calls will use this uniform data. + * Subsequent draw calls in this command buffer will use this uniform data. * * The data being pushed must respect std140 layout conventions. In practical * terms this means you must ensure that vec3 and vec4 fields are 16-byte @@ -2860,7 +3186,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUFragmentUniformData( /** * Pushes data to a uniform slot on the command buffer. * - * Subsequent draw calls will use this uniform data. + * Subsequent draw calls in this command buffer will use this uniform data. * * The data being pushed must respect std140 layout conventions. In practical * terms this means you must ensure that vec3 and vec4 fields are 16-byte @@ -2892,6 +3218,14 @@ extern SDL_DECLSPEC void SDLCALL SDL_PushGPUComputeUniformData( * is called. You cannot begin another render pass, or begin a compute pass or * copy pass until you have ended the render pass. * + * Using SDL_GPU_LOADOP_LOAD before any contents have been written to the + * texture subresource will result in undefined behavior. SDL_GPU_LOADOP_CLEAR + * will set the contents of the texture subresource to a single value before + * any rendering is performed. It's fine to do an empty render pass using + * SDL_GPU_STOREOP_STORE to clear a texture, but in general it's better to + * think of clearing not as an independent operation but as something that's + * done as the beginning of a render pass. + * * \param command_buffer a command buffer. * \param color_target_infos an array of texture subresources with * corresponding clear values and load/store ops. @@ -3338,7 +3672,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputePipeline( * The textures must have been created with SDL_GPU_TEXTUREUSAGE_SAMPLER. * * Be sure your shader is set up according to the requirements documented in - * SDL_CreateGPUShader(). + * SDL_CreateGPUComputePipeline(). * * \param compute_pass a compute pass handle. * \param first_slot the compute sampler slot to begin binding from. @@ -3349,7 +3683,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputePipeline( * * \since This function is available since SDL 3.2.0. * - * \sa SDL_CreateGPUShader + * \sa SDL_CreateGPUComputePipeline */ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers( SDL_GPUComputePass *compute_pass, @@ -3364,7 +3698,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers( * SDL_GPU_TEXTUREUSAGE_COMPUTE_STORAGE_READ. * * Be sure your shader is set up according to the requirements documented in - * SDL_CreateGPUShader(). + * SDL_CreateGPUComputePipeline(). * * \param compute_pass a compute pass handle. * \param first_slot the compute storage texture slot to begin binding from. @@ -3373,7 +3707,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeSamplers( * * \since This function is available since SDL 3.2.0. * - * \sa SDL_CreateGPUShader + * \sa SDL_CreateGPUComputePipeline */ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures( SDL_GPUComputePass *compute_pass, @@ -3388,7 +3722,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures( * SDL_GPU_BUFFERUSAGE_COMPUTE_STORAGE_READ. * * Be sure your shader is set up according to the requirements documented in - * SDL_CreateGPUShader(). + * SDL_CreateGPUComputePipeline(). * * \param compute_pass a compute pass handle. * \param first_slot the compute storage buffer slot to begin binding from. @@ -3397,7 +3731,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageTextures( * * \since This function is available since SDL 3.2.0. * - * \sa SDL_CreateGPUShader + * \sa SDL_CreateGPUComputePipeline */ extern SDL_DECLSPEC void SDLCALL SDL_BindGPUComputeStorageBuffers( SDL_GPUComputePass *compute_pass, @@ -3514,6 +3848,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_UnmapGPUTransferBuffer( * \returns a copy pass handle. * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_EndGPUCopyPass */ extern SDL_DECLSPEC SDL_GPUCopyPass * SDLCALL SDL_BeginGPUCopyPass( SDL_GPUCommandBuffer *command_buffer); @@ -3567,6 +3903,10 @@ extern SDL_DECLSPEC void SDLCALL SDL_UploadToGPUBuffer( * This copy occurs on the GPU timeline. You may assume the copy has finished * in subsequent commands. * + * This function does not support copying between depth and color textures. + * For those, copy the texture to a buffer and then to the destination + * texture. + * * \param copy_pass a copy pass handle. * \param source a source texture region. * \param destination a destination texture region. @@ -3775,7 +4115,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_ReleaseWindowFromGPUDevice( * supported via SDL_WindowSupportsGPUPresentMode / * SDL_WindowSupportsGPUSwapchainComposition prior to calling this function. * - * SDL_GPU_PRESENTMODE_VSYNC with SDL_GPU_SWAPCHAINCOMPOSITION_SDR are always + * SDL_GPU_PRESENTMODE_VSYNC with SDL_GPU_SWAPCHAINCOMPOSITION_SDR is always * supported. * * \param device a GPU context. @@ -3849,7 +4189,9 @@ extern SDL_DECLSPEC SDL_GPUTextureFormat SDLCALL SDL_GetGPUSwapchainTextureForma * buffer used to acquire it. * * This function will fill the swapchain texture handle with NULL if too many - * frames are in flight. This is not an error. + * frames are in flight. This is not an error. This NULL pointer should not be + * passed back into SDL. Instead, it should be considered as an indication to + * wait until the swapchain is available. * * If you use this function, it is possible to create a situation where many * command buffers are allocated while the rendering context waits for the GPU @@ -4171,6 +4513,29 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_CalculateGPUTextureFormatSize( Uint32 height, Uint32 depth_or_layer_count); +/** + * Get the SDL pixel format corresponding to a GPU texture format. + * + * \param format a texture format. + * \returns the corresponding pixel format, or SDL_PIXELFORMAT_UNKNOWN if + * there is no corresponding pixel format. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_PixelFormat SDLCALL SDL_GetPixelFormatFromGPUTextureFormat(SDL_GPUTextureFormat format); + +/** + * Get the GPU texture format corresponding to an SDL pixel format. + * + * \param format a pixel format. + * \returns the corresponding GPU texture format, or + * SDL_GPU_TEXTUREFORMAT_INVALID if there is no corresponding GPU + * texture format. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_GPUTextureFormat SDLCALL SDL_GetGPUTextureFormatFromPixelFormat(SDL_PixelFormat format); + #ifdef SDL_PLATFORM_GDK /** diff --git a/vendor/sdl3/include/SDL_haptic.h b/vendor/sdl3/include/SDL_haptic.h index a45335b28..9a20396d3 100644 --- a/vendor/sdl3/include/SDL_haptic.h +++ b/vendor/sdl3/include/SDL_haptic.h @@ -70,7 +70,7 @@ * { * SDL_Haptic *haptic; * SDL_HapticEffect effect; - * int effect_id; + * SDL_HapticEffectID effect_id; * * // Open the device * haptic = SDL_OpenHapticFromJoystick(joystick); @@ -149,6 +149,19 @@ extern "C" { */ typedef struct SDL_Haptic SDL_Haptic; +/* + * Misc defines. + */ + +/** + * Used to play a device an infinite number of times. + * + * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_RunHapticEffect + */ +#define SDL_HAPTIC_INFINITY 4294967295U + /** * \name Haptic features @@ -162,6 +175,11 @@ typedef struct SDL_Haptic SDL_Haptic; */ /* @{ */ +/** + * Type of haptic effect. + */ +typedef Uint16 SDL_HapticEffectType; + /** * Constant effect supported. * @@ -383,6 +401,11 @@ typedef struct SDL_Haptic SDL_Haptic; */ /* @{ */ +/** + * Type of coordinates used for haptic direction. + */ +typedef Uint8 SDL_HapticDirectionType; + /** * Uses polar coordinates for the direction. * @@ -426,18 +449,15 @@ typedef struct SDL_Haptic SDL_Haptic; /* @} *//* Haptic features */ -/* - * Misc defines. - */ /** - * Used to play a device an infinite number of times. + * ID for haptic effects. * - * \since This macro is available since SDL 3.2.0. + * This is -1 if the ID is invalid. * - * \sa SDL_RunHapticEffect + * \sa SDL_CreateHapticEffect */ -#define SDL_HAPTIC_INFINITY 4294967295U +typedef int SDL_HapticEffectID; /** @@ -545,8 +565,8 @@ typedef struct SDL_Haptic SDL_Haptic; */ typedef struct SDL_HapticDirection { - Uint8 type; /**< The type of encoding. */ - Sint32 dir[3]; /**< The encoded direction. */ + SDL_HapticDirectionType type; /**< The type of encoding. */ + Sint32 dir[3]; /**< The encoded direction. */ } SDL_HapticDirection; @@ -566,7 +586,7 @@ typedef struct SDL_HapticDirection typedef struct SDL_HapticConstant { /* Header */ - Uint16 type; /**< SDL_HAPTIC_CONSTANT */ + SDL_HapticEffectType type; /**< SDL_HAPTIC_CONSTANT */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -652,9 +672,9 @@ typedef struct SDL_HapticConstant typedef struct SDL_HapticPeriodic { /* Header */ - Uint16 type; /**< SDL_HAPTIC_SINE, SDL_HAPTIC_SQUARE - SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or - SDL_HAPTIC_SAWTOOTHDOWN */ + SDL_HapticEffectType type; /**< SDL_HAPTIC_SINE, SDL_HAPTIC_SQUARE + SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or + SDL_HAPTIC_SAWTOOTHDOWN */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -708,8 +728,8 @@ typedef struct SDL_HapticPeriodic typedef struct SDL_HapticCondition { /* Header */ - Uint16 type; /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER, - SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */ + SDL_HapticEffectType type; /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER, + SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -747,7 +767,7 @@ typedef struct SDL_HapticCondition typedef struct SDL_HapticRamp { /* Header */ - Uint16 type; /**< SDL_HAPTIC_RAMP */ + SDL_HapticEffectType type; /**< SDL_HAPTIC_RAMP */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -786,7 +806,7 @@ typedef struct SDL_HapticRamp typedef struct SDL_HapticLeftRight { /* Header */ - Uint16 type; /**< SDL_HAPTIC_LEFTRIGHT */ + SDL_HapticEffectType type; /**< SDL_HAPTIC_LEFTRIGHT */ /* Replay */ Uint32 length; /**< Duration of the effect in milliseconds. */ @@ -816,7 +836,7 @@ typedef struct SDL_HapticLeftRight typedef struct SDL_HapticCustom { /* Header */ - Uint16 type; /**< SDL_HAPTIC_CUSTOM */ + SDL_HapticEffectType type; /**< SDL_HAPTIC_CUSTOM */ SDL_HapticDirection direction; /**< Direction of the effect. */ /* Replay */ @@ -915,7 +935,7 @@ typedef struct SDL_HapticCustom typedef union SDL_HapticEffect { /* Common for all force feedback effects */ - Uint16 type; /**< Effect type. */ + SDL_HapticEffectType type; /**< Effect type. */ SDL_HapticConstant constant; /**< Constant effect. */ SDL_HapticPeriodic periodic; /**< Periodic effect. */ SDL_HapticCondition condition; /**< Condition effect. */ @@ -1193,7 +1213,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_HapticEffectSupported(SDL_Haptic *haptic, c * \sa SDL_RunHapticEffect * \sa SDL_UpdateHapticEffect */ -extern SDL_DECLSPEC int SDLCALL SDL_CreateHapticEffect(SDL_Haptic *haptic, const SDL_HapticEffect *effect); +extern SDL_DECLSPEC SDL_HapticEffectID SDLCALL SDL_CreateHapticEffect(SDL_Haptic *haptic, const SDL_HapticEffect *effect); /** * Update the properties of an effect. @@ -1215,7 +1235,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_CreateHapticEffect(SDL_Haptic *haptic, const * \sa SDL_CreateHapticEffect * \sa SDL_RunHapticEffect */ -extern SDL_DECLSPEC bool SDLCALL SDL_UpdateHapticEffect(SDL_Haptic *haptic, int effect, const SDL_HapticEffect *data); +extern SDL_DECLSPEC bool SDLCALL SDL_UpdateHapticEffect(SDL_Haptic *haptic, SDL_HapticEffectID effect, const SDL_HapticEffect *data); /** * Run the haptic effect on its associated haptic device. @@ -1239,7 +1259,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_UpdateHapticEffect(SDL_Haptic *haptic, int * \sa SDL_StopHapticEffect * \sa SDL_StopHapticEffects */ -extern SDL_DECLSPEC bool SDLCALL SDL_RunHapticEffect(SDL_Haptic *haptic, int effect, Uint32 iterations); +extern SDL_DECLSPEC bool SDLCALL SDL_RunHapticEffect(SDL_Haptic *haptic, SDL_HapticEffectID effect, Uint32 iterations); /** * Stop the haptic effect on its associated haptic device. @@ -1254,7 +1274,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RunHapticEffect(SDL_Haptic *haptic, int eff * \sa SDL_RunHapticEffect * \sa SDL_StopHapticEffects */ -extern SDL_DECLSPEC bool SDLCALL SDL_StopHapticEffect(SDL_Haptic *haptic, int effect); +extern SDL_DECLSPEC bool SDLCALL SDL_StopHapticEffect(SDL_Haptic *haptic, SDL_HapticEffectID effect); /** * Destroy a haptic effect on the device. @@ -1269,7 +1289,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_StopHapticEffect(SDL_Haptic *haptic, int ef * * \sa SDL_CreateHapticEffect */ -extern SDL_DECLSPEC void SDLCALL SDL_DestroyHapticEffect(SDL_Haptic *haptic, int effect); +extern SDL_DECLSPEC void SDLCALL SDL_DestroyHapticEffect(SDL_Haptic *haptic, SDL_HapticEffectID effect); /** * Get the status of the current effect on the specified haptic device. @@ -1285,7 +1305,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_DestroyHapticEffect(SDL_Haptic *haptic, int * * \sa SDL_GetHapticFeatures */ -extern SDL_DECLSPEC bool SDLCALL SDL_GetHapticEffectStatus(SDL_Haptic *haptic, int effect); +extern SDL_DECLSPEC bool SDLCALL SDL_GetHapticEffectStatus(SDL_Haptic *haptic, SDL_HapticEffectID effect); /** * Set the global gain of the specified haptic device. diff --git a/vendor/sdl3/include/SDL_hidapi.h b/vendor/sdl3/include/SDL_hidapi.h index 131b03723..67e29c2a1 100644 --- a/vendor/sdl3/include/SDL_hidapi.h +++ b/vendor/sdl3/include/SDL_hidapi.h @@ -55,6 +55,7 @@ #include #include +#include #include /* Set up for C function definitions, even when using C++ */ @@ -283,6 +284,24 @@ extern SDL_DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_ */ extern SDL_DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path); +/** + * Get the properties associated with an SDL_hid_device. + * + * The following read-only properties are provided by SDL: + * + * - `SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER`: the libusb_device_handle + * associated with the device, if it was opened using libusb. + * + * \param dev a device handle returned from SDL_hid_open(). + * \returns a valid property ID on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_hid_get_properties(SDL_hid_device *dev); + +#define SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER "SDL.hidapi.libusb.device.handle" + /** * Write an Output report to a HID device. * diff --git a/vendor/sdl3/include/SDL_hints.h b/vendor/sdl3/include/SDL_hints.h index a08153571..474e97f04 100644 --- a/vendor/sdl3/include/SDL_hints.h +++ b/vendor/sdl3/include/SDL_hints.h @@ -391,12 +391,46 @@ extern "C" { * concept, so it applies to a physical audio device in this case, and not an * SDL_AudioStream, nor an SDL logical audio device. * + * For Windows WASAPI audio, the following roles are supported, and map to + * `AUDIO_STREAM_CATEGORY`: + * + * - "Other" (default) + * - "Communications" - Real-time communications, such as VOIP or chat + * - "Game" - Game audio + * - "GameChat" - Game chat audio, similar to "Communications" except that + * this will not attenuate other audio streams + * - "Movie" - Music or sound with dialog + * - "Media" - Music or sound without dialog + * + * If your application applies its own echo cancellation, gain control, and + * noise reduction it should also set SDL_HINT_AUDIO_DEVICE_RAW_STREAM. + * * This hint should be set before an audio device is opened. * * \since This hint is available since SDL 3.2.0. */ #define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" +/** + * Specify whether this audio device should do audio processing. + * + * Some operating systems perform echo cancellation, gain control, and noise + * reduction as needed. If your application already handles these, you can set + * this hint to prevent the OS from doing additional audio processing. + * + * This corresponds to the WASAPI audio option `AUDCLNT_STREAMOPTIONS_RAW`. + * + * The variable can be set to the following values: + * + * - "0": audio processing can be done by the OS. (default) + * - "1": audio processing is done by the application. + * + * This hint should be set before an audio device is opened. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_AUDIO_DEVICE_RAW_STREAM "SDL_AUDIO_DEVICE_RAW_STREAM" + /** * Specify the input file when recording audio using the disk audio driver. * @@ -595,7 +629,7 @@ extern "C" { * A variable that limits what CPU features are available. * * By default, SDL marks all features the current CPU supports as available. - * This hint allows to limit these to a subset. + * This hint allows the enabled features to be limited to a subset. * * When the hint is unset, or empty, SDL will enable all detected CPU * features. @@ -685,6 +719,21 @@ extern "C" { */ #define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" +/** + * Set the level of checking for invalid parameters passed to SDL functions. + * + * The variable can be set to the following values: + * + * - "1": Enable fast parameter error checking, e.g. quick NULL checks, etc. + * - "2": Enable full parameter error checking, e.g. validating objects are + * the correct type, etc. (default) + * + * This hint can be set anytime. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_INVALID_PARAM_CHECKS "SDL_INVALID_PARAM_CHECKS" + /** * Disable giving back control to the browser automatically when running with * asyncify. @@ -711,8 +760,6 @@ extern "C" { * * This hint only applies to the emscripten platform. * - * The default value is "#canvas" - * * This hint should be set before creating a window. * * \since This hint is available since SDL 3.2.0. @@ -726,7 +773,7 @@ extern "C" { * * The variable can be one of: * - * - "#window": the javascript window object (default) + * - "#window": the javascript window object * - "#document": the javascript document object * - "#screen": the javascript window.screen object * - "#canvas": the WebGL canvas element @@ -1037,6 +1084,21 @@ extern "C" { */ #define SDL_HINT_HIDAPI_LIBUSB "SDL_HIDAPI_LIBUSB" + +/** + * A variable to control whether HIDAPI uses libusb for GameCube adapters. + * + * The variable can be set to the following values: + * + * - "0": HIDAPI will not use libusb for GameCube adapters. + * - "1": HIDAPI will use libusb for GameCube adapters if available. (default) + * + * This hint should be set before SDL is initialized. + * + * \since This hint is available since SDL 3.2.0. + */ +#define SDL_HINT_HIDAPI_LIBUSB_GAMECUBE "SDL_HIDAPI_LIBUSB_GAMECUBE" + /** * A variable to control whether HIDAPI uses libusb only for whitelisted * devices. @@ -1143,8 +1205,8 @@ extern "C" { #define SDL_HINT_IME_IMPLEMENTED_UI "SDL_IME_IMPLEMENTED_UI" /** - * A variable controlling whether the home indicator bar on iPhone X should be - * hidden. + * A variable controlling whether the home indicator bar on iPhone X and later + * should be hidden. * * The variable can be set to the following values: * @@ -1723,6 +1785,69 @@ extern "C" { */ #define SDL_HINT_JOYSTICK_HIDAPI_STEAM_HORI "SDL_JOYSTICK_HIDAPI_STEAM_HORI" +/** + * A variable controlling whether the HIDAPI driver for some Logitech wheels + * should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_LG4FF "SDL_JOYSTICK_HIDAPI_LG4FF" + +/** + * A variable controlling whether the HIDAPI driver for 8BitDo controllers + * should be used. + * + * This variable can be set to the following values: + * + * "0" - HIDAPI driver is not used. "1" - HIDAPI driver is used. + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_8BITDO "SDL_JOYSTICK_HIDAPI_8BITDO" + +/** + * A variable controlling whether the HIDAPI driver for SInput controllers + * should be used. + * + * More info - https://github.com/HandHeldLegend/SInput-HID + * + * This variable can be set to the following values: + * + * "0" - HIDAPI driver is not used. "1" - HIDAPI driver is used. + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SINPUT "SDL_JOYSTICK_HIDAPI_SINPUT" + +/** + * A variable controlling whether the HIDAPI driver for ZUIKI controllers + * should be used. + * + * This variable can be set to the following values: + * + * "0" - HIDAPI driver is not used. "1" - HIDAPI driver is used. + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_ZUIKI "SDL_JOYSTICK_HIDAPI_ZUIKI" + +/** + * A variable controlling whether the HIDAPI driver for Flydigi controllers + * should be used. + * + * This variable can be set to the following values: + * + * "0" - HIDAPI driver is not used. "1" - HIDAPI driver is used. + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_FLYDIGI "SDL_JOYSTICK_HIDAPI_FLYDIGI" + /** * A variable controlling whether the HIDAPI driver for Nintendo Switch * controllers should be used. @@ -1774,6 +1899,23 @@ extern "C" { */ #define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED" +/** + * A variable controlling whether the HIDAPI driver for Nintendo Switch 2 + * controllers should be used. + * + * The variable can be set to the following values: + * + * - "0": HIDAPI driver is not used. + * - "1": HIDAPI driver is used. + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI. + * + * This hint should be set before initializing joysticks and gamepads. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH2 "SDL_JOYSTICK_HIDAPI_SWITCH2" + /** * A variable controlling whether Nintendo Switch Joy-Con controllers will be * in vertical mode when using the HIDAPI driver. @@ -1926,6 +2068,41 @@ extern "C" { */ #define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED" +/** + * A variable controlling whether the new HIDAPI driver for wired Xbox One + * (GIP) controllers should be used. + * + * The variable can be set to the following values: + * + * - "0": HIDAPI driver is not used. + * - "1": HIDAPI driver is used. + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE. + * + * This hint should be set before initializing joysticks and gamepads. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_GIP "SDL_JOYSTICK_HIDAPI_GIP" + +/** + * A variable controlling whether the new HIDAPI driver for wired Xbox One + * (GIP) controllers should reset the controller if it can't get the metadata + * from the controller. + * + * The variable can be set to the following values: + * + * - "0": Assume this is a generic controller. + * - "1": Reset the controller to get metadata. + * + * By default the controller is not reset. + * + * This hint should be set before initializing joysticks and gamepads. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_GIP_RESET_FOR_METADATA "SDL_JOYSTICK_HIDAPI_GIP_RESET_FOR_METADATA" + /** * A variable controlling whether IOKit should be used for controller * handling. @@ -2126,8 +2303,8 @@ extern "C" { * * The variable can be set to the following values: * - * - "0": WGI is not used. - * - "1": WGI is used. (default) + * - "0": WGI is not used. (default) + * - "1": WGI is used. * * This hint should be set before SDL is initialized. * @@ -2228,9 +2405,9 @@ extern "C" { * pressing the 1 key would yield the keycode SDLK_1, or '1', instead of * SDLK_AMPERSAND, or '&' * - "latin_letters": For keyboards using non-Latin letters, such as Russian - * or Thai, the letter keys generate keycodes as though it had an en_US - * layout. e.g. pressing the key associated with SDL_SCANCODE_A on a Russian - * keyboard would yield 'a' instead of a Cyrillic letter. + * or Thai, the letter keys generate keycodes as though it had an English + * QWERTY layout. e.g. pressing the key associated with SDL_SCANCODE_A on a + * Russian keyboard would yield 'a' instead of a Cyrillic letter. * * The default value for this hint is "french_numbers,latin_letters" * @@ -2289,6 +2466,27 @@ extern "C" { */ #define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" +/** + * A variable that controls whether KMSDRM will use "atomic" functionality. + * + * The KMSDRM backend can use atomic commits, if both DRM_CLIENT_CAP_ATOMIC + * and DRM_CLIENT_CAP_UNIVERSAL_PLANES is supported by the system. As of SDL + * 3.4.0, it will favor this functionality, but in case this doesn't work well + * on a given system or other surprises, this hint can be used to disable it. + * + * This hint can not enable the functionality if it isn't available. + * + * The variable can be set to the following values: + * + * - "0": SDL will not use the KMSDRM "atomic" functionality. + * - "1": SDL will allow usage of the KMSDRM "atomic" functionality. (default) + * + * This hint should be set before SDL is initialized. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_KMSDRM_ATOMIC "SDL_KMSDRM_ATOMIC" + /** * A variable controlling the default SDL log levels. * @@ -2309,6 +2507,11 @@ extern "C" { * * `app=info,assert=warn,test=verbose,*=error` * + * If the `DEBUG_INVOCATION` environment variable is set to "1", the default + * log levels are equivalent to: + * + * `assert=warn,test=verbose,*=debug` + * * This hint can be set anytime. * * \since This hint is available since SDL 3.2.0. @@ -2410,6 +2613,21 @@ extern "C" { */ #define SDL_HINT_MAC_SCROLL_MOMENTUM "SDL_MAC_SCROLL_MOMENTUM" +/** + * A variable controlling whether holding down a key will repeat the pressed + * key or open the accents menu on macOS. + * + * The variable can be set to the following values: + * + * - "0": Holding a key will open the accents menu for that key. + * - "1": Holding a key will repeat the pressed key. (default) + * + * This hint needs to be set before SDL_Init(). + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_MAC_PRESS_AND_HOLD "SDL_MAC_PRESS_AND_HOLD" + /** * Request SDL_AppIterate() be called at a specific rate. * @@ -2430,6 +2648,10 @@ extern "C" { * This defaults to 0, and specifying NULL for the hint's value will restore * the default. * + * This doesn't have to be an integer value. For example, "59.94" won't be + * rounded to an integer rate; the digits after the decimal are actually + * respected. + * * This hint can be set anytime. * * \since This hint is available since SDL 3.2.0. @@ -2485,6 +2707,24 @@ extern "C" { */ #define SDL_HINT_MOUSE_DEFAULT_SYSTEM_CURSOR "SDL_MOUSE_DEFAULT_SYSTEM_CURSOR" +/** + * A variable setting whether we should scale cursors by the current display + * scale. + * + * The variable can be set to the following values: + * + * - "0": Cursors will not change size based on the display content scale. + * (default) + * - "1": Cursors will automatically match the display content scale (e.g. a + * 2x sized cursor will be used when the window is on a monitor with 200% + * scale). This is currently implemented on Windows and Wayland. + * + * This hint needs to be set before creating cursors. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_MOUSE_DPI_SCALE_CURSORS "SDL_MOUSE_DPI_SCALE_CURSORS" + /** * A variable controlling whether warping a hidden mouse cursor will activate * relative mouse mode. @@ -2493,7 +2733,7 @@ extern "C" { * the window center occur within a short time period, SDL will emulate mouse * warps using relative mouse mode. This can provide smoother and more * reliable mouse motion for some older games, which continuously calculate - * the distance travelled by the mouse pointer and warp it back to the center + * the distance traveled by the mouse pointer and warp it back to the center * of the window, rather than using relative mouse motion. * * Note that relative mouse mode may have different mouse acceleration @@ -2859,6 +3099,24 @@ extern "C" { */ #define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" +/** + * A variable controlling whether to use the Direct3D 11 WARP software + * rasterizer. + * + * For more information, see: + * https://learn.microsoft.com/en-us/windows/win32/direct3darticles/directx-warp + * + * The variable can be set to the following values: + * + * - "0": Disable WARP rasterizer. (default) + * - "1": Enable WARP rasterizer. + * + * This hint should be set before creating a renderer. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_RENDER_DIRECT3D11_WARP "SDL_RENDER_DIRECT3D11_WARP" + /** * A variable controlling whether to enable Vulkan Validation Layers. * @@ -3041,6 +3299,37 @@ extern "C" { */ #define SDL_HINT_ROG_GAMEPAD_MICE_EXCLUDED "SDL_ROG_GAMEPAD_MICE_EXCLUDED" +/** + * Variable controlling the width of the PS2's framebuffer in pixels + * + * By default, this variable is "640" + */ +#define SDL_HINT_PS2_GS_WIDTH "SDL_PS2_GS_WIDTH" + +/** + * Variable controlling the height of the PS2's framebuffer in pixels + * + * By default, this variable is "448" + */ +#define SDL_HINT_PS2_GS_HEIGHT "SDL_PS2_GS_HEIGHT" + +/** + * Variable controlling whether the signal is interlaced or progressive + * + * - "0": Image is interlaced. (default) + * - "1": Image is progressive + */ +#define SDL_HINT_PS2_GS_PROGRESSIVE "SDL_PS2_GS_PROGRESSIVE" + +/** + * Variable controlling the video mode of the console + * + * - "": Console-native. (default) + * - "NTSC": 60hz region + * - "PAL": 50hz region + */ +#define SDL_HINT_PS2_GS_MODE "SDL_PS2_GS_MODE" + /** * A variable controlling which Dispmanx layer to use on a Raspberry PI. * @@ -3267,10 +3556,12 @@ extern "C" { * prioritized in the list of displays, as exposed by calling * SDL_GetDisplays(), with the first listed becoming the primary display. The * naming convention can vary depending on the environment, but it is usually - * a connector name (e.g. 'DP-1', 'DP-2', 'HDMI-A-1',etc...). + * a connector name (e.g. 'DP-1', 'DP-2', 'HDMI-A-1', etc...). * - * On Wayland and X11 desktops, the connector names associated with displays - * can typically be found by using the `xrandr` utility. + * On Wayland desktops, the connector names associated with displays can be + * found in the `name` property of the info output from `wayland-info -i + * wl_output`. On X11 desktops, the `xrandr` utility can be used to retrieve + * the connector names associated with displays. * * This hint is currently supported on the following drivers: * @@ -3407,6 +3698,43 @@ extern "C" { */ #define SDL_HINT_VIDEO_MAC_FULLSCREEN_MENU_VISIBILITY "SDL_VIDEO_MAC_FULLSCREEN_MENU_VISIBILITY" +/** + * A variable indicating whether the metal layer drawable size should be + * updated for the SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED event on macOS. + * + * The variable can be set to the following values: + * + * - "0": the metal layer drawable size will not be updated on the + * SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED event. + * - "1": the metal layer drawable size will be updated on the + * SDL_EVENT_WINDOW_PIXEL_SIZE_CHANGED event. (default) + * + * This hint should be set before SDL_Metal_CreateView called. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_VIDEO_METAL_AUTO_RESIZE_DRAWABLE "SDL_VIDEO_METAL_AUTO_RESIZE_DRAWABLE" + +/** + * A variable controlling whether SDL will attempt to automatically set the + * destination display to a mode most closely matching that of the previous + * display if an exclusive fullscreen window is moved onto it. + * + * The variable can be set to the following values: + * + * - "0": SDL will not attempt to automatically set a matching mode on the + * destination display. If an exclusive fullscreen window is moved to a new + * display, the window will become fullscreen desktop. + * - "1": SDL will attempt to automatically set a mode on the destination + * display that most closely matches the mode of the display that the + * exclusive fullscreen window was previously on. (default) + * + * This hint can be set anytime. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_VIDEO_MATCH_EXCLUSIVE_MODE_ON_MOVE "SDL_VIDEO_MATCH_EXCLUSIVE_MODE_ON_MOVE" + /** * A variable controlling whether fullscreen windows are minimized when they * lose focus. @@ -3414,8 +3742,10 @@ extern "C" { * The variable can be set to the following values: * * - "0": Fullscreen windows will not be minimized when they lose focus. - * (default) * - "1": Fullscreen windows are minimized when they lose focus. + * - "auto": Fullscreen windows are minimized when they lose focus if they use + * exclusive fullscreen modes, so the desktop video mode is restored. + * (default) * * This hint can be set anytime. * @@ -4061,15 +4391,14 @@ extern "C" { * * The variable can be set to the following values: * - * - "0": GameInput is not used for raw keyboard and mouse events. + * - "0": GameInput is not used for raw keyboard and mouse events. (default) * - "1": GameInput is used for raw keyboard and mouse events, if available. - * (default) * * This hint should be set before SDL is initialized. * * \since This hint is available since SDL 3.2.0. */ -#define SDL_HINT_WINDOWS_GAMEINPUT "SDL_WINDOWS_GAMEINPUT" +#define SDL_HINT_WINDOWS_GAMEINPUT "SDL_WINDOWS_GAMEINPUT" /** * A variable controlling whether raw keyboard events are used on Windows. @@ -4085,6 +4414,28 @@ extern "C" { */ #define SDL_HINT_WINDOWS_RAW_KEYBOARD "SDL_WINDOWS_RAW_KEYBOARD" +/** + * A variable controlling whether or not the RIDEV_NOHOTKEYS flag is set when + * enabling Windows raw keyboard events. + * + * This blocks any hotkeys that have been registered by applications from + * having any effect beyond generating raw WM_INPUT events. + * + * This flag does not affect system-hotkeys like ALT-TAB or CTRL-ALT-DEL, but + * does affect the Windows Logo key since it is a userland hotkey registered + * by explorer.exe. + * + * The variable can be set to the following values: + * + * - "0": Hotkeys are not excluded. (default) + * - "1": Hotkeys are excluded. + * + * This hint can be set anytime. + * + * \since This hint is available since SDL 3.4.0. + */ +#define SDL_HINT_WINDOWS_RAW_KEYBOARD_EXCLUDE_HOTKEYS "SDL_WINDOWS_RAW_KEYBOARD_EXCLUDE_HOTKEYS" + /** * A variable controlling whether SDL uses Kernel Semaphores on Windows. * @@ -4114,7 +4465,7 @@ extern "C" { * * \since This hint is available since SDL 3.2.0. */ -#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" /** * A variable to specify custom icon resource id from RC file on Windows @@ -4287,7 +4638,6 @@ extern "C" { */ #define SDL_HINT_PEN_TOUCH_EVENTS "SDL_PEN_TOUCH_EVENTS" - /** * An enumeration of hint priorities. * @@ -4386,19 +4736,14 @@ extern SDL_DECLSPEC void SDLCALL SDL_ResetHints(void); * \param name the hint to query. * \returns the string value of a hint or NULL if the hint isn't set. * - * \threadsafety It is safe to call this function from any thread, however the - * return value only remains valid until the hint is changed; if - * another thread might do so, the app should supply locks - * and/or make a copy of the string. Note that using a hint - * callback instead is always thread-safe, as SDL holds a lock - * on the thread subsystem during the callback. + * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. * * \sa SDL_SetHint * \sa SDL_SetHintWithPriority */ -extern SDL_DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); +extern SDL_DECLSPEC const char *SDLCALL SDL_GetHint(const char *name); /** * Get the boolean value of a hint variable. @@ -4474,8 +4819,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_AddHintCallback(const char *name, SDL_HintC * \sa SDL_AddHintCallback */ extern SDL_DECLSPEC void SDLCALL SDL_RemoveHintCallback(const char *name, - SDL_HintCallback callback, - void *userdata); + SDL_HintCallback callback, + void *userdata); /* Ends C function definitions when using C++ */ #ifdef __cplusplus diff --git a/vendor/sdl3/include/SDL_init.h b/vendor/sdl3/include/SDL_init.h index 27ebe4b0e..557f2b995 100644 --- a/vendor/sdl3/include/SDL_init.h +++ b/vendor/sdl3/include/SDL_init.h @@ -101,7 +101,7 @@ typedef Uint32 SDL_InitFlags; * to run. * * See - * [Main callbacks in SDL3](https://wiki.libsdl.org/SDL3/README/main-functions#main-callbacks-in-sdl3) + * [Main callbacks in SDL3](https://wiki.libsdl.org/SDL3/README-main-functions#main-callbacks-in-sdl3) * for complete details. * * \since This enum is available since SDL 3.2.0. diff --git a/vendor/sdl3/include/SDL_intrin.h b/vendor/sdl3/include/SDL_intrin.h index bac6d7ad4..802c1953b 100644 --- a/vendor/sdl3/include/SDL_intrin.h +++ b/vendor/sdl3/include/SDL_intrin.h @@ -268,6 +268,7 @@ _m_prefetch(void *__P) #endif /* compiler version */ #ifdef SDL_WIKI_DOCUMENTATION_SECTION + /** * A macro to decide if the compiler supports `__attribute__((target))`. * @@ -280,12 +281,14 @@ _m_prefetch(void *__P) * \sa SDL_TARGETING */ #define SDL_HAS_TARGET_ATTRIBS - +#elif defined(__loongarch64) && defined(__GNUC__) && (__GNUC__ >= 15) +/* LoongArch requires GCC 15+ for target attribute support */ +# define SDL_HAS_TARGET_ATTRIBS #elif defined(__clang__) && defined(__has_attribute) # if __has_attribute(target) # define SDL_HAS_TARGET_ATTRIBS # endif -#elif defined(__GNUC__) && (__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) /* gcc >= 4.9 */ +#elif defined(__GNUC__) && !defined(__loongarch64) && (__GNUC__ + (__GNUC_MINOR__ >= 9) > 4) /* gcc >= 4.9 */ # define SDL_HAS_TARGET_ATTRIBS #elif defined(__ICC) && __ICC >= 1600 # define SDL_HAS_TARGET_ATTRIBS diff --git a/vendor/sdl3/include/SDL_iostream.h b/vendor/sdl3/include/SDL_iostream.h index 4ca16093e..dfe6f6a9c 100644 --- a/vendor/sdl3/include/SDL_iostream.h +++ b/vendor/sdl3/include/SDL_iostream.h @@ -111,7 +111,7 @@ typedef struct SDL_IOStreamInterface /** * Read up to `size` bytes from the data stream to the area pointed - * at by `ptr`. + * at by `ptr`. `size` will always be > 0. * * On an incomplete read, you should set `*status` to a value from the * SDL_IOStatus enum. You do not have to explicitly set this on @@ -123,7 +123,7 @@ typedef struct SDL_IOStreamInterface /** * Write exactly `size` bytes from the area pointed at by `ptr` - * to data stream. + * to data stream. `size` will always be > 0. * * On an incomplete write, you should set `*status` to a value from the * SDL_IOStatus enum. You do not have to explicitly set this on @@ -203,6 +203,8 @@ typedef struct SDL_IOStream SDL_IOStream; * - "w": Create an empty file for writing. If a file with the same name * already exists its content is erased and the file is treated as a new * empty file. + * - "wx": Create an empty file for writing. If a file with the same name + * already exists, the call fails. * - "a": Append to a file. Writing operations append data at the end of the * file. The file is created if it does not exist. * - "r+": Open a file for update both reading and writing. The file must @@ -210,6 +212,8 @@ typedef struct SDL_IOStream SDL_IOStream; * - "w+": Create an empty file for both reading and writing. If a file with * the same name already exists its content is erased and the file is * treated as a new empty file. + * - "w+x": Create an empty file for both reading and writing. If a file with + * the same name already exists, the call fails. * - "a+": Open a file for reading and appending. All writing operations are * performed at the end of the file, protecting the previous content to be * overwritten. You can reposition (fseek, rewind) the internal pointer to @@ -260,7 +264,7 @@ typedef struct SDL_IOStream SDL_IOStream; * \returns a pointer to the SDL_IOStream structure that is created or NULL on * failure; call SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. * @@ -286,8 +290,7 @@ extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromFile(const char *file, cons * certain size, for both read and write access. * * This memory buffer is not copied by the SDL_IOStream; the pointer you - * provide must remain valid until you close the stream. Closing the stream - * will not free the original buffer. + * provide must remain valid until you close the stream. * * If you need to make sure the SDL_IOStream never writes to the memory * buffer, you should use SDL_IOFromConstMem() with a read-only buffer of @@ -300,6 +303,13 @@ extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromFile(const char *file, cons * - `SDL_PROP_IOSTREAM_MEMORY_SIZE_NUMBER`: this will be the `size` parameter * that was passed to this function. * + * Additionally, the following properties are recognized: + * + * - `SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER`: if this property is set to + * a non-NULL value it will be interpreted as a function of SDL_free_func + * type and called with the passed `mem` pointer when closing the stream. By + * default it is unset, i.e., the memory will not be freed. + * * \param mem a pointer to a buffer to feed an SDL_IOStream stream. * \param size the buffer size, in bytes. * \returns a pointer to a new SDL_IOStream structure or NULL on failure; call @@ -321,6 +331,7 @@ extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromMem(void *mem, size_t size) #define SDL_PROP_IOSTREAM_MEMORY_POINTER "SDL.iostream.memory.base" #define SDL_PROP_IOSTREAM_MEMORY_SIZE_NUMBER "SDL.iostream.memory.size" +#define SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER "SDL.iostream.memory.free" /** * Use this function to prepare a read-only memory buffer for use with @@ -333,8 +344,7 @@ extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromMem(void *mem, size_t size) * without writing to the memory buffer. * * This memory buffer is not copied by the SDL_IOStream; the pointer you - * provide must remain valid until you close the stream. Closing the stream - * will not free the original buffer. + * provide must remain valid until you close the stream. * * If you need to write to a memory buffer, you should use SDL_IOFromMem() * with a writable buffer of memory instead. @@ -346,6 +356,13 @@ extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_IOFromMem(void *mem, size_t size) * - `SDL_PROP_IOSTREAM_MEMORY_SIZE_NUMBER`: this will be the `size` parameter * that was passed to this function. * + * Additionally, the following properties are recognized: + * + * - `SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER`: if this property is set to + * a non-NULL value it will be interpreted as a function of SDL_free_func + * type and called with the passed `mem` pointer when closing the stream. By + * default it is unset, i.e., the memory will not be freed. + * * \param mem a pointer to a read-only buffer to feed an SDL_IOStream stream. * \param size the buffer size, in bytes. * \returns a pointer to a new SDL_IOStream structure or NULL on failure; call @@ -452,7 +469,7 @@ extern SDL_DECLSPEC SDL_IOStream * SDLCALL SDL_OpenIO(const SDL_IOStreamInterfac * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -467,7 +484,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_CloseIO(SDL_IOStream *context); * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -487,7 +504,7 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetIOProperties(SDL_IOStream *c * \param context the SDL_IOStream to query. * \returns an SDL_IOStatus enum with the current state. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -501,7 +518,7 @@ extern SDL_DECLSPEC SDL_IOStatus SDLCALL SDL_GetIOStatus(SDL_IOStream *context); * negative error code on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -528,7 +545,7 @@ extern SDL_DECLSPEC Sint64 SDLCALL SDL_GetIOSize(SDL_IOStream *context); * \returns the final offset in the data stream after the seek or -1 on * failure; call SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -548,7 +565,7 @@ extern SDL_DECLSPEC Sint64 SDLCALL SDL_SeekIO(SDL_IOStream *context, Sint64 offs * \returns the current offset in the stream, or -1 if the information can not * be determined. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -567,13 +584,17 @@ extern SDL_DECLSPEC Sint64 SDLCALL SDL_TellIO(SDL_IOStream *context); * the stream is not at EOF, SDL_GetIOStatus() will return a different error * value and SDL_GetError() will offer a human-readable message. * + * A request for zero bytes on a valid stream will return zero immediately + * without accessing the stream, so the stream status (EOF, err, etc) will not + * change. + * * \param context a pointer to an SDL_IOStream structure. * \param ptr a pointer to a buffer to read data into. * \param size the number of bytes to read from the data source. * \returns the number of bytes read, or 0 on end of file or other failure; * call SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -596,13 +617,17 @@ extern SDL_DECLSPEC size_t SDLCALL SDL_ReadIO(SDL_IOStream *context, void *ptr, * recoverable, such as a non-blocking write that can simply be retried later, * or a fatal error. * + * A request for zero bytes on a valid stream will return zero immediately + * without accessing the stream, so the stream status (EOF, err, etc) will not + * change. + * * \param context a pointer to an SDL_IOStream structure. * \param ptr a pointer to a buffer containing data to write. * \param size the number of bytes to write. * \returns the number of bytes written, which will be less than `size` on * failure; call SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -626,7 +651,7 @@ extern SDL_DECLSPEC size_t SDLCALL SDL_WriteIO(SDL_IOStream *context, const void * \returns the number of bytes written or 0 on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -646,7 +671,7 @@ extern SDL_DECLSPEC size_t SDLCALL SDL_IOprintf(SDL_IOStream *context, SDL_PRINT * \returns the number of bytes written or 0 on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -666,7 +691,7 @@ extern SDL_DECLSPEC size_t SDLCALL SDL_IOvprintf(SDL_IOStream *context, SDL_PRIN * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -692,7 +717,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FlushIO(SDL_IOStream *context); * \returns the data or NULL on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -715,7 +740,7 @@ extern SDL_DECLSPEC void * SDLCALL SDL_LoadFile_IO(SDL_IOStream *src, size_t *da * \returns the data or NULL on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. * @@ -736,7 +761,7 @@ extern SDL_DECLSPEC void * SDLCALL SDL_LoadFile(const char *file, size_t *datasi * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. * @@ -755,7 +780,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SaveFile_IO(SDL_IOStream *src, const void * * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. * @@ -784,7 +809,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SaveFile(const char *file, const void *data * \returns true on success or false on failure or EOF; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -803,7 +828,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU8(SDL_IOStream *src, Uint8 *value); * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -823,10 +848,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS8(SDL_IOStream *src, Sint8 *value); * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -846,10 +871,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU16LE(SDL_IOStream *src, Uint16 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -869,10 +894,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS16LE(SDL_IOStream *src, Sint16 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -892,10 +917,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU16BE(SDL_IOStream *src, Uint16 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -915,10 +940,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS16BE(SDL_IOStream *src, Sint16 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -938,10 +963,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU32LE(SDL_IOStream *src, Uint32 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -961,10 +986,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS32LE(SDL_IOStream *src, Sint32 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -984,10 +1009,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU32BE(SDL_IOStream *src, Uint32 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1007,10 +1032,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS32BE(SDL_IOStream *src, Sint32 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1030,10 +1055,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU64LE(SDL_IOStream *src, Uint64 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1053,10 +1078,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS64LE(SDL_IOStream *src, Sint64 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1076,10 +1101,10 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadU64BE(SDL_IOStream *src, Uint64 *value) * * \param src the stream from which to read data. * \param value a pointer filled in with the data read. - * \returns true on successful write or false on failure; call SDL_GetError() + * \returns true on successful read or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1101,7 +1126,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadS64BE(SDL_IOStream *src, Sint64 *value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1115,7 +1140,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU8(SDL_IOStream *dst, Uint8 value); * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1134,7 +1159,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteS8(SDL_IOStream *dst, Sint8 value); * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1153,7 +1178,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU16LE(SDL_IOStream *dst, Uint16 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1171,7 +1196,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteS16LE(SDL_IOStream *dst, Sint16 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1189,7 +1214,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU16BE(SDL_IOStream *dst, Uint16 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1208,7 +1233,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteS16BE(SDL_IOStream *dst, Sint16 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1227,7 +1252,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU32LE(SDL_IOStream *dst, Uint32 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1245,7 +1270,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteS32LE(SDL_IOStream *dst, Sint32 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1263,7 +1288,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU32BE(SDL_IOStream *dst, Uint32 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1282,7 +1307,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteS32BE(SDL_IOStream *dst, Sint32 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1301,7 +1326,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU64LE(SDL_IOStream *dst, Uint64 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1319,7 +1344,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteS64LE(SDL_IOStream *dst, Sint64 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ @@ -1337,7 +1362,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteU64BE(SDL_IOStream *dst, Uint64 value) * \returns true on successful write or false on failure; call SDL_GetError() * for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety Do not use the same SDL_IOStream from two threads at once. * * \since This function is available since SDL 3.2.0. */ diff --git a/vendor/sdl3/include/SDL_joystick.h b/vendor/sdl3/include/SDL_joystick.h index d15668b66..af04f0979 100644 --- a/vendor/sdl3/include/SDL_joystick.h +++ b/vendor/sdl3/include/SDL_joystick.h @@ -29,8 +29,8 @@ * instead. * * The term "instance_id" is the current instantiation of a joystick device in - * the system, if the joystick is removed and then re-inserted then it will - * get a new instance_id, instance_id's are monotonically increasing + * the system. If the joystick is removed and then re-inserted then it will + * get a new instance_id. instance_id's are monotonically increasing * identifiers of a joystick plugged in. * * The term "player_index" is the number assigned to a player on a specific @@ -48,6 +48,14 @@ * If you would like to receive joystick updates while the application is in * the background, you should set the following hint before calling * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + * + * SDL can provide virtual joysticks as well: the app defines an imaginary + * controller with SDL_AttachVirtualJoystick(), and then can provide inputs + * for it via SDL_SetJoystickVirtualAxis(), SDL_SetJoystickVirtualButton(), + * etc. As this data is supplied, it will look like a normal joystick to SDL, + * just not backed by a hardware driver. This has been used to make unusual + * devices, like VR headset controllers, look like normal joysticks, or + * provide recording/playback of game inputs, etc. */ #ifndef SDL_joystick_h_ @@ -107,6 +115,10 @@ typedef Uint32 SDL_JoystickID; * This is by no means a complete list of everything that can be plugged into * a computer. * + * You may refer to + * [XInput Controller Types](https://learn.microsoft.com/en-us/windows/win32/xinput/xinput-and-controller-subtypes) + * table for a general understanding of each joystick type. + * * \since This enum is available since SDL 3.2.0. */ typedef enum SDL_JoystickType @@ -170,6 +182,8 @@ typedef enum SDL_JoystickConnectionState * joysticks while processing to guarantee that the joystick list won't change * and joystick and gamepad events will not be delivered. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC void SDLCALL SDL_LockJoysticks(void) SDL_ACQUIRE(SDL_joystick_lock); @@ -177,6 +191,9 @@ extern SDL_DECLSPEC void SDLCALL SDL_LockJoysticks(void) SDL_ACQUIRE(SDL_joystic /** * Unlocking for atomic access to the joystick API. * + * \threadsafety This should be called from the same thread that called + * SDL_LockJoysticks(). + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC void SDLCALL SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joystick_lock); @@ -186,6 +203,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joyst * * \returns true if a joystick is connected, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoysticks @@ -201,6 +220,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_HasJoystick(void); * call SDL_GetError() for more information. This should be freed * with SDL_free() when it is no longer needed. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_HasJoystick @@ -217,6 +238,8 @@ extern SDL_DECLSPEC SDL_JoystickID * SDLCALL SDL_GetJoysticks(int *count); * \returns the name of the selected joystick. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickName @@ -233,6 +256,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickNameForID(SDL_JoystickID * \returns the path of the selected joystick. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickPath @@ -248,6 +273,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickPathForID(SDL_JoystickID * \param instance_id the joystick instance ID. * \returns the player index of a joystick, or -1 if it's not available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickPlayerIndex @@ -264,6 +291,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetJoystickPlayerIndexForID(SDL_JoystickID i * \returns the GUID of the selected joystick. If called with an invalid * instance_id, this function returns a zero GUID. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickGUID @@ -281,6 +310,8 @@ extern SDL_DECLSPEC SDL_GUID SDLCALL SDL_GetJoystickGUIDForID(SDL_JoystickID ins * \returns the USB vendor ID of the selected joystick. If called with an * invalid instance_id, this function returns 0. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickVendor @@ -298,6 +329,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickVendorForID(SDL_JoystickID ins * \returns the USB product ID of the selected joystick. If called with an * invalid instance_id, this function returns 0. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickProduct @@ -315,6 +348,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductForID(SDL_JoystickID in * \returns the product version of the selected joystick. If called with an * invalid instance_id, this function returns 0. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickProductVersion @@ -332,6 +367,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductVersionForID(SDL_Joysti * invalid instance_id, this function returns * `SDL_JOYSTICK_TYPE_UNKNOWN`. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickType @@ -349,6 +386,8 @@ extern SDL_DECLSPEC SDL_JoystickType SDLCALL SDL_GetJoystickTypeForID(SDL_Joysti * \returns a joystick identifier or NULL on failure; call SDL_GetError() for * more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_CloseJoystick @@ -362,6 +401,8 @@ extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_OpenJoystick(SDL_JoystickID insta * \returns an SDL_Joystick on success or NULL on failure or if it hasn't been * opened yet; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_GetJoystickFromID(SDL_JoystickID instance_id); @@ -373,6 +414,8 @@ extern SDL_DECLSPEC SDL_Joystick * SDLCALL SDL_GetJoystickFromID(SDL_JoystickID * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() * for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickPlayerIndex @@ -465,13 +508,33 @@ SDL_COMPILE_TIME_ASSERT(SDL_VirtualJoystickDesc_SIZE, /** * Attach a new virtual joystick. * + * Apps can create virtual joysticks, that exist without hardware directly + * backing them, and have program-supplied inputs. Once attached, a virtual + * joystick looks like any other joystick that SDL can access. These can be + * used to make other things look like joysticks, or provide pre-recorded + * input, etc. + * + * Once attached, the app can send joystick inputs to the new virtual joystick + * using SDL_SetJoystickVirtualAxis(), etc. + * + * When no longer needed, the virtual joystick can be removed by calling + * SDL_DetachVirtualJoystick(). + * * \param desc joystick description, initialized using SDL_INIT_INTERFACE(). * \returns the joystick instance ID, or 0 on failure; call SDL_GetError() for * more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_DetachVirtualJoystick + * \sa SDL_SetJoystickVirtualAxis + * \sa SDL_SetJoystickVirtualButton + * \sa SDL_SetJoystickVirtualBall + * \sa SDL_SetJoystickVirtualHat + * \sa SDL_SetJoystickVirtualTouchpad + * \sa SDL_SetJoystickVirtualSensorData */ extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_AttachVirtualJoystick(const SDL_VirtualJoystickDesc *desc); @@ -483,6 +546,8 @@ extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_AttachVirtualJoystick(const SDL_V * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_AttachVirtualJoystick @@ -495,6 +560,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_DetachVirtualJoystick(SDL_JoystickID instan * \param instance_id the joystick instance ID. * \returns true if the joystick is virtual, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_IsJoystickVirtual(SDL_JoystickID instance_id); @@ -518,7 +585,15 @@ extern SDL_DECLSPEC bool SDLCALL SDL_IsJoystickVirtual(SDL_JoystickID instance_i * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_SetJoystickVirtualButton + * \sa SDL_SetJoystickVirtualBall + * \sa SDL_SetJoystickVirtualHat + * \sa SDL_SetJoystickVirtualTouchpad + * \sa SDL_SetJoystickVirtualSensorData */ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); @@ -538,7 +613,15 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualAxis(SDL_Joystick *joysti * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_SetJoystickVirtualAxis + * \sa SDL_SetJoystickVirtualButton + * \sa SDL_SetJoystickVirtualHat + * \sa SDL_SetJoystickVirtualTouchpad + * \sa SDL_SetJoystickVirtualSensorData */ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualBall(SDL_Joystick *joystick, int ball, Sint16 xrel, Sint16 yrel); @@ -557,7 +640,15 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualBall(SDL_Joystick *joysti * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_SetJoystickVirtualAxis + * \sa SDL_SetJoystickVirtualBall + * \sa SDL_SetJoystickVirtualHat + * \sa SDL_SetJoystickVirtualTouchpad + * \sa SDL_SetJoystickVirtualSensorData */ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualButton(SDL_Joystick *joystick, int button, bool down); @@ -576,7 +667,15 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualButton(SDL_Joystick *joys * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_SetJoystickVirtualAxis + * \sa SDL_SetJoystickVirtualButton + * \sa SDL_SetJoystickVirtualBall + * \sa SDL_SetJoystickVirtualTouchpad + * \sa SDL_SetJoystickVirtualSensorData */ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); @@ -602,7 +701,15 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualHat(SDL_Joystick *joystic * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_SetJoystickVirtualAxis + * \sa SDL_SetJoystickVirtualButton + * \sa SDL_SetJoystickVirtualBall + * \sa SDL_SetJoystickVirtualHat + * \sa SDL_SetJoystickVirtualSensorData */ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualTouchpad(SDL_Joystick *joystick, int touchpad, int finger, bool down, float x, float y, float pressure); @@ -624,7 +731,15 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickVirtualTouchpad(SDL_Joystick *jo * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_SetJoystickVirtualAxis + * \sa SDL_SetJoystickVirtualButton + * \sa SDL_SetJoystickVirtualBall + * \sa SDL_SetJoystickVirtualHat + * \sa SDL_SetJoystickVirtualTouchpad */ extern SDL_DECLSPEC bool SDLCALL SDL_SendJoystickVirtualSensorData(SDL_Joystick *joystick, SDL_SensorType type, Uint64 sensor_timestamp, const float *data, int num_values); @@ -648,6 +763,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SendJoystickVirtualSensorData(SDL_Joystick * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetJoystickProperties(SDL_Joystick *joystick); @@ -665,6 +782,8 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetJoystickProperties(SDL_Joyst * \returns the name of the selected joystick. If no name can be found, this * function returns NULL; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickNameForID @@ -678,6 +797,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickName(SDL_Joystick *joyst * \returns the path of the selected joystick. If no path can be found, this * function returns NULL; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickPathForID @@ -693,6 +814,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickPath(SDL_Joystick *joyst * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick(). * \returns the player index, or -1 if it's not available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_SetJoystickPlayerIndex @@ -708,6 +831,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetJoystickPlayerIndex(SDL_Joystick *joystic * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickPlayerIndex @@ -724,6 +849,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickPlayerIndex(SDL_Joystick *joysti * this function returns a zero GUID; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickGUIDForID @@ -739,6 +866,8 @@ extern SDL_DECLSPEC SDL_GUID SDLCALL SDL_GetJoystickGUID(SDL_Joystick *joystick) * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick(). * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickVendorForID @@ -753,6 +882,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickVendor(SDL_Joystick *joystick) * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick(). * \returns the USB product ID of the selected joystick, or 0 if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickProductForID @@ -767,6 +898,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProduct(SDL_Joystick *joystick * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick(). * \returns the product version of the selected joystick, or 0 if unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickProductVersionForID @@ -782,6 +915,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickProductVersion(SDL_Joystick *j * \returns the firmware version of the selected joystick, or 0 if * unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickFirmwareVersion(SDL_Joystick *joystick); @@ -795,6 +930,8 @@ extern SDL_DECLSPEC Uint16 SDLCALL SDL_GetJoystickFirmwareVersion(SDL_Joystick * * \returns the serial number of the selected joystick, or NULL if * unavailable. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickSerial(SDL_Joystick *joystick); @@ -805,6 +942,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetJoystickSerial(SDL_Joystick *joy * \param joystick the SDL_Joystick obtained from SDL_OpenJoystick(). * \returns the SDL_JoystickType of the selected joystick. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickTypeForID @@ -824,6 +963,8 @@ extern SDL_DECLSPEC SDL_JoystickType SDLCALL SDL_GetJoystickType(SDL_Joystick *j * \param crc16 a pointer filled in with a CRC used to distinguish different * products with the same VID/PID, or 0 if not available. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickGUIDForID @@ -837,6 +978,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_GetJoystickGUIDInfo(SDL_GUID guid, Uint16 * * \returns true if the joystick has been opened, false if it has not; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_JoystickConnected(SDL_Joystick *joystick); @@ -848,6 +991,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_JoystickConnected(SDL_Joystick *joystick); * \returns the instance ID of the specified joystick on success or 0 on * failure; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_GetJoystickID(SDL_Joystick *joystick); @@ -863,6 +1008,8 @@ extern SDL_DECLSPEC SDL_JoystickID SDLCALL SDL_GetJoystickID(SDL_Joystick *joyst * \returns the number of axis controls/number of axes on success or -1 on * failure; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickAxis @@ -884,6 +1031,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickAxes(SDL_Joystick *joystick); * \returns the number of trackballs on success or -1 on failure; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickBall @@ -900,6 +1049,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickBalls(SDL_Joystick *joystick); * \returns the number of POV hats on success or -1 on failure; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickHat @@ -916,6 +1067,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickHats(SDL_Joystick *joystick); * \returns the number of buttons on success or -1 on failure; call * SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetJoystickButton @@ -934,6 +1087,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumJoystickButtons(SDL_Joystick *joystick * * \param enabled whether to process joystick events or not. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_JoystickEventsEnabled @@ -950,6 +1105,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_SetJoystickEventsEnabled(bool enabled); * * \returns true if joystick events are being processed, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_SetJoystickEventsEnabled @@ -962,6 +1119,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_JoystickEventsEnabled(void); * This is called automatically by the event loop if any joystick events are * enabled. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC void SDLCALL SDL_UpdateJoysticks(void); @@ -984,6 +1143,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_UpdateJoysticks(void); * \returns a 16-bit signed integer representing the current position of the * axis or 0 on failure; call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetNumJoystickAxes @@ -1002,6 +1163,8 @@ extern SDL_DECLSPEC Sint16 SDLCALL SDL_GetJoystickAxis(SDL_Joystick *joystick, i * \param state upon return, the initial value is supplied here. * \returns true if this axis has any initial value, or false if not. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickAxisInitialState(SDL_Joystick *joystick, int axis, Sint16 *state); @@ -1021,6 +1184,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickAxisInitialState(SDL_Joystick *j * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetNumJoystickBalls @@ -1036,6 +1201,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickBall(SDL_Joystick *joystick, int * \param hat the hat index to get the state from; indices start at index 0. * \returns the current hat position. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetNumJoystickHats @@ -1060,6 +1227,8 @@ extern SDL_DECLSPEC Uint8 SDLCALL SDL_GetJoystickHat(SDL_Joystick *joystick, int * index 0. * \returns true if the button is pressed, false otherwise. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_GetNumJoystickButtons @@ -1083,6 +1252,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetJoystickButton(SDL_Joystick *joystick, i * \param duration_ms the duration of the rumble effect, in milliseconds. * \returns true, or false if rumble isn't supported on this joystick. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_RumbleJoystick(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); @@ -1110,6 +1281,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RumbleJoystick(SDL_Joystick *joystick, Uint * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_RumbleJoystick @@ -1132,6 +1305,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RumbleJoystickTriggers(SDL_Joystick *joysti * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); @@ -1145,6 +1320,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetJoystickLED(SDL_Joystick *joystick, Uint * \returns true on success or false on failure; call SDL_GetError() for more * information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_SendJoystickEffect(SDL_Joystick *joystick, const void *data, int size); @@ -1154,6 +1331,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SendJoystickEffect(SDL_Joystick *joystick, * * \param joystick the joystick device to close. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. * * \sa SDL_OpenJoystick @@ -1168,6 +1347,8 @@ extern SDL_DECLSPEC void SDLCALL SDL_CloseJoystick(SDL_Joystick *joystick); * `SDL_JOYSTICK_CONNECTION_INVALID` on failure; call SDL_GetError() * for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_JoystickConnectionState SDLCALL SDL_GetJoystickConnectionState(SDL_Joystick *joystick); @@ -1189,6 +1370,8 @@ extern SDL_DECLSPEC SDL_JoystickConnectionState SDLCALL SDL_GetJoystickConnectio * \returns the current battery state or `SDL_POWERSTATE_ERROR` on failure; * call SDL_GetError() for more information. * + * \threadsafety It is safe to call this function from any thread. + * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC SDL_PowerState SDLCALL SDL_GetJoystickPowerInfo(SDL_Joystick *joystick, int *percent); diff --git a/vendor/sdl3/include/SDL_keyboard.h b/vendor/sdl3/include/SDL_keyboard.h index afa77b6c2..eb984de58 100644 --- a/vendor/sdl3/include/SDL_keyboard.h +++ b/vendor/sdl3/include/SDL_keyboard.h @@ -174,8 +174,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_ResetKeyboard(void); /** * Get the current key modifier state for the keyboard. * - * \returns an OR'd combination of the modifier keys for the keyboard. See - * SDL_Keymod for details. + * \returns an OR'd combination of the modifier keys for the keyboard. * * \threadsafety It is safe to call this function from any thread. * diff --git a/vendor/sdl3/include/SDL_keycode.h b/vendor/sdl3/include/SDL_keycode.h index 61b68e794..c43660eef 100644 --- a/vendor/sdl3/include/SDL_keycode.h +++ b/vendor/sdl3/include/SDL_keycode.h @@ -45,12 +45,16 @@ * `SDLK_*` constant for those keys that do not generate characters. * * A special exception is the number keys at the top of the keyboard which map - * to SDLK_0...SDLK_9 on AZERTY layouts. + * by default to SDLK_0...SDLK_9 on AZERTY layouts. * * Keys with the `SDLK_EXTENDED_MASK` bit set do not map to a scancode or - * unicode code point. + * Unicode code point. + * + * Many common keycodes are listed below, but this list is not exhaustive. * * \since This datatype is available since SDL 3.2.0. + * + * \sa SDL_HINT_KEYCODE_OPTIONS */ typedef Uint32 SDL_Keycode; diff --git a/vendor/sdl3/include/SDL_log.h b/vendor/sdl3/include/SDL_log.h index 3fd7ec2ed..aceaabe77 100644 --- a/vendor/sdl3/include/SDL_log.h +++ b/vendor/sdl3/include/SDL_log.h @@ -206,6 +206,9 @@ extern SDL_DECLSPEC void SDLCALL SDL_ResetLogPriorities(void); * SDL_LOG_PRIORITY_WARN and higher have a prefix showing their priority, e.g. * "WARNING: ". * + * This function makes a copy of its string argument, **prefix**, so it is not + * necessary to keep the value of **prefix** alive after the call returns. + * * \param priority the SDL_LogPriority to modify. * \param prefix the prefix to use for that log priority, or NULL to use no * prefix. @@ -263,7 +266,6 @@ extern SDL_DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fm * \sa SDL_LogInfo * \sa SDL_LogMessage * \sa SDL_LogMessageV - * \sa SDL_LogTrace * \sa SDL_LogVerbose * \sa SDL_LogWarn */ diff --git a/vendor/sdl3/include/SDL_main.h b/vendor/sdl3/include/SDL_main.h index 905d78e96..ff497a4c3 100644 --- a/vendor/sdl3/include/SDL_main.h +++ b/vendor/sdl3/include/SDL_main.h @@ -47,7 +47,7 @@ * * For more information, see: * - * https://wiki.libsdl.org/SDL3/README/main-functions + * https://wiki.libsdl.org/SDL3/README-main-functions */ #ifndef SDL_main_h_ @@ -68,7 +68,7 @@ * proper entry point for the platform, and all the other magic details * needed, like manually calling SDL_SetMainReady. * - * Please see [README/main-functions](README/main-functions), (or + * Please see [README-main-functions](README-main-functions), (or * docs/README-main-functions.md in the source tree) for a more detailed * explanation. * @@ -85,7 +85,7 @@ * SDL_AppQuit. The app should not provide a `main` function in this case, and * doing so will likely cause the build to fail. * - * Please see [README/main-functions](README/main-functions), (or + * Please see [README-main-functions](README-main-functions), (or * docs/README-main-functions.md in the source tree) for a more detailed * explanation. * @@ -110,7 +110,8 @@ * Even if available, an app can define SDL_MAIN_HANDLED and provide their * own, if they know what they're doing. * - * This macro is used internally by SDL, and apps probably shouldn't rely on it. + * This macro is used internally by SDL, and apps probably shouldn't rely on + * it. * * \since This macro is available since SDL 3.2.0. */ @@ -125,10 +126,11 @@ * This macro is defined by `SDL_main.h`, which is not automatically included * by `SDL.h`. * - * Even if required, an app can define SDL_MAIN_HANDLED and provide their - * own, if they know what they're doing. + * Even if required, an app can define SDL_MAIN_HANDLED and provide their own, + * if they know what they're doing. * - * This macro is used internally by SDL, and apps probably shouldn't rely on it. + * This macro is used internally by SDL, and apps probably shouldn't rely on + * it. * * \since This macro is available since SDL 3.2.0. */ @@ -165,12 +167,10 @@ */ #define SDL_MAIN_NEEDED - #elif defined(SDL_PLATFORM_IOS) - /* On iOS SDL provides a main function that creates an application delegate - and starts the iOS application run loop. + #elif defined(SDL_PLATFORM_IOS) || defined(SDL_PLATFORM_TVOS) + /* On iOS and tvOS SDL provides a main function that creates an application delegate and starts the application run loop. - To use it, just #include SDL_main.h in the source file that contains your - main() function. + To use it, just #include in the source file that contains your main() function. See src/video/uikit/SDL_uikitappdelegate.m for more details. */ @@ -347,10 +347,10 @@ extern SDLMAIN_DECLSPEC SDL_AppResult SDLCALL SDL_AppInit(void **appstate, int a * Apps implement this function when using SDL_MAIN_USE_CALLBACKS. If using a * standard "main" function, you should not supply this. * - * This function is called repeatedly by SDL after SDL_AppInit returns 0. The - * function should operate as a single iteration the program's primary loop; - * it should update whatever state it needs and draw a new frame of video, - * usually. + * This function is called repeatedly by SDL after SDL_AppInit returns + * SDL_APP_CONTINUE. The function should operate as a single iteration the + * program's primary loop; it should update whatever state it needs and draw a + * new frame of video, usually. * * On some platforms, this function will be called at the refresh rate of the * display (which might change during the life of your app!). There are no @@ -449,8 +449,8 @@ extern SDLMAIN_DECLSPEC SDL_AppResult SDLCALL SDL_AppEvent(void *appstate, SDL_E * * This function is called once by SDL before terminating the program. * - * This function will be called no matter what, even if SDL_AppInit requests - * termination. + * This function will be called in all cases, even if SDL_AppInit requests + * termination at startup. * * This function should not go into an infinite mainloop; it should * deinitialize any resources necessary, perform whatever shutdown activities, @@ -512,7 +512,7 @@ typedef int (SDLCALL *SDL_main_func)(int argc, char *argv[]); * SDL_MAIN_USE_CALLBACKS. * * Program startup is a surprisingly complex topic. Please see - * [README/main-functions](README/main-functions), (or + * [README-main-functions](README-main-functions), (or * docs/README-main-functions.md in the source tree) for a more detailed * explanation. * @@ -553,6 +553,9 @@ extern SDL_DECLSPEC void SDLCALL SDL_SetMainReady(void); * using SDL_main (like when using SDL_MAIN_HANDLED). When using this, you do * *not* need SDL_SetMainReady(). * + * If `argv` is NULL, SDL will provide command line arguments, either by + * querying the OS for them if possible, or supplying a filler array if not. + * * \param argc the argc parameter from the application's main() function, or 0 * if the platform's main-equivalent has no argc. * \param argv the argv parameter from the application's main() function, or @@ -615,11 +618,12 @@ extern SDL_DECLSPEC int SDLCALL SDL_EnterAppMainCallbacks(int argc, char *argv[] * Most applications do not need to, and should not, call this directly; SDL * will call it when initializing the video subsystem. * + * If `name` is NULL, SDL currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` for + * the style, regardless of what is specified here. + * * \param name the window class name, in UTF-8 encoding. If NULL, SDL * currently uses "SDL_app" but this isn't guaranteed. - * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL - * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of - * what is specified here. + * \param style the value to use in WNDCLASSEX::style. * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL * will use `GetModuleHandle(NULL)` instead. * \returns true on success or false on failure; call SDL_GetError() for more diff --git a/vendor/sdl3/include/SDL_mouse.h b/vendor/sdl3/include/SDL_mouse.h index 864135d2b..d502005a7 100644 --- a/vendor/sdl3/include/SDL_mouse.h +++ b/vendor/sdl3/include/SDL_mouse.h @@ -130,6 +130,17 @@ typedef enum SDL_MouseWheelDirection SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ } SDL_MouseWheelDirection; +/** + * Animated cursor frame info. + * + * \since This struct is available since SDL 3.4.0. + */ +typedef struct SDL_CursorFrameInfo +{ + SDL_Surface *surface; /**< The surface data for this frame */ + Uint32 duration; /**< The frame duration in milliseconds (a duration of 0 is infinite) */ +} SDL_CursorFrameInfo; + /** * A bitmask of pressed mouse buttons, as reported by SDL_GetMouseState, etc. * @@ -160,6 +171,44 @@ typedef Uint32 SDL_MouseButtonFlags; #define SDL_BUTTON_X1MASK SDL_BUTTON_MASK(SDL_BUTTON_X1) #define SDL_BUTTON_X2MASK SDL_BUTTON_MASK(SDL_BUTTON_X2) +/** + * A callback used to transform mouse motion delta from raw values. + * + * This is called during SDL's handling of platform mouse events to scale the + * values of the resulting motion delta. + * + * \param userdata what was passed as `userdata` to + * SDL_SetRelativeMouseTransform(). + * \param timestamp the associated time at which this mouse motion event was + * received. + * \param window the associated window to which this mouse motion event was + * addressed. + * \param mouseID the associated mouse from which this mouse motion event was + * emitted. + * \param x pointer to a variable that will be treated as the resulting x-axis + * motion. + * \param y pointer to a variable that will be treated as the resulting y-axis + * motion. + * + * \threadsafety This callback is called by SDL's internal mouse input + * processing procedure, which may be a thread separate from the + * main event loop that is run at realtime priority. Stalling + * this thread with too much work in the callback can therefore + * potentially freeze the entire system. Care should be taken + * with proper synchronization practices when adding other side + * effects beyond mutation of the x and y values. + * + * \since This datatype is available since SDL 3.4.0. + * + * \sa SDL_SetRelativeMouseTransform + */ +typedef void (SDLCALL *SDL_MouseMotionTransformCallback)( + void *userdata, + Uint64 timestamp, + SDL_Window *window, + SDL_MouseID mouseID, + float *x, float *y +); /* Function prototypes */ @@ -380,6 +429,24 @@ extern SDL_DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window *window, */ extern SDL_DECLSPEC bool SDLCALL SDL_WarpMouseGlobal(float x, float y); +/** + * Set a user-defined function by which to transform relative mouse inputs. + * + * This overrides the relative system scale and relative speed scale hints. + * Should be called prior to enabling relative mouse mode, fails otherwise. + * + * \param callback a callback used to transform relative mouse motion, or NULL + * for default behavior. + * \param userdata a pointer that will be passed to `callback`. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetRelativeMouseTransform(SDL_MouseMotionTransformCallback callback, void *userdata); + /** * Set relative mouse mode for a window. * @@ -509,6 +576,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_CaptureMouse(bool enabled); * * \since This function is available since SDL 3.2.0. * + * \sa SDL_CreateAnimatedCursor * \sa SDL_CreateColorCursor * \sa SDL_CreateSystemCursor * \sa SDL_DestroyCursor @@ -522,15 +590,17 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor(const Uint8 *data, /** * Create a color cursor. * - * If this function is passed a surface with alternate representations, the - * surface will be interpreted as the content to be used for 100% display - * scale, and the alternate representations will be used for high DPI - * situations. For example, if the original surface is 32x32, then on a 2x - * macOS display or 200% display scale on Windows, a 64x64 version of the - * image will be used, if available. If a matching version of the image isn't - * available, the closest larger size image will be downscaled to the - * appropriate size and be used instead, if available. Otherwise, the closest - * smaller image will be upscaled and be used instead. + * If this function is passed a surface with alternate representations added + * with SDL_AddSurfaceAlternateImage(), the surface will be interpreted as the + * content to be used for 100% display scale, and the alternate + * representations will be used for high DPI situations if + * SDL_HINT_MOUSE_DPI_SCALE_CURSORS is enabled. For example, if the original + * surface is 32x32, then on a 2x macOS display or 200% display scale on + * Windows, a 64x64 version of the image will be used, if available. If a + * matching version of the image isn't available, the closest larger size + * image will be downscaled to the appropriate size and be used instead, if + * available. Otherwise, the closest smaller image will be upscaled and be + * used instead. * * \param surface an SDL_Surface structure representing the cursor image. * \param hot_x the x position of the cursor hot spot. @@ -542,6 +612,8 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateCursor(const Uint8 *data, * * \since This function is available since SDL 3.2.0. * + * \sa SDL_AddSurfaceAlternateImage + * \sa SDL_CreateAnimatedCursor * \sa SDL_CreateCursor * \sa SDL_CreateSystemCursor * \sa SDL_DestroyCursor @@ -551,6 +623,57 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_CreateColorCursor(SDL_Surface *surf int hot_x, int hot_y); +/** + * Create an animated color cursor. + * + * Animated cursors are composed of a sequential array of frames, specified as + * surfaces and durations in an array of SDL_CursorFrameInfo structs. The hot + * spot coordinates are universal to all frames, and all frames must have the + * same dimensions. + * + * Frame durations are specified in milliseconds. A duration of 0 implies an + * infinite frame time, and the animation will stop on that frame. To create a + * one-shot animation, set the duration of the last frame in the sequence to + * 0. + * + * If this function is passed surfaces with alternate representations added + * with SDL_AddSurfaceAlternateImage(), the surfaces will be interpreted as + * the content to be used for 100% display scale, and the alternate + * representations will be used for high DPI situations. For example, if the + * original surfaces are 32x32, then on a 2x macOS display or 200% display + * scale on Windows, a 64x64 version of the image will be used, if available. + * If a matching version of the image isn't available, the closest larger size + * image will be downscaled to the appropriate size and be used instead, if + * available. Otherwise, the closest smaller image will be upscaled and be + * used instead. + * + * If the underlying platform does not support animated cursors, this function + * will fall back to creating a static color cursor using the first frame in + * the sequence. + * + * \param frames an array of cursor images composing the animation. + * \param frame_count the number of frames in the sequence. + * \param hot_x the x position of the cursor hot spot. + * \param hot_y the y position of the cursor hot spot. + * \returns the new cursor on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_AddSurfaceAlternateImage + * \sa SDL_CreateCursor + * \sa SDL_CreateColorCursor + * \sa SDL_CreateSystemCursor + * \sa SDL_DestroyCursor + * \sa SDL_SetCursor + */ +extern SDL_DECLSPEC SDL_Cursor *SDLCALL SDL_CreateAnimatedCursor(SDL_CursorFrameInfo *frames, + int frame_count, + int hot_x, + int hot_y); + /** * Create a system cursor. * @@ -608,7 +731,7 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_GetCursor(void); * You do not have to call SDL_DestroyCursor() on the return value, but it is * safe to do so. * - * \returns the default cursor on success or NULL on failuree; call + * \returns the default cursor on success or NULL on failure; call * SDL_GetError() for more information. * * \threadsafety This function should only be called on the main thread. @@ -629,6 +752,7 @@ extern SDL_DECLSPEC SDL_Cursor * SDLCALL SDL_GetDefaultCursor(void); * * \since This function is available since SDL 3.2.0. * + * \sa SDL_CreateAnimatedCursor * \sa SDL_CreateColorCursor * \sa SDL_CreateCursor * \sa SDL_CreateSystemCursor diff --git a/vendor/sdl3/include/SDL_mutex.h b/vendor/sdl3/include/SDL_mutex.h index c88ec1531..024ce0b37 100644 --- a/vendor/sdl3/include/SDL_mutex.h +++ b/vendor/sdl3/include/SDL_mutex.h @@ -360,7 +360,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_LockMutex(SDL_Mutex *mutex) SDL_ACQUIRE(mut * \sa SDL_LockMutex * \sa SDL_UnlockMutex */ -extern SDL_DECLSPEC bool SDLCALL SDL_TryLockMutex(SDL_Mutex *mutex) SDL_TRY_ACQUIRE(0, mutex); +extern SDL_DECLSPEC bool SDLCALL SDL_TryLockMutex(SDL_Mutex *mutex) SDL_TRY_ACQUIRE(true, mutex); /** * Unlock the mutex. @@ -559,7 +559,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_LockRWLockForWriting(SDL_RWLock *rwlock) SD * \sa SDL_TryLockRWLockForWriting * \sa SDL_UnlockRWLock */ -extern SDL_DECLSPEC bool SDLCALL SDL_TryLockRWLockForReading(SDL_RWLock *rwlock) SDL_TRY_ACQUIRE_SHARED(0, rwlock); +extern SDL_DECLSPEC bool SDLCALL SDL_TryLockRWLockForReading(SDL_RWLock *rwlock) SDL_TRY_ACQUIRE_SHARED(true, rwlock); /** * Try to lock a read/write lock _for writing_ without blocking. @@ -589,7 +589,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_TryLockRWLockForReading(SDL_RWLock *rwlock) * \sa SDL_TryLockRWLockForReading * \sa SDL_UnlockRWLock */ -extern SDL_DECLSPEC bool SDLCALL SDL_TryLockRWLockForWriting(SDL_RWLock *rwlock) SDL_TRY_ACQUIRE(0, rwlock); +extern SDL_DECLSPEC bool SDLCALL SDL_TryLockRWLockForWriting(SDL_RWLock *rwlock) SDL_TRY_ACQUIRE(true, rwlock); /** * Unlock the read/write lock. @@ -942,7 +942,7 @@ typedef enum SDL_InitStatus * Here is an example of using this: * * ```c - * static SDL_AtomicInitState init; + * static SDL_InitState init; * * bool InitSystem(void) * { diff --git a/vendor/sdl3/include/SDL_pen.h b/vendor/sdl3/include/SDL_pen.h index 5182eeb0c..97c22e506 100644 --- a/vendor/sdl3/include/SDL_pen.h +++ b/vendor/sdl3/include/SDL_pen.h @@ -28,12 +28,37 @@ * handling, e.g., for input and drawing tablets or suitably equipped mobile / * tablet devices. * - * To get started with pens, simply handle SDL_EVENT_PEN_* events. When a pen - * starts providing input, SDL will assign it a unique SDL_PenID, which will - * remain for the life of the process, as long as the pen stays connected. + * To get started with pens, simply handle pen events: + * + * - SDL_EVENT_PEN_PROXIMITY_IN, SDL_EVENT_PEN_PROXIMITY_OUT + * (SDL_PenProximityEvent) + * - SDL_EVENT_PEN_DOWN, SDL_EVENT_PEN_UP (SDL_PenTouchEvent) + * - SDL_EVENT_PEN_MOTION (SDL_PenMotionEvent) + * - SDL_EVENT_PEN_BUTTON_DOWN, SDL_EVENT_PEN_BUTTON_UP (SDL_PenButtonEvent) + * - SDL_EVENT_PEN_AXIS (SDL_PenAxisEvent) * * Pens may provide more than simple touch input; they might have other axes, * such as pressure, tilt, rotation, etc. + * + * When a pen starts providing input, SDL will assign it a unique SDL_PenID, + * which will remain for the life of the process, as long as the pen stays + * connected. A pen leaving proximity (being taken far enough away from the + * digitizer tablet that it no longer reponds) and then coming back should + * fire proximity events, but the SDL_PenID should remain consistent. + * Unplugging the digitizer and reconnecting may cause future input to have a + * new SDL_PenID, as SDL may not know that this is the same hardware. + * + * Please note that various platforms vary wildly in how (and how well) they + * support pen input. If your pen supports some piece of functionality but SDL + * doesn't seem to, it might actually be the operating system's fault. For + * example, some platforms can manage multiple devices at the same time, but + * others will make any connected pens look like a single logical device, much + * how all USB mice connected to a computer will move the same system cursor. + * cursor. Other platforms might not support pen buttons, or the distance + * axis, etc. Very few platforms can even report _what_ functionality the pen + * supports in the first place, so best practices is to either build UI to let + * the user configure their pens, or be prepared to handle new functionality + * for a pen the first time an event is reported. */ #ifndef SDL_pen_h_ @@ -43,6 +68,7 @@ #include #include +#include /* Set up for C function definitions, even when using C++ */ #ifdef __cplusplus extern "C" { @@ -55,7 +81,12 @@ extern "C" { * * These show up in pen events when SDL sees input from them. They remain * consistent as long as SDL can recognize a tool to be the same pen; but if a - * pen physically leaves the area and returns, it might get a new ID. + * pen's digitizer table is physically detached from the computer, it might + * get a new ID when reconnected, as SDL won't know it's the same device. + * + * These IDs are only stable within a single run of a program; the next time a + * program is run, the pen's ID will likely be different, even if the hardware + * hasn't been disconnected, etc. * * \since This datatype is available since SDL 3.2.0. */ @@ -75,7 +106,6 @@ typedef Uint32 SDL_PenID; */ #define SDL_PEN_TOUCHID ((SDL_TouchID)-2) - /** * Pen input flags, as reported by various pen events' `pen_state` field. * @@ -83,13 +113,14 @@ typedef Uint32 SDL_PenID; */ typedef Uint32 SDL_PenInputFlags; -#define SDL_PEN_INPUT_DOWN (1u << 0) /**< pen is pressed down */ -#define SDL_PEN_INPUT_BUTTON_1 (1u << 1) /**< button 1 is pressed */ -#define SDL_PEN_INPUT_BUTTON_2 (1u << 2) /**< button 2 is pressed */ -#define SDL_PEN_INPUT_BUTTON_3 (1u << 3) /**< button 3 is pressed */ -#define SDL_PEN_INPUT_BUTTON_4 (1u << 4) /**< button 4 is pressed */ -#define SDL_PEN_INPUT_BUTTON_5 (1u << 5) /**< button 5 is pressed */ -#define SDL_PEN_INPUT_ERASER_TIP (1u << 30) /**< eraser tip is used */ +#define SDL_PEN_INPUT_DOWN (1u << 0) /**< pen is pressed down */ +#define SDL_PEN_INPUT_BUTTON_1 (1u << 1) /**< button 1 is pressed */ +#define SDL_PEN_INPUT_BUTTON_2 (1u << 2) /**< button 2 is pressed */ +#define SDL_PEN_INPUT_BUTTON_3 (1u << 3) /**< button 3 is pressed */ +#define SDL_PEN_INPUT_BUTTON_4 (1u << 4) /**< button 4 is pressed */ +#define SDL_PEN_INPUT_BUTTON_5 (1u << 5) /**< button 5 is pressed */ +#define SDL_PEN_INPUT_ERASER_TIP (1u << 30) /**< eraser tip is used */ +#define SDL_PEN_INPUT_IN_PROXIMITY (1u << 31) /**< pen is in proximity (since SDL 3.4.0) */ /** * Pen axis indices. @@ -118,10 +149,50 @@ typedef enum SDL_PenAxis SDL_PEN_AXIS_COUNT /**< Total known pen axis types in this version of SDL. This number may grow in future releases! */ } SDL_PenAxis; +/** + * An enum that describes the type of a pen device. + * + * A "direct" device is a pen that touches a graphic display (like an Apple + * Pencil on an iPad's screen). "Indirect" devices touch an external tablet + * surface that is connected to the machine but is not a display (like a + * lower-end Wacom tablet connected over USB). + * + * Apps may use this information to decide if they should draw a cursor; if + * the pen is touching the screen directly, a cursor doesn't make sense and + * can be in the way, but becomes necessary for indirect devices to know where + * on the display they are interacting. + * + * \since This enum is available since SDL 3.4.0. + */ +typedef enum SDL_PenDeviceType +{ + SDL_PEN_DEVICE_TYPE_INVALID = -1, /**< Not a valid pen device. */ + SDL_PEN_DEVICE_TYPE_UNKNOWN, /**< Don't know specifics of this pen. */ + SDL_PEN_DEVICE_TYPE_DIRECT, /**< Pen touches display. */ + SDL_PEN_DEVICE_TYPE_INDIRECT /**< Pen touches something that isn't the display. */ +} SDL_PenDeviceType; + +/** + * Get the device type of the given pen. + * + * Many platforms do not supply this information, so an app must always be + * prepared to get an SDL_PEN_DEVICE_TYPE_UNKNOWN result. + * + * \param instance_id the pen instance ID. + * \returns the device type of the given pen, or SDL_PEN_DEVICE_TYPE_INVALID + * on failure; call SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_PenDeviceType SDLCALL SDL_GetPenDeviceType(SDL_PenID instance_id); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } #endif +#include #endif /* SDL_pen_h_ */ diff --git a/vendor/sdl3/include/SDL_pixels.h b/vendor/sdl3/include/SDL_pixels.h index 39596c1c9..54ef954ed 100644 --- a/vendor/sdl3/include/SDL_pixels.h +++ b/vendor/sdl3/include/SDL_pixels.h @@ -451,7 +451,7 @@ typedef enum SDL_PackedLayout * expressions with side-effects here. * * \param format an SDL_PixelFormat to check. - * \returns true if the format is 10-bit, false otherwise. + * \returns true if the format is a floating point, false otherwise. * * \threadsafety It is safe to call this macro from any thread. * @@ -1096,7 +1096,7 @@ typedef enum SDL_Colorspace SDL_CHROMA_LOCATION_LEFT), */ SDL_COLORSPACE_RGB_DEFAULT = SDL_COLORSPACE_SRGB, /**< The default colorspace for RGB surfaces if no colorspace is specified */ - SDL_COLORSPACE_YUV_DEFAULT = SDL_COLORSPACE_JPEG /**< The default colorspace for YUV surfaces if no colorspace is specified */ + SDL_COLORSPACE_YUV_DEFAULT = SDL_COLORSPACE_BT601_LIMITED /**< The default colorspace for YUV surfaces if no colorspace is specified */ } SDL_Colorspace; /** @@ -1379,7 +1379,7 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormatDetails *for * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). * - * \param pixel a pixel value. + * \param pixelvalue a pixel value. * \param format a pointer to SDL_PixelFormatDetails describing the pixel * format. * \param palette an optional palette for indexed formats, may be NULL. @@ -1397,7 +1397,7 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormatDetails *for * \sa SDL_MapRGB * \sa SDL_MapRGBA */ -extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b); +extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixelvalue, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b); /** * Get RGBA values from a pixel in the specified format. @@ -1410,7 +1410,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, const SDL_PixelFormatD * If the surface has no alpha component, the alpha will be returned as 0xff * (100% opaque). * - * \param pixel a pixel value. + * \param pixelvalue a pixel value. * \param format a pointer to SDL_PixelFormatDetails describing the pixel * format. * \param palette an optional palette for indexed formats, may be NULL. @@ -1429,7 +1429,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, const SDL_PixelFormatD * \sa SDL_MapRGB * \sa SDL_MapRGBA */ -extern SDL_DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); +extern SDL_DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixelvalue, const SDL_PixelFormatDetails *format, const SDL_Palette *palette, Uint8 *r, Uint8 *g, Uint8 *b, Uint8 *a); /* Ends C function definitions when using C++ */ diff --git a/vendor/sdl3/include/SDL_platform_defines.h b/vendor/sdl3/include/SDL_platform_defines.h index 6b240a8be..7de110e03 100644 --- a/vendor/sdl3/include/SDL_platform_defines.h +++ b/vendor/sdl3/include/SDL_platform_defines.h @@ -190,7 +190,7 @@ #if TARGET_OS_VISION /** - * A preprocessor macro that is only defined if compiling for VisionOS. + * A preprocessor macro that is only defined if compiling for visionOS. * * \since This macro is available since SDL 3.2.0. * @@ -202,7 +202,7 @@ #if TARGET_OS_IPHONE /** - * A preprocessor macro that is only defined if compiling for iOS. + * A preprocessor macro that is only defined if compiling for iOS or visionOS. * * \since This macro is available since SDL 3.2.0. * @@ -317,7 +317,7 @@ #define SDL_PLATFORM_CYGWIN 1 #endif -#if defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN) +#if (defined(_WIN32) || defined(SDL_PLATFORM_CYGWIN)) && !defined(__NGAGE__) /** * A preprocessor macro that is only defined if compiling for Windows. @@ -473,4 +473,25 @@ #define SDL_PLATFORM_3DS 1 #endif +#ifdef __NGAGE__ + +/** + * A preprocessor macro that is only defined if compiling for the Nokia + * N-Gage. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_PLATFORM_NGAGE 1 +#endif + +#ifdef __GNU__ + +/** + * A preprocessor macro that is only defined if compiling for GNU/Hurd. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_PLATFORM_HURD 1 +#endif + #endif /* SDL_platform_defines_h_ */ diff --git a/vendor/sdl3/include/SDL_power.h b/vendor/sdl3/include/SDL_power.h index 694fb0924..bc2d9d53e 100644 --- a/vendor/sdl3/include/SDL_power.h +++ b/vendor/sdl3/include/SDL_power.h @@ -88,8 +88,8 @@ typedef enum SDL_PowerState * can't determine a value or there is no battery. * \param percent a pointer filled in with the percentage of battery life * left, between 0 and 100, or NULL to ignore. This will be - * filled in with -1 we can't determine a value or there is no - * battery. + * filled in with -1 when we can't determine a value or there + * is no battery. * \returns the current battery state or `SDL_POWERSTATE_ERROR` on failure; * call SDL_GetError() for more information. * diff --git a/vendor/sdl3/include/SDL_process.h b/vendor/sdl3/include/SDL_process.h index 511b2f9c5..57e3afd94 100644 --- a/vendor/sdl3/include/SDL_process.h +++ b/vendor/sdl3/include/SDL_process.h @@ -166,6 +166,9 @@ typedef enum SDL_ProcessIO * - `SDL_PROP_PROCESS_CREATE_ENVIRONMENT_POINTER`: an SDL_Environment * pointer. If this property is set, it will be the entire environment for * the process, otherwise the current environment is used. + * - `SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRING`: a UTF-8 encoded + * string representing the working directory for the process, defaults to + * the current working directory. * - `SDL_PROP_PROCESS_CREATE_STDIN_NUMBER`: an SDL_ProcessIO value describing * where standard input for the process comes from, defaults to * `SDL_PROCESS_STDIO_NULL`. @@ -192,6 +195,12 @@ typedef enum SDL_ProcessIO * run in the background. In this case the default input and output is * `SDL_PROCESS_STDIO_NULL` and the exitcode of the process is not * available, and will always be 0. + * - `SDL_PROP_PROCESS_CREATE_CMDLINE_STRING`: a string containing the program + * to run and any parameters. This string is passed directly to + * `CreateProcess` on Windows, and does nothing on other platforms. This + * property is only important if you want to start programs that does + * non-standard command-line processing, and in most cases using + * `SDL_PROP_PROCESS_CREATE_ARGS_POINTER` is sufficient. * * On POSIX platforms, wait() and waitpid(-1, ...) should not be called, and * SIGCHLD should not be ignored or handled because those would prevent SDL @@ -219,6 +228,7 @@ extern SDL_DECLSPEC SDL_Process * SDLCALL SDL_CreateProcessWithProperties(SDL_Pr #define SDL_PROP_PROCESS_CREATE_ARGS_POINTER "SDL.process.create.args" #define SDL_PROP_PROCESS_CREATE_ENVIRONMENT_POINTER "SDL.process.create.environment" +#define SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRING "SDL.process.create.working_directory" #define SDL_PROP_PROCESS_CREATE_STDIN_NUMBER "SDL.process.create.stdin_option" #define SDL_PROP_PROCESS_CREATE_STDIN_POINTER "SDL.process.create.stdin_source" #define SDL_PROP_PROCESS_CREATE_STDOUT_NUMBER "SDL.process.create.stdout_option" @@ -227,6 +237,7 @@ extern SDL_DECLSPEC SDL_Process * SDLCALL SDL_CreateProcessWithProperties(SDL_Pr #define SDL_PROP_PROCESS_CREATE_STDERR_POINTER "SDL.process.create.stderr_source" #define SDL_PROP_PROCESS_CREATE_STDERR_TO_STDOUT_BOOLEAN "SDL.process.create.stderr_to_stdout" #define SDL_PROP_PROCESS_CREATE_BACKGROUND_BOOLEAN "SDL.process.create.background" +#define SDL_PROP_PROCESS_CREATE_CMDLINE_STRING "SDL.process.create.cmdline" /** * Get the properties associated with a process. diff --git a/vendor/sdl3/include/SDL_properties.h b/vendor/sdl3/include/SDL_properties.h index 1f47d5f4a..8e87dfce4 100644 --- a/vendor/sdl3/include/SDL_properties.h +++ b/vendor/sdl3/include/SDL_properties.h @@ -59,7 +59,7 @@ extern "C" { #endif /** - * SDL properties ID + * An ID that represents a properties set. * * \since This datatype is available since SDL 3.2.0. */ @@ -80,6 +80,31 @@ typedef enum SDL_PropertyType SDL_PROPERTY_TYPE_BOOLEAN } SDL_PropertyType; +/** + * A generic property for naming things. + * + * This property is intended to be added to any SDL_PropertiesID that needs a + * generic name associated with the property set. It is not guaranteed that + * any property set will include this key, but it is convenient to have a + * standard key that any piece of code could reasonably agree to use. + * + * For example, the properties associated with an SDL_Texture might have a + * name string of "player sprites", or an SDL_AudioStream might have + * "background music", etc. This might also be useful for an SDL_IOStream to + * list the path to its asset. + * + * There is no format for the value set with this key; it is expected to be + * human-readable and informational in nature, possibly for logging or + * debugging purposes. + * + * SDL does not currently set this property on any objects it creates, but + * this may change in later versions; it is currently expected that apps and + * external libraries will take advantage of it, when appropriate. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_PROP_NAME_STRING "SDL.name" + /** * Get the global SDL properties. * @@ -119,7 +144,9 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_CreateProperties(void); * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety It is safe to call this function from any thread. + * \threadsafety It is safe to call this function from any thread. This + * function acquires simultaneous mutex locks on both the source + * and destination property sets. * * \since This function is available since SDL 3.2.0. */ diff --git a/vendor/sdl3/include/SDL_rect.h b/vendor/sdl3/include/SDL_rect.h index eb2d34a69..56eb6ffe6 100644 --- a/vendor/sdl3/include/SDL_rect.h +++ b/vendor/sdl3/include/SDL_rect.h @@ -88,8 +88,11 @@ typedef struct SDL_Rect /** - * A rectangle, with the origin at the upper left (using floating point - * values). + * A rectangle stored using floating point values. + * + * The origin of the coordinate space is in the top-left, with increasing + * values moving down and right. The properties `x` and `y` represent the + * coordinates of the top-left corner of the rectangle. * * \since This struct is available since SDL 3.2.0. * @@ -125,10 +128,10 @@ typedef struct SDL_FRect */ SDL_FORCE_INLINE void SDL_RectToFRect(const SDL_Rect *rect, SDL_FRect *frect) { - frect->x = (float)rect->x; - frect->y = (float)rect->y; - frect->w = (float)rect->w; - frect->h = (float)rect->h; + frect->x = SDL_static_cast(float, rect->x); + frect->y = SDL_static_cast(float, rect->y); + frect->w = SDL_static_cast(float, rect->w); + frect->h = SDL_static_cast(float, rect->h); } /** @@ -324,7 +327,7 @@ SDL_FORCE_INLINE bool SDL_PointInRectFloat(const SDL_FPoint *p, const SDL_FRect } /** - * Determine whether a floating point rectangle can contain any point. + * Determine whether a floating point rectangle takes no space. * * A rectangle is considered "empty" for this function if `r` is NULL, or if * `r`'s width and/or height are < 0.0f. diff --git a/vendor/sdl3/include/SDL_render.h b/vendor/sdl3/include/SDL_render.h index c9d184cc0..3d5139f59 100644 --- a/vendor/sdl3/include/SDL_render.h +++ b/vendor/sdl3/include/SDL_render.h @@ -39,9 +39,9 @@ * may also be stretched with linear interpolation. * * This API is designed to accelerate simple 2D operations. You may want more - * functionality such as polygons and particle effects and in that case you - * should use SDL's OpenGL/Direct3D support, the SDL3 GPU API, or one of the - * many good 3D engines. + * functionality such as 3D polygons and particle effects, and in that case + * you should use SDL's OpenGL/Direct3D support, the SDL3 GPU API, or one of + * the many good 3D engines. * * These functions must be called from the main thread. See this bug for * details: https://github.com/libsdl-org/SDL/issues/986 @@ -59,6 +59,7 @@ #include #include #include +#include #include /* Set up for C function definitions, even when using C++ */ @@ -73,6 +74,13 @@ extern "C" { */ #define SDL_SOFTWARE_RENDERER "software" +/** + * The name of the GPU renderer. + * + * \since This macro is available since SDL 3.4.0. + */ +#define SDL_GPU_RENDERER "gpu" + /** * Vertex structure. * @@ -97,6 +105,25 @@ typedef enum SDL_TextureAccess SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ } SDL_TextureAccess; +/** + * The addressing mode for a texture when used in SDL_RenderGeometry(). + * + * This affects how texture coordinates are interpreted outside of [0, 1] + * + * Texture wrapping is always supported for power of two texture sizes, and is + * supported for other texture sizes if + * SDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN is set to true. + * + * \since This enum is available since SDL 3.4.0. + */ +typedef enum SDL_TextureAddressMode +{ + SDL_TEXTURE_ADDRESS_INVALID = -1, + SDL_TEXTURE_ADDRESS_AUTO, /**< Wrapping is enabled if texture coordinates are outside [0, 1], this is the default */ + SDL_TEXTURE_ADDRESS_CLAMP, /**< Texture coordinates are clamped to the [0, 1] range */ + SDL_TEXTURE_ADDRESS_WRAP /**< The texture is repeated (tiled) */ +} SDL_TextureAddressMode; + /** * How the logical size is mapped to the output. * @@ -106,7 +133,7 @@ typedef enum SDL_RendererLogicalPresentation { SDL_LOGICAL_PRESENTATION_DISABLED, /**< There is no logical size in effect */ SDL_LOGICAL_PRESENTATION_STRETCH, /**< The rendered content is stretched to the output resolution */ - SDL_LOGICAL_PRESENTATION_LETTERBOX, /**< The rendered content is fit to the largest dimension and the other dimension is letterboxed with black bars */ + SDL_LOGICAL_PRESENTATION_LETTERBOX, /**< The rendered content is fit to the largest dimension and the other dimension is letterboxed with the clear color */ SDL_LOGICAL_PRESENTATION_OVERSCAN, /**< The rendered content is fit to the smallest dimension and the other dimension extends beyond the output bounds */ SDL_LOGICAL_PRESENTATION_INTEGER_SCALE /**< The rendered content is scaled up by integer multiples to fit the output resolution */ } SDL_RendererLogicalPresentation; @@ -267,6 +294,17 @@ extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window *window * present synchronized with the refresh rate. This property can take any * value that is supported by SDL_SetRenderVSync() for the renderer. * + * With the SDL GPU renderer (since SDL 3.4.0): + * + * - `SDL_PROP_RENDERER_CREATE_GPU_DEVICE_POINTER`: the device to use with the + * renderer, optional. + * - `SDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN`: the app is able to + * provide SPIR-V shaders to SDL_GPURenderState, optional. + * - `SDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN`: the app is able to + * provide DXIL shaders to SDL_GPURenderState, optional. + * - `SDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN`: the app is able to + * provide MSL shaders to SDL_GPURenderState, optional. + * * With the vulkan renderer: * * - `SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER`: the VkInstance to use @@ -303,6 +341,10 @@ extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRendererWithProperties(SDL_ #define SDL_PROP_RENDERER_CREATE_SURFACE_POINTER "SDL.renderer.create.surface" #define SDL_PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER "SDL.renderer.create.output_colorspace" #define SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER "SDL.renderer.create.present_vsync" +#define SDL_PROP_RENDERER_CREATE_GPU_DEVICE_POINTER "SDL.renderer.create.gpu.device" +#define SDL_PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN "SDL.renderer.create.gpu.shaders_spirv" +#define SDL_PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN "SDL.renderer.create.gpu.shaders_dxil" +#define SDL_PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN "SDL.renderer.create.gpu.shaders_msl" #define SDL_PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER "SDL.renderer.create.vulkan.instance" #define SDL_PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER "SDL.renderer.create.vulkan.surface" #define SDL_PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER "SDL.renderer.create.vulkan.physical_device" @@ -310,6 +352,53 @@ extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRendererWithProperties(SDL_ #define SDL_PROP_RENDERER_CREATE_VULKAN_GRAPHICS_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.create.vulkan.graphics_queue_family_index" #define SDL_PROP_RENDERER_CREATE_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER "SDL.renderer.create.vulkan.present_queue_family_index" +/** + * Create a 2D GPU rendering context. + * + * The GPU device to use is passed in as a parameter. If this is NULL, then a + * device will be created normally and can be retrieved using + * SDL_GetGPURendererDevice(). + * + * The window to use is passed in as a parameter. If this is NULL, then this + * will become an offscreen renderer. In that case, you should call + * SDL_SetRenderTarget() to setup rendering to a texture, and then call + * SDL_RenderPresent() normally to complete drawing a frame. + * + * \param device the GPU device to use with the renderer, or NULL to create a + * device. + * \param window the window where rendering is displayed, or NULL to create an + * offscreen renderer. + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \threadsafety If this function is called with a valid GPU device, it should + * be called on the thread that created the device. If this + * function is called with a valid window, it should be called + * on the thread that created the window. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_CreateRendererWithProperties + * \sa SDL_GetGPURendererDevice + * \sa SDL_CreateGPUShader + * \sa SDL_CreateGPURenderState + * \sa SDL_SetGPURenderState + */ +extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateGPURenderer(SDL_GPUDevice *device, SDL_Window *window); + +/** + * Return the GPU device used by a renderer. + * + * \param renderer the rendering context. + * \returns the GPU device used by the renderer, or NULL if the renderer is + * not a GPU renderer; call SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_GPUDevice * SDLCALL SDL_GetGPURendererDevice(SDL_Renderer *renderer); + /** * Create a 2D software rendering context for a surface. * @@ -323,7 +412,7 @@ extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRendererWithProperties(SDL_ * \returns a valid rendering context or NULL if there was an error; call * SDL_GetError() for more information. * - * \threadsafety This function should only be called on the main thread. + * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. * @@ -389,6 +478,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetRendererName(SDL_Renderer *rende * - `SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER`: a (const SDL_PixelFormat *) * array of pixel formats, terminated with SDL_PIXELFORMAT_UNKNOWN, * representing the available texture formats for this renderer. + * - `SDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN`: true if the renderer + * supports SDL_TEXTURE_ADDRESS_WRAP on non-power-of-two textures. * - `SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER`: an SDL_Colorspace value * describing the colorspace for output to the display, defaults to * SDL_COLORSPACE_SRGB. @@ -465,6 +556,7 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetRendererProperties(SDL_Rende #define SDL_PROP_RENDERER_VSYNC_NUMBER "SDL.renderer.vsync" #define SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER "SDL.renderer.max_texture_size" #define SDL_PROP_RENDERER_TEXTURE_FORMATS_POINTER "SDL.renderer.texture_formats" +#define SDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN "SDL.renderer.texture_wrapping" #define SDL_PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER "SDL.renderer.output_colorspace" #define SDL_PROP_RENDERER_HDR_ENABLED_BOOLEAN "SDL.renderer.HDR_enabled" #define SDL_PROP_RENDERER_SDR_WHITE_POINT_FLOAT "SDL.renderer.SDR_white_point" @@ -601,6 +693,9 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Rende * pixels, required * - `SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER`: the height of the texture in * pixels, required + * - `SDL_PROP_TEXTURE_CREATE_PALETTE_POINTER`: an SDL_Palette to use with + * palettized texture formats. This can be set later with + * SDL_SetTexturePalette() * - `SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT`: for HDR10 and floating * point textures, this defines the value of 100% diffuse white, with higher * values being displayed in the High Dynamic Range headroom. This defaults @@ -673,9 +768,24 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Rende * * With the vulkan renderer: * - * - `SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER`: the VkImage with layout - * VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL associated with the texture, if - * you want to wrap an existing texture. + * - `SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER`: the VkImage associated + * with the texture, if you want to wrap an existing texture. + * - `SDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER`: the VkImageLayout for the + * VkImage, defaults to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL. + * + * With the GPU renderer: + * + * - `SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER`: the SDL_GPUTexture + * associated with the texture, if you want to wrap an existing texture. + * - `SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_NUMBER`: the SDL_GPUTexture + * associated with the UV plane of an NV12 texture, if you want to wrap an + * existing texture. + * - `SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_NUMBER`: the SDL_GPUTexture + * associated with the U plane of a YUV texture, if you want to wrap an + * existing texture. + * - `SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_V_NUMBER`: the SDL_GPUTexture + * associated with the V plane of a YUV texture, if you want to wrap an + * existing texture. * * \param renderer the rendering context. * \param props the properties to use. @@ -695,29 +805,35 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Rende */ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureWithProperties(SDL_Renderer *renderer, SDL_PropertiesID props); -#define SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER "SDL.texture.create.colorspace" -#define SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER "SDL.texture.create.format" -#define SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER "SDL.texture.create.access" -#define SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER "SDL.texture.create.width" -#define SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER "SDL.texture.create.height" -#define SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT "SDL.texture.create.SDR_white_point" -#define SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT "SDL.texture.create.HDR_headroom" -#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER "SDL.texture.create.d3d11.texture" -#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER "SDL.texture.create.d3d11.texture_u" -#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER "SDL.texture.create.d3d11.texture_v" -#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER "SDL.texture.create.d3d12.texture" -#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER "SDL.texture.create.d3d12.texture_u" -#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER "SDL.texture.create.d3d12.texture_v" -#define SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER "SDL.texture.create.metal.pixelbuffer" -#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER "SDL.texture.create.opengl.texture" -#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.create.opengl.texture_uv" -#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.create.opengl.texture_u" -#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.create.opengl.texture_v" -#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.create.opengles2.texture" -#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.create.opengles2.texture_uv" -#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.create.opengles2.texture_u" -#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.create.opengles2.texture_v" -#define SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER "SDL.texture.create.vulkan.texture" +#define SDL_PROP_TEXTURE_CREATE_COLORSPACE_NUMBER "SDL.texture.create.colorspace" +#define SDL_PROP_TEXTURE_CREATE_FORMAT_NUMBER "SDL.texture.create.format" +#define SDL_PROP_TEXTURE_CREATE_ACCESS_NUMBER "SDL.texture.create.access" +#define SDL_PROP_TEXTURE_CREATE_WIDTH_NUMBER "SDL.texture.create.width" +#define SDL_PROP_TEXTURE_CREATE_HEIGHT_NUMBER "SDL.texture.create.height" +#define SDL_PROP_TEXTURE_CREATE_PALETTE_POINTER "SDL.texture.create.palette" +#define SDL_PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT "SDL.texture.create.SDR_white_point" +#define SDL_PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT "SDL.texture.create.HDR_headroom" +#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER "SDL.texture.create.d3d11.texture" +#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER "SDL.texture.create.d3d11.texture_u" +#define SDL_PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER "SDL.texture.create.d3d11.texture_v" +#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER "SDL.texture.create.d3d12.texture" +#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER "SDL.texture.create.d3d12.texture_u" +#define SDL_PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER "SDL.texture.create.d3d12.texture_v" +#define SDL_PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER "SDL.texture.create.metal.pixelbuffer" +#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER "SDL.texture.create.opengl.texture" +#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER "SDL.texture.create.opengl.texture_uv" +#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER "SDL.texture.create.opengl.texture_u" +#define SDL_PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER "SDL.texture.create.opengl.texture_v" +#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER "SDL.texture.create.opengles2.texture" +#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER "SDL.texture.create.opengles2.texture_uv" +#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER "SDL.texture.create.opengles2.texture_u" +#define SDL_PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.create.opengles2.texture_v" +#define SDL_PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER "SDL.texture.create.vulkan.texture" +#define SDL_PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER "SDL.texture.create.vulkan.layout" +#define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER "SDL.texture.create.gpu.texture" +#define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_POINTER "SDL.texture.create.gpu.texture_uv" +#define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_U_POINTER "SDL.texture.create.gpu.texture_u" +#define SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_V_POINTER "SDL.texture.create.gpu.texture_v" /** * Get the properties associated with a texture. @@ -797,6 +913,17 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureWithProperties(SDL_Re * - `SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER`: the GLenum for the * texture target (`GL_TEXTURE_2D`, `GL_TEXTURE_EXTERNAL_OES`, etc) * + * With the gpu renderer: + * + * - `SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER`: the SDL_GPUTexture associated + * with the texture + * - `SDL_PROP_TEXTURE_GPU_TEXTURE_UV_POINTER`: the SDL_GPUTexture associated + * with the UV plane of an NV12 texture + * - `SDL_PROP_TEXTURE_GPU_TEXTURE_U_POINTER`: the SDL_GPUTexture associated + * with the U plane of a YUV texture + * - `SDL_PROP_TEXTURE_GPU_TEXTURE_V_POINTER`: the SDL_GPUTexture associated + * with the V plane of a YUV texture + * * \param texture the texture to query. * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. @@ -833,6 +960,10 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetTextureProperties(SDL_Textur #define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER "SDL.texture.opengles2.texture_v" #define SDL_PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER "SDL.texture.opengles2.target" #define SDL_PROP_TEXTURE_VULKAN_TEXTURE_NUMBER "SDL.texture.vulkan.texture" +#define SDL_PROP_TEXTURE_GPU_TEXTURE_POINTER "SDL.texture.gpu.texture" +#define SDL_PROP_TEXTURE_GPU_TEXTURE_UV_POINTER "SDL.texture.gpu.texture_uv" +#define SDL_PROP_TEXTURE_GPU_TEXTURE_U_POINTER "SDL.texture.gpu.texture_u" +#define SDL_PROP_TEXTURE_GPU_TEXTURE_V_POINTER "SDL.texture.gpu.texture_v" /** * Get the renderer that created an SDL_Texture. @@ -864,6 +995,43 @@ extern SDL_DECLSPEC SDL_Renderer * SDLCALL SDL_GetRendererFromTexture(SDL_Textur */ extern SDL_DECLSPEC bool SDLCALL SDL_GetTextureSize(SDL_Texture *texture, float *w, float *h); +/** + * Set the palette used by a texture. + * + * Setting the palette keeps an internal reference to the palette, which can + * be safely destroyed afterwards. + * + * A single palette can be shared with many textures. + * + * \param texture the texture to update. + * \param palette the SDL_Palette structure to use. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_CreatePalette + * \sa SDL_GetTexturePalette + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetTexturePalette(SDL_Texture *texture, SDL_Palette *palette); + +/** + * Get the palette used by a texture. + * + * \param texture the texture to query. + * \returns a pointer to the palette used by the texture, or NULL if there is + * no palette used. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_SetTexturePalette + */ +extern SDL_DECLSPEC SDL_Palette * SDLCALL SDL_GetTexturePalette(SDL_Texture *texture); + /** * Set an additional color value multiplied into render copy operations. * @@ -1386,14 +1554,6 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *rend * specific dimensions but to make fonts look sharp, the app turns off logical * presentation while drawing text, for example. * - * For the renderer's window, letterboxing is drawn into the framebuffer if - * logical presentation is enabled during SDL_RenderPresent; be sure to - * reenable it before presenting if you were toggling it, otherwise the - * letterbox areas might have artifacts from previous frames (or artifacts - * from external overlays, etc). Letterboxing is never drawn into texture - * render targets; be sure to call SDL_RenderClear() before drawing into the - * texture so the letterboxing areas are cleared, if appropriate. - * * You can convert coordinates in an event into rendering coordinates using * SDL_ConvertEventToRenderCoordinates(). * @@ -1418,15 +1578,16 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderLogicalPresentation(SDL_Renderer * * Get device independent resolution and presentation mode for rendering. * * This function gets the width and height of the logical rendering output, or - * the output size in pixels if a logical resolution is not enabled. + * 0 if a logical resolution is not enabled. * * Each render target has its own logical presentation state. This function * gets the state for the current render target. * * \param renderer the rendering context. - * \param w an int to be filled with the width. - * \param h an int to be filled with the height. - * \param mode the presentation mode used. + * \param w an int filled with the logical presentation width. + * \param h an int filled with the logical presentation height. + * \param mode a variable filled with the logical presentation mode being + * used. * \returns true on success or false on failure; call SDL_GetError() for more * information. * @@ -1545,8 +1706,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderCoordinatesToWindow(SDL_Renderer *ren * * \param renderer the rendering context. * \param event the event to modify. - * \returns true on success or false on failure; call SDL_GetError() for more - * information. + * \returns true if the event is converted or doesn't need conversion, or + * false on failure; call SDL_GetError() for more information. * * \threadsafety This function should only be called on the main thread. * @@ -2231,9 +2392,48 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderTextureTiled(SDL_Renderer *renderer, * \since This function is available since SDL 3.2.0. * * \sa SDL_RenderTexture + * \sa SDL_RenderTexture9GridTiled */ extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture9Grid(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect); +/** + * Perform a scaled copy using the 9-grid algorithm to the current rendering + * target at subpixel precision. + * + * The pixels in the texture are split into a 3x3 grid, using the different + * corner sizes for each corner, and the sides and center making up the + * remaining pixels. The corners are then scaled using `scale` and fit into + * the corners of the destination rectangle. The sides and center are then + * tiled into place to cover the remaining destination rectangle. + * + * \param renderer the renderer which should copy parts of a texture. + * \param texture the source texture. + * \param srcrect the SDL_Rect structure representing the rectangle to be used + * for the 9-grid, or NULL to use the entire texture. + * \param left_width the width, in pixels, of the left corners in `srcrect`. + * \param right_width the width, in pixels, of the right corners in `srcrect`. + * \param top_height the height, in pixels, of the top corners in `srcrect`. + * \param bottom_height the height, in pixels, of the bottom corners in + * `srcrect`. + * \param scale the scale used to transform the corner of `srcrect` into the + * corner of `dstrect`, or 0.0f for an unscaled copy. + * \param dstrect a pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \param tileScale the scale used to transform the borders and center of + * `srcrect` into the borders and middle of `dstrect`, or + * 1.0f for an unscaled copy. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_RenderTexture + * \sa SDL_RenderTexture9Grid + */ +extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture9GridTiled(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_FRect *srcrect, float left_width, float right_width, float top_height, float bottom_height, float scale, const SDL_FRect *dstrect, float tileScale); + /** * Render a list of triangles, optionally using a texture and indices into the * vertex array Color and alpha modulation is done per vertex @@ -2255,6 +2455,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderTexture9Grid(SDL_Renderer *renderer, * \since This function is available since SDL 3.2.0. * * \sa SDL_RenderGeometryRaw + * \sa SDL_SetRenderTextureAddressMode */ extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, SDL_Texture *texture, @@ -2287,6 +2488,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, * \since This function is available since SDL 3.2.0. * * \sa SDL_RenderGeometry + * \sa SDL_SetRenderTextureAddressMode */ extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, SDL_Texture *texture, @@ -2296,6 +2498,44 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, int num_vertices, const void *indices, int num_indices, int size_indices); +/** + * Set the texture addressing mode used in SDL_RenderGeometry(). + * + * \param renderer the rendering context. + * \param u_mode the SDL_TextureAddressMode to use for horizontal texture + * coordinates in SDL_RenderGeometry(). + * \param v_mode the SDL_TextureAddressMode to use for vertical texture + * coordinates in SDL_RenderGeometry(). + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_RenderGeometry + * \sa SDL_RenderGeometryRaw + * \sa SDL_GetRenderTextureAddressMode + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetRenderTextureAddressMode(SDL_Renderer *renderer, SDL_TextureAddressMode u_mode, SDL_TextureAddressMode v_mode); + +/** + * Get the texture addressing mode used in SDL_RenderGeometry(). + * + * \param renderer the rendering context. + * \param u_mode a pointer filled in with the SDL_TextureAddressMode to use + * for horizontal texture coordinates in SDL_RenderGeometry(), + * may be NULL. + * \param v_mode a pointer filled in with the SDL_TextureAddressMode to use + * for vertical texture coordinates in SDL_RenderGeometry(), may + * be NULL. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_SetRenderTextureAddressMode + */ +extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderTextureAddressMode(SDL_Renderer *renderer, SDL_TextureAddressMode *u_mode, SDL_TextureAddressMode *v_mode); + /** * Read pixels from the current rendering target. * @@ -2347,8 +2587,7 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_RenderReadPixels(SDL_Renderer *ren * should not be done; you are only required to change back the rendering * target to default via `SDL_SetRenderTarget(renderer, NULL)` afterwards, as * textures by themselves do not have a concept of backbuffers. Calling - * SDL_RenderPresent while rendering to a texture will still update the screen - * with any current drawing that has been done _to the window itself_. + * SDL_RenderPresent while rendering to a texture will fail. * * \param renderer the rendering context. * \returns true on success or false on failure; call SDL_GetError() for more @@ -2577,8 +2816,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetRenderVSync(SDL_Renderer *renderer, int * Among these limitations: * * - It accepts UTF-8 strings, but will only renders ASCII characters. - * - It has a single, tiny size (8x8 pixels). One can use logical presentation - * or scaling to adjust it, but it will be blurry. + * - It has a single, tiny size (8x8 pixels). You can use logical presentation + * or SDL_SetRenderScale() to adjust it. * - It uses a simple, hardcoded bitmap font. It does not allow different font * selections and it does not support truetype, for proper scaling. * - It does no word-wrapping and does not treat newline characters as a line @@ -2612,7 +2851,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugText(SDL_Renderer *renderer, flo * Draw debug text to an SDL_Renderer. * * This function will render a printf()-style format string to a renderer. - * Note that this is a convinence function for debugging, with severe + * Note that this is a convenience function for debugging, with severe * limitations, and is not intended to be used for production apps and games. * * For the full list of limitations and other useful information, see @@ -2636,6 +2875,148 @@ extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugText(SDL_Renderer *renderer, flo */ extern SDL_DECLSPEC bool SDLCALL SDL_RenderDebugTextFormat(SDL_Renderer *renderer, float x, float y, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(4); +/** + * Set default scale mode for new textures for given renderer. + * + * When a renderer is created, scale_mode defaults to SDL_SCALEMODE_LINEAR. + * + * \param renderer the renderer to update. + * \param scale_mode the scale mode to change to for new textures. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_GetDefaultTextureScaleMode + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetDefaultTextureScaleMode(SDL_Renderer *renderer, SDL_ScaleMode scale_mode); + +/** + * Get default texture scale mode of the given renderer. + * + * \param renderer the renderer to get data from. + * \param scale_mode a SDL_ScaleMode filled with current default scale mode. + * See SDL_SetDefaultTextureScaleMode() for the meaning of + * the value. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_SetDefaultTextureScaleMode + */ +extern SDL_DECLSPEC bool SDLCALL SDL_GetDefaultTextureScaleMode(SDL_Renderer *renderer, SDL_ScaleMode *scale_mode); + +/** + * A structure specifying the parameters of a GPU render state. + * + * \since This struct is available since SDL 3.4.0. + * + * \sa SDL_CreateGPURenderState + */ +typedef struct SDL_GPURenderStateCreateInfo +{ + SDL_GPUShader *fragment_shader; /**< The fragment shader to use when this render state is active */ + + Sint32 num_sampler_bindings; /**< The number of additional fragment samplers to bind when this render state is active */ + const SDL_GPUTextureSamplerBinding *sampler_bindings; /**< Additional fragment samplers to bind when this render state is active */ + + Sint32 num_storage_textures; /**< The number of storage textures to bind when this render state is active */ + SDL_GPUTexture *const *storage_textures; /**< Storage textures to bind when this render state is active */ + + Sint32 num_storage_buffers; /**< The number of storage buffers to bind when this render state is active */ + SDL_GPUBuffer *const *storage_buffers; /**< Storage buffers to bind when this render state is active */ + + SDL_PropertiesID props; /**< A properties ID for extensions. Should be 0 if no extensions are needed. */ +} SDL_GPURenderStateCreateInfo; + +/** + * A custom GPU render state. + * + * \since This struct is available since SDL 3.4.0. + * + * \sa SDL_CreateGPURenderState + * \sa SDL_SetGPURenderStateFragmentUniforms + * \sa SDL_SetGPURenderState + * \sa SDL_DestroyGPURenderState + */ +typedef struct SDL_GPURenderState SDL_GPURenderState; + +/** + * Create custom GPU render state. + * + * \param renderer the renderer to use. + * \param createinfo a struct describing the GPU render state to create. + * \returns a custom GPU render state or NULL on failure; call SDL_GetError() + * for more information. + * + * \threadsafety This function should be called on the thread that created the + * renderer. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_SetGPURenderStateFragmentUniforms + * \sa SDL_SetGPURenderState + * \sa SDL_DestroyGPURenderState + */ +extern SDL_DECLSPEC SDL_GPURenderState * SDLCALL SDL_CreateGPURenderState(SDL_Renderer *renderer, SDL_GPURenderStateCreateInfo *createinfo); + +/** + * Set fragment shader uniform variables in a custom GPU render state. + * + * The data is copied and will be pushed using + * SDL_PushGPUFragmentUniformData() during draw call execution. + * + * \param state the state to modify. + * \param slot_index the fragment uniform slot to push data to. + * \param data client data to write. + * \param length the length of the data to write. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should be called on the thread that created the + * renderer. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetGPURenderStateFragmentUniforms(SDL_GPURenderState *state, Uint32 slot_index, const void *data, Uint32 length); + +/** + * Set custom GPU render state. + * + * This function sets custom GPU render state for subsequent draw calls. This + * allows using custom shaders with the GPU renderer. + * + * \param renderer the renderer to use. + * \param state the state to to use, or NULL to clear custom GPU render state. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should be called on the thread that created the + * renderer. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetGPURenderState(SDL_Renderer *renderer, SDL_GPURenderState *state); + +/** + * Destroy custom GPU render state. + * + * \param state the state to destroy. + * + * \threadsafety This function should be called on the thread that created the + * renderer. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_CreateGPURenderState + */ +extern SDL_DECLSPEC void SDLCALL SDL_DestroyGPURenderState(SDL_GPURenderState *state); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/vendor/sdl3/include/SDL_revision.h b/vendor/sdl3/include/SDL_revision.h index 9fb9937d9..d4e850ece 100644 --- a/vendor/sdl3/include/SDL_revision.h +++ b/vendor/sdl3/include/SDL_revision.h @@ -1,22 +1,22 @@ /* - Simple DirectMedia Layer - Copyright (C) 1997-2025 Sam Lantinga + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. */ /* WIKI CATEGORY: Version */ @@ -44,13 +44,16 @@ * clue in debugging forensics and not something the app will parse in any * way. * - * \since This macro is available since SDL 3.0.0. + * SDL_revision.h must be included in your program explicitly if you want + * access to the SDL_REVISION constant. + * + * \since This macro is available since SDL 3.2.0. */ #define SDL_REVISION "Some arbitrary string decided at SDL build time" #elif defined(SDL_VENDOR_INFO) -#define SDL_REVISION "release-3.2.16-0-gc9a6709bd (" SDL_VENDOR_INFO ")" +#define SDL_REVISION SDL_VENDOR_INFO #else -#define SDL_REVISION "release-3.2.16-0-gc9a6709bd" +#define SDL_REVISION "" #endif #endif /* SDL_revision_h_ */ diff --git a/vendor/sdl3/include/SDL_scancode.h b/vendor/sdl3/include/SDL_scancode.h index 9650a6cfe..6e9be47e6 100644 --- a/vendor/sdl3/include/SDL_scancode.h +++ b/vendor/sdl3/include/SDL_scancode.h @@ -208,7 +208,7 @@ typedef enum SDL_Scancode SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO * keyboards have over ANSI ones, - * located between left shift and Y. + * located between left shift and Z. * Produces GRAVE ACCENT and TILDE in a * US or UK Mac layout, REVERSE SOLIDUS * (backslash) and VERTICAL LINE in a diff --git a/vendor/sdl3/include/SDL_sensor.h b/vendor/sdl3/include/SDL_sensor.h index b220f0538..43366f135 100644 --- a/vendor/sdl3/include/SDL_sensor.h +++ b/vendor/sdl3/include/SDL_sensor.h @@ -138,7 +138,8 @@ typedef enum SDL_SensorType SDL_SENSOR_ACCEL_L, /**< Accelerometer for left Joy-Con controller and Wii nunchuk */ SDL_SENSOR_GYRO_L, /**< Gyroscope for left Joy-Con controller */ SDL_SENSOR_ACCEL_R, /**< Accelerometer for right Joy-Con controller */ - SDL_SENSOR_GYRO_R /**< Gyroscope for right Joy-Con controller */ + SDL_SENSOR_GYRO_R, /**< Gyroscope for right Joy-Con controller */ + SDL_SENSOR_COUNT } SDL_SensorType; diff --git a/vendor/sdl3/include/SDL_stdinc.h b/vendor/sdl3/include/SDL_stdinc.h index 7df253fec..f15ab727b 100644 --- a/vendor/sdl3/include/SDL_stdinc.h +++ b/vendor/sdl3/include/SDL_stdinc.h @@ -49,10 +49,37 @@ #include #include -#include #include #include +/* Most everything except Visual Studio 2008 and earlier has stdint.h now */ +#if defined(_MSC_VER) && (_MSC_VER < 1600) +typedef signed __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef signed __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef signed __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#ifndef _INTPTR_T_DEFINED +#ifdef _WIN64 +typedef __int64 intptr_t; +#else +typedef int intptr_t; +#endif +#endif +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +typedef unsigned __int64 uintptr_t; +#else +typedef unsigned int uintptr_t; +#endif +#endif +#else +#include +#endif + #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ defined(SDL_INCLUDE_INTTYPES_H) #include @@ -492,7 +519,7 @@ typedef uint64_t Uint64; * and SDL_SECONDS_TO_NS(), and between Windows FILETIME values with * SDL_TimeToWindows() and SDL_TimeFromWindows(). * - * \since This macro is available since SDL 3.2.0. + * \since This datatype is available since SDL 3.2.0. * * \sa SDL_MAX_SINT64 * \sa SDL_MIN_SINT64 @@ -1164,7 +1191,7 @@ typedef struct SDL_alignment_test void *b; } SDL_alignment_test; SDL_COMPILE_TIME_ASSERT(struct_alignment, sizeof(SDL_alignment_test) == (2 * sizeof(void *))); -SDL_COMPILE_TIME_ASSERT(two_s_complement, (int)~(int)0 == (int)(-1)); +SDL_COMPILE_TIME_ASSERT(two_s_complement, SDL_static_cast(int, ~SDL_static_cast(int, 0)) == SDL_static_cast(int, -1)); #endif /* DOXYGEN_SHOULD_IGNORE_THIS */ /** \endcond */ @@ -2119,7 +2146,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_abs(int x); * * \param x the first value to compare. * \param y the second value to compare. - * \returns the lesser of `x` and `y`. + * \returns the greater of `x` and `y`. * * \threadsafety It is safe to call this macro from any thread. * @@ -2640,7 +2667,7 @@ extern SDL_DECLSPEC void * SDLCALL SDL_memset4(void *dst, Uint32 val, size_t dwo * \since This macro is available since SDL 3.2.0. * * \sa SDL_zero - * \sa SDL_zeroa + * \sa SDL_zerop */ #define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) @@ -3426,7 +3453,7 @@ extern SDL_DECLSPEC size_t SDLCALL SDL_utf8strnlen(const char *str, size_t bytes * Convert an integer into a string. * * This requires a radix to specified for string format. Specifying 10 - * produces a decimal number, 16 hexidecimal, etc. Must be in the range of 2 + * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 * to 36. * * Note that this function will overflow a buffer if `str` is not large enough @@ -3454,7 +3481,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_itoa(int value, char *str, int radix); * Convert an unsigned integer into a string. * * This requires a radix to specified for string format. Specifying 10 - * produces a decimal number, 16 hexidecimal, etc. Must be in the range of 2 + * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 * to 36. * * Note that this function will overflow a buffer if `str` is not large enough @@ -3482,7 +3509,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_uitoa(unsigned int value, char *str, int * Convert a long integer into a string. * * This requires a radix to specified for string format. Specifying 10 - * produces a decimal number, 16 hexidecimal, etc. Must be in the range of 2 + * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 * to 36. * * Note that this function will overflow a buffer if `str` is not large enough @@ -3510,7 +3537,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_ltoa(long value, char *str, int radix); * Convert an unsigned long integer into a string. * * This requires a radix to specified for string format. Specifying 10 - * produces a decimal number, 16 hexidecimal, etc. Must be in the range of 2 + * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 * to 36. * * Note that this function will overflow a buffer if `str` is not large enough @@ -3540,7 +3567,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_ultoa(unsigned long value, char *str, int * Convert a long long integer into a string. * * This requires a radix to specified for string format. Specifying 10 - * produces a decimal number, 16 hexidecimal, etc. Must be in the range of 2 + * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 * to 36. * * Note that this function will overflow a buffer if `str` is not large enough @@ -3568,7 +3595,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_lltoa(long long value, char *str, int rad * Convert an unsigned long long integer into a string. * * This requires a radix to specified for string format. Specifying 10 - * produces a decimal number, 16 hexidecimal, etc. Must be in the range of 2 + * produces a decimal number, 16 hexadecimal, etc. Must be in the range of 2 * to 36. * * Note that this function will overflow a buffer if `str` is not large enough @@ -3923,7 +3950,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str extern SDL_DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t maxlen); /** - * Searches a string for the first occurence of any character contained in a + * Searches a string for the first occurrence of any character contained in a * breakset, and returns a pointer from the string to that character. * * \param str The null-terminated string to be searched. Must not be NULL, and @@ -3931,7 +3958,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *st * \param breakset A null-terminated string containing the list of characters * to look for. Must not be NULL, and must not overlap with * `str`. - * \returns A pointer to the location, in str, of the first occurence of a + * \returns A pointer to the location, in str, of the first occurrence of a * character present in the breakset, or NULL if none is found. * * \threadsafety It is safe to call this function from any thread. @@ -4722,7 +4749,7 @@ extern SDL_DECLSPEC float SDLCALL SDL_atan2f(float y, float x); /** * Compute the ceiling of `x`. * - * The ceiling of `x` is the smallest integer `y` such that `y > x`, i.e `x` + * The ceiling of `x` is the smallest integer `y` such that `y >= x`, i.e `x` * rounded up to the nearest integer. * * Domain: `-INF <= x <= INF` @@ -4750,7 +4777,7 @@ extern SDL_DECLSPEC double SDLCALL SDL_ceil(double x); /** * Compute the ceiling of `x`. * - * The ceiling of `x` is the smallest integer `y` such that `y > x`, i.e `x` + * The ceiling of `x` is the smallest integer `y` such that `y >= x`, i.e `x` * rounded up to the nearest integer. * * Domain: `-INF <= x <= INF` @@ -4992,7 +5019,7 @@ extern SDL_DECLSPEC float SDLCALL SDL_fabsf(float x); /** * Compute the floor of `x`. * - * The floor of `x` is the largest integer `y` such that `y > x`, i.e `x` + * The floor of `x` is the largest integer `y` such that `y <= x`, i.e `x` * rounded down to the nearest integer. * * Domain: `-INF <= x <= INF` @@ -5020,7 +5047,7 @@ extern SDL_DECLSPEC double SDLCALL SDL_floor(double x); /** * Compute the floor of `x`. * - * The floor of `x` is the largest integer `y` such that `y > x`, i.e `x` + * The floor of `x` is the largest integer `y` such that `y <= x`, i.e `x` * rounded down to the nearest integer. * * Domain: `-INF <= x <= INF` @@ -5821,7 +5848,7 @@ extern SDL_DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); * This function converts text between encodings, reading from and writing to * a buffer. * - * It returns the number of succesful conversions on success. On error, + * It returns the number of successful conversions on success. On error, * SDL_ICONV_E2BIG is returned when the output buffer is too small, or * SDL_ICONV_EILSEQ is returned when an invalid input sequence is encountered, * or SDL_ICONV_EINVAL is returned when an incomplete input sequence is @@ -5921,7 +5948,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, * * \since This macro is available since SDL 3.2.0. */ -#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) SDL_reinterpret_cast(Uint16 *, SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1)) /** * Convert a UTF-8 string to UCS-4. @@ -5935,7 +5962,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, * * \since This macro is available since SDL 3.2.0. */ -#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) SDL_reinterpret_cast(Uint32 *, SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)) /** * Convert a wchar_t string to UTF-8. @@ -5949,7 +5976,7 @@ extern SDL_DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, * * \since This macro is available since SDL 3.2.0. */ -#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) +#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", SDL_reinterpret_cast(const char *, S), (SDL_wcslen(S)+1)*sizeof(wchar_t)) /* force builds using Clang's static analysis tools to use literal C runtime @@ -5974,6 +6001,10 @@ size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); #endif +#if !defined(HAVE_STRTOK_R) && !defined(strtok_r) +char *strtok_r(char *str, const char *delim, char **saveptr); +#endif + #ifndef _WIN32 /* strdup is not ANSI but POSIX, and its prototype might be hidden... */ /* not for windows: might conflict with string.h where strdup may have diff --git a/vendor/sdl3/include/SDL_storage.h b/vendor/sdl3/include/SDL_storage.h index 6837ebaac..1b20b34ad 100644 --- a/vendor/sdl3/include/SDL_storage.h +++ b/vendor/sdl3/include/SDL_storage.h @@ -334,6 +334,10 @@ typedef struct SDL_Storage SDL_Storage; /** * Opens up a read-only container for the application's filesystem. * + * By default, SDL_OpenTitleStorage uses the generic storage implementation. + * When the path override is not provided, the generic implementation will use + * the output of SDL_GetBasePath as the base path. + * * \param override a path to override the backend's default title root. * \param props a property list that may contain backend-specific information. * \returns a title storage container on success or NULL on failure; call diff --git a/vendor/sdl3/include/SDL_surface.h b/vendor/sdl3/include/SDL_surface.h index 15fce042f..717aeb89a 100644 --- a/vendor/sdl3/include/SDL_surface.h +++ b/vendor/sdl3/include/SDL_surface.h @@ -29,12 +29,16 @@ * provides a reasonable toolbox for transforming the data, including copying * between surfaces, filling rectangles in the image data, etc. * - * There is also a simple .bmp loader, SDL_LoadBMP(). SDL itself does not - * provide loaders for various other file formats, but there are several - * excellent external libraries that do, including its own satellite library, - * SDL_image: + * There is also a simple .bmp loader, SDL_LoadBMP(), and a simple .png + * loader, SDL_LoadPNG(). SDL itself does not provide loaders for other file + * formats, but there are several excellent external libraries that do, + * including its own satellite library, + * [SDL_image](https://wiki.libsdl.org/SDL3_image) + * . * - * https://github.com/libsdl-org/SDL_image + * In general these functions are thread-safe in that they can be called on + * different threads with different surfaces. You should not try to modify any + * surface from two threads simultaneously. */ #ifndef SDL_surface_h_ @@ -83,8 +87,9 @@ typedef Uint32 SDL_SurfaceFlags; typedef enum SDL_ScaleMode { SDL_SCALEMODE_INVALID = -1, - SDL_SCALEMODE_NEAREST, /**< nearest pixel sampling */ - SDL_SCALEMODE_LINEAR /**< linear filtering */ + SDL_SCALEMODE_NEAREST, /**< nearest pixel sampling */ + SDL_SCALEMODE_LINEAR, /**< linear filtering */ + SDL_SCALEMODE_PIXELART /**< nearest pixel sampling with improved scaling for pixel art, available since SDL 3.4.0 */ } SDL_ScaleMode; /** @@ -94,9 +99,10 @@ typedef enum SDL_ScaleMode */ typedef enum SDL_FlipMode { - SDL_FLIP_NONE, /**< Do not flip */ - SDL_FLIP_HORIZONTAL, /**< flip horizontally */ - SDL_FLIP_VERTICAL /**< flip vertically */ + SDL_FLIP_NONE, /**< Do not flip */ + SDL_FLIP_HORIZONTAL, /**< flip horizontally */ + SDL_FLIP_VERTICAL, /**< flip vertically */ + SDL_FLIP_HORIZONTAL_AND_VERTICAL = (SDL_FLIP_HORIZONTAL | SDL_FLIP_VERTICAL) /**< flip horizontally and vertically (not a diagonal flip) */ } SDL_FlipMode; #ifndef SDL_INTERNAL @@ -235,6 +241,12 @@ extern SDL_DECLSPEC void SDLCALL SDL_DestroySurface(SDL_Surface *surface); * left edge of the image, if this surface is being used as a cursor. * - `SDL_PROP_SURFACE_HOTSPOT_Y_NUMBER`: the hotspot pixel offset from the * top edge of the image, if this surface is being used as a cursor. + * - `SDL_PROP_SURFACE_ROTATION_FLOAT`: the number of degrees a surface's data + * is meant to be rotated clockwise to make the image right-side up. Default + * 0. This is used by the camera API, if a mobile device is oriented + * differently than what its camera provides (i.e. - the camera always + * provides portrait images but the phone is being held in landscape + * orientation). Since SDL 3.4.0. * * \param surface the SDL_Surface structure to query. * \returns a valid property ID on success or 0 on failure; call @@ -251,6 +263,7 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetSurfaceProperties(SDL_Surfac #define SDL_PROP_SURFACE_TONEMAP_OPERATOR_STRING "SDL.surface.tonemap" #define SDL_PROP_SURFACE_HOTSPOT_X_NUMBER "SDL.surface.hotspot.x" #define SDL_PROP_SURFACE_HOTSPOT_Y_NUMBER "SDL.surface.hotspot.y" +#define SDL_PROP_SURFACE_ROTATION_FLOAT "SDL.surface.rotation" /** * Set the colorspace used by a surface. @@ -264,7 +277,8 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetSurfaceProperties(SDL_Surfac * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -283,7 +297,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetSurfaceColorspace(SDL_Surface *surface, * \returns the colorspace used by the surface, or SDL_COLORSPACE_UNKNOWN if * the surface is NULL. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -313,7 +328,8 @@ extern SDL_DECLSPEC SDL_Colorspace SDLCALL SDL_GetSurfaceColorspace(SDL_Surface * the surface didn't have an index format); call SDL_GetError() for * more information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -324,6 +340,9 @@ extern SDL_DECLSPEC SDL_Palette * SDLCALL SDL_CreateSurfacePalette(SDL_Surface * /** * Set the palette used by a surface. * + * Setting the palette keeps an internal reference to the palette, which can + * be safely destroyed afterwards. + * * A single palette can be shared with many surfaces. * * \param surface the SDL_Surface structure to update. @@ -331,7 +350,8 @@ extern SDL_DECLSPEC SDL_Palette * SDLCALL SDL_CreateSurfacePalette(SDL_Surface * * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -372,7 +392,8 @@ extern SDL_DECLSPEC SDL_Palette * SDLCALL SDL_GetSurfacePalette(SDL_Surface *sur * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -415,7 +436,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SurfaceHasAlternateImages(SDL_Surface *surf * failure; call SDL_GetError() for more information. This should be * freed with SDL_free() when it is no longer needed. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -433,7 +455,8 @@ extern SDL_DECLSPEC SDL_Surface ** SDLCALL SDL_GetSurfaceImages(SDL_Surface *sur * * \param surface the SDL_Surface structure to update. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -459,9 +482,10 @@ extern SDL_DECLSPEC void SDLCALL SDL_RemoveSurfaceAlternateImages(SDL_Surface *s * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. The locking referred to by - * this function is making the pixels available for direct - * access, not thread-safe locking. + * \threadsafety This function can be called on different threads with + * different surfaces. The locking referred to by this function + * is making the pixels available for direct access, not + * thread-safe locking. * * \since This function is available since SDL 3.2.0. * @@ -485,6 +509,46 @@ extern SDL_DECLSPEC bool SDLCALL SDL_LockSurface(SDL_Surface *surface); */ extern SDL_DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface *surface); +/** + * Load a BMP or PNG image from a seekable SDL data stream. + * + * The new surface should be freed with SDL_DestroySurface(). Not doing so + * will result in a memory leak. + * + * \param src the data stream for the surface. + * \param closeio if true, calls SDL_CloseIO() on `src` before returning, even + * in the case of an error. + * \returns a pointer to a new SDL_Surface structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_DestroySurface + * \sa SDL_LoadSurface + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_LoadSurface_IO(SDL_IOStream *src, bool closeio); + +/** + * Load a BMP or PNG image from a file. + * + * The new surface should be freed with SDL_DestroySurface(). Not doing so + * will result in a memory leak. + * + * \param file the file to load. + * \returns a pointer to a new SDL_Surface structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_DestroySurface + * \sa SDL_LoadSurface_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_LoadSurface(const char *file); + /** * Load a BMP image from a seekable SDL data stream. * @@ -543,7 +607,8 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP(const char *file); * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -553,7 +618,7 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_LoadBMP(const char *file); extern SDL_DECLSPEC bool SDLCALL SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); /** - * Save a surface to a file. + * Save a surface to a file in BMP format. * * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the * BMP directly. Other RGB formats with 8-bit or higher get converted to a @@ -566,7 +631,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStre * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -575,6 +641,94 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SaveBMP_IO(SDL_Surface *surface, SDL_IOStre */ extern SDL_DECLSPEC bool SDLCALL SDL_SaveBMP(SDL_Surface *surface, const char *file); +/** + * Load a PNG image from a seekable SDL data stream. + * + * This is intended as a convenience function for loading images from trusted + * sources. If you want to load arbitrary images you should use libpng or + * another image loading library designed with security in mind. + * + * The new surface should be freed with SDL_DestroySurface(). Not doing so + * will result in a memory leak. + * + * \param src the data stream for the surface. + * \param closeio if true, calls SDL_CloseIO() on `src` before returning, even + * in the case of an error. + * \returns a pointer to a new SDL_Surface structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_DestroySurface + * \sa SDL_LoadPNG + * \sa SDL_SavePNG_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_LoadPNG_IO(SDL_IOStream *src, bool closeio); + +/** + * Load a PNG image from a file. + * + * This is intended as a convenience function for loading images from trusted + * sources. If you want to load arbitrary images you should use libpng or + * another image loading library designed with security in mind. + * + * The new surface should be freed with SDL_DestroySurface(). Not doing so + * will result in a memory leak. + * + * \param file the PNG file to load. + * \returns a pointer to a new SDL_Surface structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \threadsafety It is safe to call this function from any thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_DestroySurface + * \sa SDL_LoadPNG_IO + * \sa SDL_SavePNG + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_LoadPNG(const char *file); + +/** + * Save a surface to a seekable SDL data stream in PNG format. + * + * \param surface the SDL_Surface structure containing the image to be saved. + * \param dst a data stream to save to. + * \param closeio if true, calls SDL_CloseIO() on `dst` before returning, even + * in the case of an error. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function can be called on different threads with + * different surfaces. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_LoadPNG_IO + * \sa SDL_SavePNG + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SavePNG_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); + +/** + * Save a surface to a file in PNG format. + * + * \param surface the SDL_Surface structure containing the image to be saved. + * \param file a file to save to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function can be called on different threads with + * different surfaces. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_LoadPNG + * \sa SDL_SavePNG_IO + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SavePNG(SDL_Surface *surface, const char *file); + /** * Set the RLE acceleration hint for a surface. * @@ -586,7 +740,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SaveBMP(SDL_Surface *surface, const char *f * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -628,7 +783,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SurfaceHasRLE(SDL_Surface *surface); * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -693,7 +849,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetSurfaceColorKey(SDL_Surface *surface, Ui * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -713,7 +870,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetSurfaceColorMod(SDL_Surface *surface, Ui * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -735,7 +893,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetSurfaceColorMod(SDL_Surface *surface, Ui * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -773,7 +932,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface *surface, Ui * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -812,7 +972,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface *surface, S * \returns true if the rectangle intersects the surface, otherwise false and * blits will be completely clipped. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -833,7 +994,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetSurfaceClipRect(SDL_Surface *surface, co * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -849,12 +1011,42 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetSurfaceClipRect(SDL_Surface *surface, SD * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ extern SDL_DECLSPEC bool SDLCALL SDL_FlipSurface(SDL_Surface *surface, SDL_FlipMode flip); +/** + * Return a copy of a surface rotated clockwise a number of degrees. + * + * The angle of rotation can be negative for counter-clockwise rotation. + * + * When the rotation isn't a multiple of 90 degrees, the resulting surface is + * larger than the original, with the background filled in with the colorkey, + * if available, or RGBA 255/255/255/0 if not. + * + * If `surface` has the SDL_PROP_SURFACE_ROTATION_FLOAT property set on it, + * the new copy will have the adjusted value set: if the rotation property is + * 90 and `angle` was 30, the new surface will have a property value of 60 + * (that is: to be upright vs gravity, this surface needs to rotate 60 more + * degrees). However, note that further rotations on the new surface in this + * example will produce unexpected results, since the image will have resized + * and padded to accommodate the not-90 degree angle. + * + * \param surface the surface to rotate. + * \param angle the rotation angle, in degrees. + * \returns a rotated copy of the surface or NULL on failure; call + * SDL_GetError() for more information. + * + * \threadsafety This function can be called on different threads with + * different surfaces. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_RotateSurface(SDL_Surface *surface, float angle); + /** * Creates a new surface identical to the existing surface. * @@ -867,7 +1059,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FlipSurface(SDL_Surface *surface, SDL_FlipM * \returns a copy of the surface or NULL on failure; call SDL_GetError() for * more information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -888,7 +1081,8 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_DuplicateSurface(SDL_Surface *surf * \returns a copy of the surface or NULL on failure; call SDL_GetError() for * more information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -915,7 +1109,8 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_ScaleSurface(SDL_Surface *surface, * \returns the new SDL_Surface structure that is created or NULL on failure; * call SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -943,7 +1138,8 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL SDL_ConvertSurface(SDL_Surface *surfac * \returns the new SDL_Surface structure that is created or NULL on failure; * call SDL_GetError() for more information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -1046,7 +1242,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_PremultiplyAlpha(int width, int height, SDL * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ @@ -1058,7 +1255,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_PremultiplySurfaceAlpha(SDL_Surface *surfac * This function handles all surface formats, and ignores any clip rectangle. * * If the surface is YUV, the color is assumed to be in the sRGB colorspace, - * otherwise the color is assumed to be in the colorspace of the suface. + * otherwise the color is assumed to be in the colorspace of the surface. * * \param surface the SDL_Surface to clear. * \param r the red component of the pixel, normally in the range 0-1. @@ -1068,7 +1265,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_PremultiplySurfaceAlpha(SDL_Surface *surfac * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ @@ -1093,7 +1291,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ClearSurface(SDL_Surface *surface, float r, * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -1120,7 +1319,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_FillSurfaceRect(SDL_Surface *dst, const SDL * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -1411,7 +1611,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_BlitSurface9Grid(SDL_Surface *src, const SD * \param b the blue component of the pixel in the range 0-255. * \returns a pixel value. * - * \threadsafety It is safe to call this function from any thread. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -1444,7 +1645,8 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapSurfaceRGB(SDL_Surface *surface, Uint8 * \param a the alpha component of the pixel in the range 0-255. * \returns a pixel value. * - * \threadsafety It is safe to call this function from any thread. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. * @@ -1475,7 +1677,8 @@ extern SDL_DECLSPEC Uint32 SDLCALL SDL_MapSurfaceRGBA(SDL_Surface *surface, Uint * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ @@ -1501,7 +1704,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadSurfacePixel(SDL_Surface *surface, int * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ @@ -1526,7 +1730,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_ReadSurfacePixelFloat(SDL_Surface *surface, * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ @@ -1548,7 +1753,8 @@ extern SDL_DECLSPEC bool SDLCALL SDL_WriteSurfacePixel(SDL_Surface *surface, int * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \threadsafety This function is not thread safe. + * \threadsafety This function can be called on different threads with + * different surfaces. * * \since This function is available since SDL 3.2.0. */ diff --git a/vendor/sdl3/include/SDL_system.h b/vendor/sdl3/include/SDL_system.h index 294089ff4..625db182e 100644 --- a/vendor/sdl3/include/SDL_system.h +++ b/vendor/sdl3/include/SDL_system.h @@ -247,14 +247,14 @@ typedef void (SDLCALL *SDL_iOSAnimationCallback)(void *userdata); * * For more information see: * - * https://wiki.libsdl.org/SDL3/README/ios + * https://wiki.libsdl.org/SDL3/README-ios * * Note that if you use the "main callbacks" instead of a standard C `main` * function, you don't have to use this API, as SDL will manage this for you. * * Details on main callbacks are here: * - * https://wiki.libsdl.org/SDL3/README/main-functions + * https://wiki.libsdl.org/SDL3/README-main-functions * * \param window the window for which the animation callback should be set. * \param interval the number of frames after which **callback** will be diff --git a/vendor/sdl3/include/SDL_test_common.h b/vendor/sdl3/include/SDL_test_common.h index 91efe8ac3..81cea7788 100644 --- a/vendor/sdl3/include/SDL_test_common.h +++ b/vendor/sdl3/include/SDL_test_common.h @@ -153,6 +153,10 @@ typedef struct SDL_Rect confine; bool hide_cursor; + /* Misc. */ + int quit_after_ms_interval; + SDL_TimerID quit_after_ms_timer; + /* Options info */ SDLTest_ArgumentParser common_argparser; SDLTest_ArgumentParser video_argparser; diff --git a/vendor/sdl3/include/SDL_test_compare.h b/vendor/sdl3/include/SDL_test_compare.h index 7ff247793..1903549c5 100644 --- a/vendor/sdl3/include/SDL_test_compare.h +++ b/vendor/sdl3/include/SDL_test_compare.h @@ -52,6 +52,7 @@ extern "C" { * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. */ int SDLCALL SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); +int SDLCALL SDLTest_CompareSurfacesIgnoreTransparentPixels(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); /** * Compares 2 memory blocks for equality diff --git a/vendor/sdl3/include/SDL_test_log.h b/vendor/sdl3/include/SDL_test_log.h index 0d48044a0..718baa5b7 100644 --- a/vendor/sdl3/include/SDL_test_log.h +++ b/vendor/sdl3/include/SDL_test_log.h @@ -42,6 +42,14 @@ extern "C" { #endif +/** + * Prints given message with a timestamp in the TEST category and given priority. + * + * \param priority Priority of the message + * \param fmt Message to be logged + */ +void SDLCALL SDLTest_LogMessage(SDL_LogPriority priority, SDL_PRINTF_FORMAT_STRING const char *fmt, ...); + /** * Prints given message with a timestamp in the TEST category and INFO priority. * diff --git a/vendor/sdl3/include/SDL_thread.h b/vendor/sdl3/include/SDL_thread.h index e981b5429..bde1bbcd7 100644 --- a/vendor/sdl3/include/SDL_thread.h +++ b/vendor/sdl3/include/SDL_thread.h @@ -37,7 +37,8 @@ * will report failure without doing anything. * * If you're going to work with threads, you almost certainly need to have a - * good understanding of [CategoryMutex](CategoryMutex) as well. + * good understanding of thread safety measures: locking and synchronization + * mechanisms are handled by the functions in SDL_mutex.h. */ #include diff --git a/vendor/sdl3/include/SDL_timer.h b/vendor/sdl3/include/SDL_timer.h index cf94881d5..490d13562 100644 --- a/vendor/sdl3/include/SDL_timer.h +++ b/vendor/sdl3/include/SDL_timer.h @@ -34,7 +34,7 @@ * This category covers measuring time elapsed (SDL_GetTicks(), * SDL_GetPerformanceCounter()), putting a thread to sleep for a certain * amount of time (SDL_Delay(), SDL_DelayNS(), SDL_DelayPrecise()), and firing - * a callback function after a certain amount of time has elasped + * a callback function after a certain amount of time has elapsed * (SDL_AddTimer(), etc). * * There are also useful macros to convert between time units, like @@ -185,14 +185,18 @@ extern "C" { #define SDL_NS_TO_US(NS) ((NS) / SDL_NS_PER_US) /** - * Get the number of milliseconds since SDL library initialization. + * Get the number of milliseconds that have elapsed since the SDL library + * initialization. * - * \returns an unsigned 64-bit value representing the number of milliseconds - * since the SDL library initialized. + * \returns an unsigned 64‑bit integer that represents the number of + * milliseconds that have elapsed since the SDL library was + * initialized (typically via a call to SDL_Init). * * \threadsafety It is safe to call this function from any thread. * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_GetTicksNS */ extern SDL_DECLSPEC Uint64 SDLCALL SDL_GetTicks(void); diff --git a/vendor/sdl3/include/SDL_version.h b/vendor/sdl3/include/SDL_version.h index 435b3f95f..3aa1605b6 100644 --- a/vendor/sdl3/include/SDL_version.h +++ b/vendor/sdl3/include/SDL_version.h @@ -53,7 +53,7 @@ extern "C" { * * \since This macro is available since SDL 3.2.0. */ -#define SDL_MINOR_VERSION 2 +#define SDL_MINOR_VERSION 4 /** * The current micro (or patchlevel) version of the SDL headers. @@ -62,7 +62,7 @@ extern "C" { * * \since This macro is available since SDL 3.2.0. */ -#define SDL_MICRO_VERSION 16 +#define SDL_MICRO_VERSION 0 /** * This macro turns the version numbers into a numeric value. @@ -148,13 +148,14 @@ extern "C" { extern SDL_DECLSPEC int SDLCALL SDL_GetVersion(void); /** - * Get the code revision of SDL that is linked against your program. + * Get the code revision of the SDL library that is linked against your + * program. * - * This value is the revision of the code you are linked with and may be + * This value is the revision of the code you are linking against and may be * different from the code you are compiling with, which is found in the - * constant SDL_REVISION. + * constant SDL_REVISION if you explicitly include SDL_revision.h * - * The revision is arbitrary string (a hash value) uniquely identifying the + * The revision is an arbitrary string (a hash value) uniquely identifying the * exact revision of the SDL library in use, and is only useful in comparing * against other revisions. It is NOT an incrementing number. * diff --git a/vendor/sdl3/include/SDL_video.h b/vendor/sdl3/include/SDL_video.h index 877b9adde..31dac5f7a 100644 --- a/vendor/sdl3/include/SDL_video.h +++ b/vendor/sdl3/include/SDL_video.h @@ -97,6 +97,8 @@ typedef Uint32 SDL_WindowID; * uninitialized will either return the user provided value, if one was set * prior to initialization, or NULL. See docs/README-wayland.md for more * information. + * + * \since This macro is available since SDL 3.2.0. */ #define SDL_PROP_GLOBAL_VIDEO_WAYLAND_WL_DISPLAY_POINTER "SDL.video.wayland.wl_display" @@ -180,6 +182,12 @@ typedef struct SDL_Window SDL_Window; * changed on existing windows by the app, and some of it might be altered by * the user or system outside of the app's control. * + * When creating windows with `SDL_WINDOW_RESIZABLE`, SDL will constrain + * resizable windows to the dimensions recommended by the compositor to fit it + * within the usable desktop space, although some compositors will do this + * automatically without intervention as well. Use `SDL_SetWindowResizable` + * after creation instead if you wish to create a window with a specific size. + * * \since This datatype is available since SDL 3.2.0. * * \sa SDL_GetWindowFlags @@ -207,6 +215,7 @@ typedef Uint64 SDL_WindowFlags; #define SDL_WINDOW_TOOLTIP SDL_UINT64_C(0x0000000000040000) /**< window should be treated as a tooltip and does not get mouse or keyboard focus, requires a parent window */ #define SDL_WINDOW_POPUP_MENU SDL_UINT64_C(0x0000000000080000) /**< window should be treated as a popup menu, requires a parent window */ #define SDL_WINDOW_KEYBOARD_GRABBED SDL_UINT64_C(0x0000000000100000) /**< window has grabbed keyboard input */ +#define SDL_WINDOW_FILL_DOCUMENT SDL_UINT64_C(0x0000000000200000) /**< window is in fill-document mode (Emscripten only), since SDL 3.4.0 */ #define SDL_WINDOW_VULKAN SDL_UINT64_C(0x0000000010000000) /**< window usable for Vulkan surface */ #define SDL_WINDOW_METAL SDL_UINT64_C(0x0000000020000000) /**< window usable for Metal view */ #define SDL_WINDOW_TRANSPARENT SDL_UINT64_C(0x0000000040000000) /**< window with transparent buffer */ @@ -220,6 +229,8 @@ typedef Uint64 SDL_WindowFlags; * SDL_WINDOWPOS_UNDEFINED or SDL_WINDOWPOS_UNDEFINED_DISPLAY. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u @@ -232,6 +243,8 @@ typedef Uint64 SDL_WindowFlags; * \param X the SDL_DisplayID of the display to use. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) @@ -241,6 +254,8 @@ typedef Uint64 SDL_WindowFlags; * This always uses the primary display. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) @@ -250,6 +265,8 @@ typedef Uint64 SDL_WindowFlags; * \param X the window position value. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_ISUNDEFINED(X) (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) @@ -260,6 +277,8 @@ typedef Uint64 SDL_WindowFlags; * SDL_WINDOWPOS_CENTERED or SDL_WINDOWPOS_CENTERED_DISPLAY. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u @@ -272,6 +291,8 @@ typedef Uint64 SDL_WindowFlags; * \param X the SDL_DisplayID of the display to use. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) @@ -281,6 +302,8 @@ typedef Uint64 SDL_WindowFlags; * This always uses the primary display. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_SetWindowPosition */ #define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) @@ -290,6 +313,8 @@ typedef Uint64 SDL_WindowFlags; * \param X the window position value. * * \since This macro is available since SDL 3.2.0. + * + * \sa SDL_GetWindowPosition */ #define SDL_WINDOWPOS_ISCENTERED(X) \ (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) @@ -307,12 +332,30 @@ typedef enum SDL_FlashOperation SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ } SDL_FlashOperation; +/** + * Window progress state + * + * \since This enum is available since SDL 3.2.8. + */ +typedef enum SDL_ProgressState +{ + SDL_PROGRESS_STATE_INVALID = -1, /**< An invalid progress state indicating an error; check SDL_GetError() */ + SDL_PROGRESS_STATE_NONE, /**< No progress bar is shown */ + SDL_PROGRESS_STATE_INDETERMINATE, /**< The progress bar is shown in a indeterminate state */ + SDL_PROGRESS_STATE_NORMAL, /**< The progress bar is shown in a normal state */ + SDL_PROGRESS_STATE_PAUSED, /**< The progress bar is shown in a paused state */ + SDL_PROGRESS_STATE_ERROR /**< The progress bar is shown in a state indicating the application had an error */ +} SDL_ProgressState; + /** * An opaque handle to an OpenGL context. * * \since This datatype is available since SDL 3.2.0. * * \sa SDL_GL_CreateContext + * \sa SDL_GL_SetAttribute + * \sa SDL_GL_MakeCurrent + * \sa SDL_GL_DestroyContext */ typedef struct SDL_GLContextState *SDL_GLContext; @@ -448,7 +491,7 @@ typedef enum SDL_GLAttr SDL_GL_CONTEXT_FLAGS, /**< some combination of 0 or more of elements of the SDL_GLContextFlag enumeration; defaults to 0. */ SDL_GL_CONTEXT_PROFILE_MASK, /**< type of GL context (Core, Compatibility, ES). See SDL_GLProfile; default value depends on platform. */ SDL_GL_SHARE_WITH_CURRENT_CONTEXT, /**< OpenGL context sharing; defaults to 0. */ - SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB capable visual; defaults to 0. */ + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB-capable visual if 1. Defaults to -1 ("don't care"). This is a request; GL drivers might not comply! */ SDL_GL_CONTEXT_RELEASE_BEHAVIOR, /**< sets context the release behavior. See SDL_GLContextReleaseFlag; defaults to FLUSH. */ SDL_GL_CONTEXT_RESET_NOTIFICATION, /**< set context reset notification. See SDL_GLContextResetNotification; defaults to NO_NOTIFICATION. */ SDL_GL_CONTEXT_NO_ERROR, @@ -530,7 +573,8 @@ extern SDL_DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); * to be proper names. * * \param index the index of a video driver. - * \returns the name of the video driver with the given **index**. + * \returns the name of the video driver with the given **index**, or NULL if + * index is out of bounds. * * \threadsafety This function should only be called on the main thread. * @@ -617,6 +661,16 @@ extern SDL_DECLSPEC SDL_DisplayID SDLCALL SDL_GetPrimaryDisplay(void); * responsible for any coordinate transformations needed to conform to the * requested display orientation. * + * On Wayland: + * + * - `SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTER`: the wl_output associated + * with the display + * + * On Windows: + * + * - `SDL_PROP_DISPLAY_WINDOWS_HMONITOR_POINTER`: the monitor handle + * (HMONITOR) associated with the display + * * \param displayID the instance ID of the display to query. * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. @@ -629,6 +683,8 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetDisplayProperties(SDL_Displa #define SDL_PROP_DISPLAY_HDR_ENABLED_BOOLEAN "SDL.display.HDR_enabled" #define SDL_PROP_DISPLAY_KMSDRM_PANEL_ORIENTATION_NUMBER "SDL.display.KMSDRM.panel_orientation" +#define SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTER "SDL.display.wayland.wl_output" +#define SDL_PROP_DISPLAY_WINDOWS_HMONITOR_POINTER "SDL.display.windows.hmonitor" /** * Get the name of a display in UTF-8 encoding. @@ -1049,8 +1105,6 @@ extern SDL_DECLSPEC SDL_Window ** SDLCALL SDL_GetWindows(int *count); * * - `SDL_WINDOW_FULLSCREEN`: fullscreen window at desktop resolution * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context - * - `SDL_WINDOW_OCCLUDED`: window partially or completely obscured by another - * window * - `SDL_WINDOW_HIDDEN`: window is not visible * - `SDL_WINDOW_BORDERLESS`: no window decoration * - `SDL_WINDOW_RESIZABLE`: window can be resized @@ -1078,7 +1132,8 @@ extern SDL_DECLSPEC SDL_Window ** SDLCALL SDL_GetWindows(int *count); * - `SDL_WINDOW_TRANSPARENT`: window with transparent buffer * - `SDL_WINDOW_NOT_FOCUSABLE`: window should not be focusable * - * The SDL_Window is implicitly shown if SDL_WINDOW_HIDDEN is not set. + * The SDL_Window will be shown if SDL_WINDOW_HIDDEN is not set. If hidden at + * creation time, SDL_ShowWindow() can be used to show it later. * * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. @@ -1167,6 +1222,16 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, int * Popup windows implicitly do not have a border/decorations and do not appear * on the taskbar/dock or in lists of windows such as alt-tab menus. * + * By default, popup window positions will automatically be constrained to + * keep the entire window within display bounds. This can be overridden with + * the `SDL_PROP_WINDOW_CREATE_CONSTRAIN_POPUP_BOOLEAN` property. + * + * By default, popup menus will automatically grab keyboard focus from the + * parent when shown. This behavior can be overridden by setting the + * `SDL_WINDOW_NOT_FOCUSABLE` flag, setting the + * `SDL_PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN` property to false, or toggling + * it after creation via the `SDL_SetWindowFocusable()` function. + * * If a parent window is hidden or destroyed, any child popup windows will be * recursively hidden or destroyed as well. Child popup windows not explicitly * hidden will be restored when the parent is shown. @@ -1207,6 +1272,10 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *paren * be always on top * - `SDL_PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN`: true if the window has no * window decoration + * - `SDL_PROP_WINDOW_CREATE_CONSTRAIN_POPUP_BOOLEAN`: true if the "tooltip" + * and "menu" window types should be automatically constrained to be + * entirely within display bounds (default), false if no constraints on the + * position are desired. * - `SDL_PROP_WINDOW_CREATE_EXTERNAL_GRAPHICS_CONTEXT_BOOLEAN`: true if the * window will be used with an externally managed graphics context. * - `SDL_PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN`: true if the window should @@ -1263,12 +1332,18 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *paren * - `SDL_PROP_WINDOW_CREATE_COCOA_VIEW_POINTER`: the `(__unsafe_unretained)` * NSView associated with the window, defaults to `[window contentView]` * + * These are additional supported properties on iOS, tvOS, and visionOS: + * + * - `SDL_PROP_WINDOW_CREATE_WINDOWSCENE_POINTER`: the `(__unsafe_unretained)` + * UIWindowScene associated with the window, defaults to the active window + * scene. + * * These are additional supported properties on Wayland: * * - `SDL_PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN` - true if * the application wants to use the Wayland surface for a custom role and * does not want it attached to an XDG toplevel window. See - * [README/wayland](README/wayland) for more information on using custom + * [README-wayland](README-wayland) for more information on using custom * surfaces. * - `SDL_PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN` - true if the * application wants an associated `wl_egl_window` object to be created and @@ -1276,7 +1351,7 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *paren * property or `SDL_WINDOW_OPENGL` flag set. * - `SDL_PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER` - the wl_surface * associated with the window, if you want to wrap an existing window. See - * [README/wayland](README/wayland) for more information. + * [README-wayland](README-wayland) for more information. * * These are additional supported properties on Windows: * @@ -1292,8 +1367,22 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreatePopupWindow(SDL_Window *paren * * The window is implicitly shown if the "hidden" property is not set. * - * Windows with the "tooltip" and "menu" properties are popup windows and have - * the behaviors and guidelines outlined in SDL_CreatePopupWindow(). + * These are additional supported properties with Emscripten: + * + * - `SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING`: the id given to the + * canvas element. This should start with a '#' sign + * - `SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING`: override the + * binding element for keyboard inputs for this canvas. The variable can be + * one of: + * - "#window": the javascript window object (default) + * - "#document": the javascript document object + * - "#screen": the javascript window.screen object + * - "#canvas": the WebGL canvas element + * - "#none": Don't bind anything at all + * - any other string without a leading # sign applies to the element on the + * page with that ID. Windows with the "tooltip" and "menu" properties are + * popup windows and have the behaviors and guidelines outlined in + * SDL_CreatePopupWindow(). * * If this window is being created to be used with an SDL_Renderer, you should * not add a graphics API specific property @@ -1321,6 +1410,7 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowWithProperties(SDL_Prop #define SDL_PROP_WINDOW_CREATE_ALWAYS_ON_TOP_BOOLEAN "SDL.window.create.always_on_top" #define SDL_PROP_WINDOW_CREATE_BORDERLESS_BOOLEAN "SDL.window.create.borderless" +#define SDL_PROP_WINDOW_CREATE_CONSTRAIN_POPUP_BOOLEAN "SDL.window.create.constrain_popup" #define SDL_PROP_WINDOW_CREATE_FOCUSABLE_BOOLEAN "SDL.window.create.focusable" #define SDL_PROP_WINDOW_CREATE_EXTERNAL_GRAPHICS_CONTEXT_BOOLEAN "SDL.window.create.external_graphics_context" #define SDL_PROP_WINDOW_CREATE_FLAGS_NUMBER "SDL.window.create.flags" @@ -1347,12 +1437,15 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowWithProperties(SDL_Prop #define SDL_PROP_WINDOW_CREATE_Y_NUMBER "SDL.window.create.y" #define SDL_PROP_WINDOW_CREATE_COCOA_WINDOW_POINTER "SDL.window.create.cocoa.window" #define SDL_PROP_WINDOW_CREATE_COCOA_VIEW_POINTER "SDL.window.create.cocoa.view" +#define SDL_PROP_WINDOW_CREATE_WINDOWSCENE_POINTER "SDL.window.create.uikit.windowscene" #define SDL_PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN "SDL.window.create.wayland.surface_role_custom" #define SDL_PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN "SDL.window.create.wayland.create_egl_window" #define SDL_PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER "SDL.window.create.wayland.wl_surface" #define SDL_PROP_WINDOW_CREATE_WIN32_HWND_POINTER "SDL.window.create.win32.hwnd" #define SDL_PROP_WINDOW_CREATE_WIN32_PIXEL_FORMAT_HWND_POINTER "SDL.window.create.win32.pixel_format_hwnd" #define SDL_PROP_WINDOW_CREATE_X11_WINDOW_NUMBER "SDL.window.create.x11.window" +#define SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING "SDL.window.create.emscripten.canvas_id" +#define SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING "SDL.window.create.emscripten.keyboard_element" /** * Get the numeric ID of a window. @@ -1460,12 +1553,12 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetWindowParent(SDL_Window *window) * - `SDL_PROP_WINDOW_COCOA_WINDOW_POINTER`: the `(__unsafe_unretained)` * NSWindow associated with the window * - `SDL_PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER`: the NSInteger tag - * assocated with metal views on the window + * associated with metal views on the window * * On OpenVR: * - * - `SDL_PROP_WINDOW_OPENVR_OVERLAY_ID`: the OpenVR Overlay Handle ID for the - * associated overlay window. + * - `SDL_PROP_WINDOW_OPENVR_OVERLAY_ID_NUMBER`: the OpenVR Overlay Handle ID + * for the associated overlay window. * * On Vivante: * @@ -1517,6 +1610,13 @@ extern SDL_DECLSPEC SDL_Window * SDLCALL SDL_GetWindowParent(SDL_Window *window) * - `SDL_PROP_WINDOW_X11_WINDOW_NUMBER`: the X11 Window associated with the * window * + * On Emscripten: + * + * - `SDL_PROP_WINDOW_EMSCRIPTEN_CANVAS_ID_STRING`: the id the canvas element + * will have + * - `SDL_PROP_WINDOW_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING`: the keyboard + * element that associates keyboard events to this window + * * \param window the window to query. * \returns a valid property ID on success or 0 on failure; call * SDL_GetError() for more information. @@ -1543,7 +1643,7 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetWindowProperties(SDL_Window #define SDL_PROP_WINDOW_KMSDRM_GBM_DEVICE_POINTER "SDL.window.kmsdrm.gbm_dev" #define SDL_PROP_WINDOW_COCOA_WINDOW_POINTER "SDL.window.cocoa.window" #define SDL_PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER "SDL.window.cocoa.metal_view_tag" -#define SDL_PROP_WINDOW_OPENVR_OVERLAY_ID "SDL.window.openvr.overlay_id" +#define SDL_PROP_WINDOW_OPENVR_OVERLAY_ID_NUMBER "SDL.window.openvr.overlay_id" #define SDL_PROP_WINDOW_VIVANTE_DISPLAY_POINTER "SDL.window.vivante.display" #define SDL_PROP_WINDOW_VIVANTE_WINDOW_POINTER "SDL.window.vivante.window" #define SDL_PROP_WINDOW_VIVANTE_SURFACE_POINTER "SDL.window.vivante.surface" @@ -1562,6 +1662,8 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetWindowProperties(SDL_Window #define SDL_PROP_WINDOW_X11_DISPLAY_POINTER "SDL.window.x11.display" #define SDL_PROP_WINDOW_X11_SCREEN_NUMBER "SDL.window.x11.screen" #define SDL_PROP_WINDOW_X11_WINDOW_NUMBER "SDL.window.x11.window" +#define SDL_PROP_WINDOW_EMSCRIPTEN_CANVAS_ID_STRING "SDL.window.emscripten.canvas_id" +#define SDL_PROP_WINDOW_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING "SDL.window.emscripten.keyboard_element" /** * Get the window flags. @@ -1579,6 +1681,7 @@ extern SDL_DECLSPEC SDL_PropertiesID SDLCALL SDL_GetWindowProperties(SDL_Window * \sa SDL_MinimizeWindow * \sa SDL_SetWindowFullscreen * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowFillDocument * \sa SDL_ShowWindow */ extern SDL_DECLSPEC SDL_WindowFlags SDLCALL SDL_GetWindowFlags(SDL_Window *window); @@ -1619,15 +1722,16 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetWindowTitle(SDL_Window *window); /** * Set the icon for a window. * - * If this function is passed a surface with alternate representations, the - * surface will be interpreted as the content to be used for 100% display - * scale, and the alternate representations will be used for high DPI - * situations. For example, if the original surface is 32x32, then on a 2x - * macOS display or 200% display scale on Windows, a 64x64 version of the - * image will be used, if available. If a matching version of the image isn't - * available, the closest larger size image will be downscaled to the - * appropriate size and be used instead, if available. Otherwise, the closest - * smaller image will be upscaled and be used instead. + * If this function is passed a surface with alternate representations added + * using SDL_AddSurfaceAlternateImage(), the surface will be interpreted as + * the content to be used for 100% display scale, and the alternate + * representations will be used for high DPI situations. For example, if the + * original surface is 32x32, then on a 2x macOS display or 200% display scale + * on Windows, a 64x64 version of the image will be used, if available. If a + * matching version of the image isn't available, the closest larger size + * image will be downscaled to the appropriate size and be used instead, if + * available. Otherwise, the closest smaller image will be upscaled and be + * used instead. * * \param window the window to change. * \param icon an SDL_Surface structure containing the icon for the window. @@ -1637,6 +1741,8 @@ extern SDL_DECLSPEC const char * SDLCALL SDL_GetWindowTitle(SDL_Window *window); * \threadsafety This function should only be called on the main thread. * * \since This function is available since SDL 3.2.0. + * + * \sa SDL_AddSurfaceAlternateImage */ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowIcon(SDL_Window *window, SDL_Surface *icon); @@ -1763,6 +1869,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowSize(SDL_Window *window, int w, in * \sa SDL_GetRenderOutputSize * \sa SDL_GetWindowSizeInPixels * \sa SDL_SetWindowSize + * \sa SDL_EVENT_WINDOW_RESIZED */ extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowSize(SDL_Window *window, int *w, int *h); @@ -1774,7 +1881,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowSize(SDL_Window *window, int *w, i * notches, TV overscan, etc. This function provides the area of the window * which is safe to have interactable content. You should continue rendering * into the rest of the window, but it should not contain visually important - * or interactible content. + * or interactable content. * * \param window the window to query. * \param rect a pointer filled in with the client area that is safe for @@ -1830,7 +1937,7 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GetWindowSafeArea(SDL_Window *window, SDL_R extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowAspectRatio(SDL_Window *window, float min_aspect, float max_aspect); /** - * Get the size of a window's client area. + * Get the aspect ratio of a window's client area. * * \param window the window to query the width and height from. * \param min_aspect a pointer filled in with the minimum aspect ratio of the @@ -2044,6 +2151,37 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowResizable(SDL_Window *window, bool */ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window *window, bool on_top); +/** + * Set the window to fill the current document space (Emscripten only). + * + * This will add or remove the window's `SDL_WINDOW_FILL_DOCUMENT` flag. + * + * Currently this flag only applies to the Emscripten target. + * + * When enabled, the canvas element fills the entire document. Resize events + * will be generated as the browser window is resized, as that will adjust the + * canvas size as well. The canvas will cover anything else on the page, + * including any controls provided by Emscripten in its generated HTML file + * (in fact, any elements on the page that aren't the canvas will be moved + * into a hidden `div` element). + * + * Often times this is desirable for a browser-based game, but it means + * several things that we expect of an SDL window on other platforms might not + * work as expected, such as minimum window sizes and aspect ratios. + * + * \param window the window of which to change the fill-document state. + * \param fill true to set the window to fill the document, false to disable. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + * + * \sa SDL_GetWindowFlags + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowFillDocument(SDL_Window *window, bool fill); + /** * Show a window. * @@ -2457,7 +2595,6 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window *window, b * * \sa SDL_GetWindowMouseRect * \sa SDL_SetWindowMouseRect - * \sa SDL_SetWindowMouseGrab * \sa SDL_SetWindowKeyboardGrab */ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowMouseGrab(SDL_Window *window, bool grabbed); @@ -2802,6 +2939,62 @@ extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowShape(SDL_Window *window, SDL_Surf */ extern SDL_DECLSPEC bool SDLCALL SDL_FlashWindow(SDL_Window *window, SDL_FlashOperation operation); +/** + * Sets the state of the progress bar for the given window’s taskbar icon. + * + * \param window the window whose progress state is to be modified. + * \param state the progress state. `SDL_PROGRESS_STATE_NONE` stops displaying + * the progress bar. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowProgressState(SDL_Window *window, SDL_ProgressState state); + +/** + * Get the state of the progress bar for the given window’s taskbar icon. + * + * \param window the window to get the current progress state from. + * \returns the progress state, or `SDL_PROGRESS_STATE_INVALID` on failure; + * call SDL_GetError() for more information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC SDL_ProgressState SDLCALL SDL_GetWindowProgressState(SDL_Window *window); + +/** + * Sets the value of the progress bar for the given window’s taskbar icon. + * + * \param window the window whose progress value is to be modified. + * \param value the progress value in the range of [0.0f - 1.0f]. If the value + * is outside the valid range, it gets clamped. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC bool SDLCALL SDL_SetWindowProgressValue(SDL_Window *window, float value); + +/** + * Get the value of the progress bar for the given window’s taskbar icon. + * + * \param window the window to get the current progress value from. + * \returns the progress value in the range of [0.0f - 1.0f], or -1.0f on + * failure; call SDL_GetError() for more information. + * + * \threadsafety This function should only be called on the main thread. + * + * \since This function is available since SDL 3.4.0. + */ +extern SDL_DECLSPEC float SDLCALL SDL_GetWindowProgressValue(SDL_Window *window); + /** * Destroy a window. * @@ -3037,8 +3230,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); * SDL_GL_GetAttribute() to check the values after creating the OpenGL * context, since the values obtained can differ from the requested ones. * - * \param attr an SDL_GLAttr enum value specifying the OpenGL attribute to - * set. + * \param attr an enum value specifying the OpenGL attribute to set. * \param value the desired value for the attribute. * \returns true on success or false on failure; call SDL_GetError() for more * information. @@ -3047,6 +3239,7 @@ extern SDL_DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); * * \since This function is available since SDL 3.2.0. * + * \sa SDL_GL_CreateContext * \sa SDL_GL_GetAttribute * \sa SDL_GL_ResetAttributes */ @@ -3073,6 +3266,12 @@ extern SDL_DECLSPEC bool SDLCALL SDL_GL_GetAttribute(SDL_GLAttr attr, int *value /** * Create an OpenGL context for an OpenGL window, and make it current. * + * The OpenGL context will be created with the current states set through + * SDL_GL_SetAttribute(). + * + * The SDL_Window specified must have been created with the SDL_WINDOW_OPENGL + * flag, or context creation will fail. + * * Windows users new to OpenGL should note that, for historical reasons, GL * functions added after OpenGL version 1.1 are not available by default. * Those functions must be loaded at run-time, either with an OpenGL diff --git a/vendor/sdl3/include/SDL_vulkan.h b/vendor/sdl3/include/SDL_vulkan.h index 710afbe63..e91e14842 100644 --- a/vendor/sdl3/include/SDL_vulkan.h +++ b/vendor/sdl3/include/SDL_vulkan.h @@ -51,14 +51,14 @@ extern "C" { #endif -/* Avoid including vulkan.h, don't define VkInstance if it's already included */ -#ifdef VULKAN_H_ +/* Avoid including vulkan_core.h, don't define VkInstance if it's already included */ +#ifdef VULKAN_CORE_H_ #define NO_SDL_VULKAN_TYPEDEFS #endif #ifndef NO_SDL_VULKAN_TYPEDEFS #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; -#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) +#if defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__)) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) || (defined(__riscv) && __riscv_xlen == 64) #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; #else #define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; diff --git a/vendor/sdl3/sdl3_atomic.odin b/vendor/sdl3/sdl3_atomic.odin index 178a44a5b..fefe8c861 100644 --- a/vendor/sdl3/sdl3_atomic.odin +++ b/vendor/sdl3/sdl3_atomic.odin @@ -36,7 +36,8 @@ foreign lib { CompareAndSwapAtomicU32 :: proc(a: ^AtomicU32, oldval, newval: Uint32) -> bool --- SetAtomicU32 :: proc(a: ^AtomicU32, v: Uint32) -> Uint32 --- GetAtomicU32 :: proc(a: ^AtomicU32) -> Uint32 --- + AddAtomicU32 :: proc(a: ^AtomicU32) -> Uint32 --- CompareAndSwapAtomicPointer :: proc(a: ^rawptr, oldval, newval: rawptr) -> bool --- SetAtomicPointer :: proc(a: ^rawptr, v: rawptr) -> rawptr --- GetAtomicPointer :: proc(a: ^rawptr) -> rawptr --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_audio.odin b/vendor/sdl3/sdl3_audio.odin index 045f4780e..277aefde7 100644 --- a/vendor/sdl3/sdl3_audio.odin +++ b/vendor/sdl3/sdl3_audio.odin @@ -67,8 +67,11 @@ AUDIO_FRAMESIZE :: proc "c" (x: AudioSpec) -> c.int { AudioStream :: struct {} -AudioStreamCallback :: #type proc "c" (userdata: rawptr, stream: ^AudioStream, additional_amount, total_amount: c.int) -AudioPostmixCallback :: #type proc "c" (userdata: rawptr, spec: ^AudioSpec, buffer: [^]f32, buflen: c.int) +AudioStreamCallback :: #type proc "c" (userdata: rawptr, stream: ^AudioStream, additional_amount, total_amount: c.int) +AudioStreamDataCompleteCallback :: #type proc "c" (userdata: rawptr, buf: rawptr, buflen: c.int) +AudioPostmixCallback :: #type proc "c" (userdata: rawptr, spec: ^AudioSpec, buffer: [^]f32, buflen: c.int) + +AUDIOSTREAM_AUTO_CLEANUP_BOOLEAN :: "SDL.audiostream.auto_cleanup" @(default_calling_convention="c", link_prefix="SDL_") foreign lib { @@ -107,6 +110,8 @@ foreign lib { SetAudioStreamInputChannelMap :: proc(stream: ^AudioStream, chmap: [^]c.int, count: c.int) -> bool --- SetAudioStreamOutputChannelMap :: proc(stream: ^AudioStream, chmap: [^]c.int, count: c.int) -> bool --- PutAudioStreamData :: proc(stream: ^AudioStream, buf: rawptr, len: c.int) -> bool --- + PutAudioStreamDataNoCopy :: proc(stream: ^AudioStream, buf: rawptr, len: c.int, callback: AudioStreamDataCompleteCallback, userdata: rawptr) -> bool --- + PutAudioStreamPlanarData :: proc(stream: ^AudioStream, channel_buffers: [^]rawptr, num_channels, num_samples: c.int) -> bool --- GetAudioStreamData :: proc(stream: ^AudioStream, buf: rawptr, len: c.int) -> c.int --- GetAudioStreamAvailable :: proc(stream: ^AudioStream) -> c.int --- GetAudioStreamQueued :: proc(stream: ^AudioStream) -> c.int --- @@ -128,4 +133,4 @@ foreign lib { ConvertAudioSamples :: proc(src_spec: ^AudioSpec, src_data: [^]Uint8, src_len: c.int, dst_spec: ^AudioSpec, dst_data: ^[^]Uint8, dst_len: ^c.int) -> bool --- GetAudioFormatName :: proc(format: AudioFormat) -> cstring --- GetSilenceValueForFormat :: proc(format: AudioFormat) -> c.int --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_camera.odin b/vendor/sdl3/sdl3_camera.odin index 7d46bd2bd..a6a895245 100644 --- a/vendor/sdl3/sdl3_camera.odin +++ b/vendor/sdl3/sdl3_camera.odin @@ -21,6 +21,12 @@ CameraPosition :: enum c.int { BACK_FACING, } +CameraPermissionState :: enum c.int { + DENIED = -1, + PENDING, + APPROVED, +} + @(default_calling_convention="c", link_prefix="SDL_") foreign lib { GetNumCameraDrivers :: proc() -> c.int --- @@ -31,11 +37,11 @@ foreign lib { GetCameraName :: proc(instance_id: CameraID) -> cstring --- GetCameraPosition :: proc(instance_id: CameraID) -> CameraPosition --- OpenCamera :: proc(instance_id: CameraID, spec: ^CameraSpec) -> ^Camera --- - GetCameraPermissionState :: proc(camera: ^Camera) -> c.int --- + GetCameraPermissionState :: proc(camera: ^Camera) -> CameraPermissionState --- GetCameraID :: proc(camera: ^Camera) -> CameraID --- GetCameraProperties :: proc(camera: ^Camera) -> PropertiesID --- GetCameraFormat :: proc(camera: ^Camera, spec: ^CameraSpec) -> bool --- AcquireCameraFrame :: proc(camera: ^Camera, timestampNS: ^Uint64) -> ^Surface --- ReleaseCameraFrame :: proc(camera: ^Camera, frame: ^Surface) --- CloseCamera :: proc(camera: ^Camera) --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_cpuinfo.odin b/vendor/sdl3/sdl3_cpuinfo.odin index 959286c71..a97a5a324 100644 --- a/vendor/sdl3/sdl3_cpuinfo.odin +++ b/vendor/sdl3/sdl3_cpuinfo.odin @@ -24,4 +24,5 @@ foreign lib { HasLASX :: proc() -> bool --- GetSystemRAM :: proc() -> c.int --- GetSIMDAlignment :: proc() -> uint --- -} \ No newline at end of file + GetSystemPageSize :: proc() -> c.int --- +} diff --git a/vendor/sdl3/sdl3_events.odin b/vendor/sdl3/sdl3_events.odin index 999fe58b7..7e871156e 100644 --- a/vendor/sdl3/sdl3_events.odin +++ b/vendor/sdl3/sdl3_events.odin @@ -46,9 +46,10 @@ EventType :: enum Uint32 { DISPLAY_MOVED, /**< Display has changed position */ DISPLAY_DESKTOP_MODE_CHANGED, /**< Display has changed desktop mode */ DISPLAY_CURRENT_MODE_CHANGED, /**< Display has changed current mode */ - DISPLAY_CONTENT_SCALE_CHANGED, /**< Display has changed content scale */ + DISPLAY_CONTENT_SCALE_CHANGED, /**< Display has changed usable bounds */ + DISPLAY_USABLE_BOUNDS_CHANGED, DISPLAY_FIRST = DISPLAY_ORIENTATION, - DISPLAY_LAST = DISPLAY_CONTENT_SCALE_CHANGED, + DISPLAY_LAST = DISPLAY_USABLE_BOUNDS_CHANGED, /* Window events */ /* 0x200 was SDL_WINDOWEVENT, reserve the number for sdl2-compat */ @@ -94,6 +95,8 @@ EventType :: enum Uint32 { KEYBOARD_ADDED, /**< A new keyboard has been inserted into the system */ KEYBOARD_REMOVED, /**< A keyboard has been removed */ TEXT_EDITING_CANDIDATES, /**< Keyboard text editing candidates */ + SCREEN_KEYBOARD_SHOWN, /**< The on-screen keyboard has been shown */ + SCREEN_KEYBOARD_HIDDEN, /**< The on-screen keyboard has been hidden */ /* Mouse events */ MOUSE_MOTION = 0x400, /**< Mouse moved */ @@ -134,10 +137,15 @@ EventType :: enum Uint32 { FINGER_MOTION, FINGER_CANCELED, + /* Pinch events */ + PINCH_BEGIN = 0x710, /**< Pinch gesture started */ + PINCH_UPDATE, /**< Pinch gesture updated */ + PINCH_END, /**< Pinch gesture ended */ + /* 0x800, 0x801, and 0x802 were the Gesture events from SDL2. Do not reuse these values! sdl2-compat needs them! */ /* Clipboard events */ - CLIPBOARD_UPDATE = 0x900, /**< The clipboard or primary selection changed */ + CLIPBOARD_UPDATE = 0x900, /**< The clipboard changed */ /* Drag and drop events */ DROP_FILE = 0x1000, /**< The system requests a file open */ @@ -431,6 +439,12 @@ TouchFingerEvent :: struct { windowID: WindowID, /**< The window underneath the finger, if any */ } +PinchFingerEvent :: struct { + using commonEvent: CommonEvent, + scale: f32, /**< The scale change since the last SDL_EVENT_PINCH_UPDATE. Scale < 1 is "zoom out". Scale > 1 is "zoom in". */ + windowID: WindowID, /**< The window underneath the finger, if any */ +} + PenProximityEvent :: struct { using commonEvent: CommonEvent, /**< SDL_EVENT_PEN_PROXIMITY_IN or SDL_EVENT_PEN_PROXIMITY_OUT */ windowID: WindowID, /**< The window with pen focus, if any */ @@ -508,7 +522,7 @@ QuitEvent :: struct { } UserEvent :: struct { - using commonEvent: CommonEvent, /**< SDL_EVENT_USER through SDL_EVENT_LAST-1, Uint32 because these are not in the SDL_EventType enumeration */ + using commonEvent: CommonEvent, /**< SDL_EVENT_USER through SDL_EVENT_LAST, Uint32 because these are not in the SDL_EventType enumeration */ windowID: WindowID, /**< The associated window if any */ code: Sint32, /**< User defined event code */ data1: rawptr, /**< User defined data pointer */ @@ -579,6 +593,8 @@ Event :: struct #raw_union { user: UserEvent `raw_union_tag:"type=USER"`, /**< Touch finger event data */ tfinger: TouchFingerEvent `raw_union_tag:"type=FINGER_DOWN,FINGER_UP,FINGER_MOTION,FINGER_CANCELED"`, + /**< Pinch event data */ + pinch: PinchFingerEvent `raw_union_tag:"type=PINCH_BEGIN,PINCH_UPDATE,PINCH_END"`, /**< Pen proximity event data */ pproximity: PenProximityEvent `raw_union_tag:"type=PEN_PROXIMITY_IN,PEN_PROXIMITY_OUT"`, /**< Pen tip touching event data */ @@ -626,23 +642,24 @@ EventFilter :: proc "c" (userdata: rawptr, event: ^Event) -> bool @(default_calling_convention="c", link_prefix="SDL_", require_results) foreign lib { - PumpEvents :: proc() --- - PeepEvents :: proc(events: [^]Event, numevents: c.int, action: EventAction, minType, maxType: EventType) -> int --- - HasEvent :: proc(type: EventType) -> bool --- - HasEvents :: proc(minType, maxType: EventType) -> bool --- - FlushEvent :: proc(type: EventType) --- - FlushEvents :: proc(minType, maxType: EventType) --- - PollEvent :: proc(event: ^Event) -> bool --- - WaitEvent :: proc(event: ^Event) -> bool --- - WaitEventTimeout :: proc(event: ^Event, timeoutMS: Sint32) -> bool --- - PushEvent :: proc(event: ^Event) -> bool --- - SetEventFilter :: proc(filter: EventFilter, userdata: rawptr) --- - GetEventFilter :: proc(filter: ^EventFilter, userdata: ^rawptr) -> bool --- - AddEventWatch :: proc(filter: EventFilter, userdata: rawptr) -> bool --- - RemoveEventWatch :: proc(filter: EventFilter, userdata: rawptr) --- - FilterEvents :: proc(filter: EventFilter, userdata: rawptr) --- - SetEventEnabled :: proc(type: EventType, enabled: bool) --- - EventEnabled :: proc(type: EventType) -> bool --- - RegisterEvents :: proc(numevents: c.int) -> Uint32 --- - GetWindowFromEvent :: proc(#by_ptr event: Event) -> ^Window --- -} \ No newline at end of file + PumpEvents :: proc() --- + PeepEvents :: proc(events: [^]Event, numevents: c.int, action: EventAction, minType, maxType: EventType) -> int --- + HasEvent :: proc(type: EventType) -> bool --- + HasEvents :: proc(minType, maxType: EventType) -> bool --- + FlushEvent :: proc(type: EventType) --- + FlushEvents :: proc(minType, maxType: EventType) --- + PollEvent :: proc(event: ^Event) -> bool --- + WaitEvent :: proc(event: ^Event) -> bool --- + WaitEventTimeout :: proc(event: ^Event, timeoutMS: Sint32) -> bool --- + PushEvent :: proc(event: ^Event) -> bool --- + SetEventFilter :: proc(filter: EventFilter, userdata: rawptr) --- + GetEventFilter :: proc(filter: ^EventFilter, userdata: ^rawptr) -> bool --- + AddEventWatch :: proc(filter: EventFilter, userdata: rawptr) -> bool --- + RemoveEventWatch :: proc(filter: EventFilter, userdata: rawptr) --- + FilterEvents :: proc(filter: EventFilter, userdata: rawptr) --- + SetEventEnabled :: proc(type: EventType, enabled: bool) --- + EventEnabled :: proc(type: EventType) -> bool --- + RegisterEvents :: proc(numevents: c.int) -> Uint32 --- + GetWindowFromEvent :: proc(#by_ptr event: Event) -> ^Window --- + GetEventDescription :: proc(#by_ptr event: Event, buf: [^]u8, buflen: c.int) -> c.int --- +} diff --git a/vendor/sdl3/sdl3_gpu.odin b/vendor/sdl3/sdl3_gpu.odin index def222739..85f05db83 100644 --- a/vendor/sdl3/sdl3_gpu.odin +++ b/vendor/sdl3/sdl3_gpu.odin @@ -624,10 +624,10 @@ GPURasterizerState :: struct { GPUMultisampleState :: struct { - sample_count: GPUSampleCount, /**< The number of samples to be used in rasterization. */ - sample_mask: Uint32, /**< Reserved for future use. Must be set to 0. */ - enable_mask: bool, /**< Reserved for future use. Must be set to false. */ - _: Uint8, + sample_count: GPUSampleCount, /**< The number of samples to be used in rasterization. */ + sample_mask: Uint32, /**< Reserved for future use. Must be set to 0. */ + enable_mask: bool, /**< Reserved for future use. Must be set to false. */ + enable_alpha_to_coverage: bool, /**< true enables the alpha-to-coverage feature. */ _: Uint8, _: Uint8, } @@ -718,8 +718,8 @@ GPUDepthStencilTargetInfo :: struct { stencil_store_op: GPUStoreOp, /**< What is done with the stencil results of the render pass. */ cycle: bool, /**< true cycles the texture if the texture is bound and any load ops are not LOAD */ clear_stencil: Uint8, /**< The value to clear the stencil component to at the beginning of the render pass. Ignored if GPU_LOADOP_CLEAR is not used. */ - _: Uint8, - _: Uint8, + mip_level: Uint8, /**< The mip level to use as the depth stencil target. */ + layer: Uint8, /**< The layer index to use as the depth stencil target. */ } @@ -765,16 +765,34 @@ GPUStorageTextureReadWriteBinding :: struct { } -PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN :: "SDL.gpu.device.create.debugmode" -PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN :: "SDL.gpu.device.create.preferlowpower" -PROP_GPU_DEVICE_CREATE_NAME_STRING :: "SDL.gpu.device.create.name" -PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN :: "SDL.gpu.device.create.shaders.private" -PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN :: "SDL.gpu.device.create.shaders.spirv" -PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN :: "SDL.gpu.device.create.shaders.dxbc" -PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN :: "SDL.gpu.device.create.shaders.dxil" -PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN :: "SDL.gpu.device.create.shaders.msl" -PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN :: "SDL.gpu.device.create.shaders.metallib" -PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING :: "SDL.gpu.device.create.d3d12.semantic" +PROP_GPU_DEVICE_CREATE_DEBUGMODE_BOOLEAN :: "SDL.gpu.device.create.debugmode" +PROP_GPU_DEVICE_CREATE_PREFERLOWPOWER_BOOLEAN :: "SDL.gpu.device.create.preferlowpower" +PROP_GPU_DEVICE_CREATE_VERBOSE_BOOLEAN :: "SDL.gpu.device.create.verbose" +PROP_GPU_DEVICE_CREATE_NAME_STRING :: "SDL.gpu.device.create.name" +PROP_GPU_DEVICE_CREATE_FEATURE_CLIP_DISTANCE_BOOLEAN :: "SDL.gpu.device.create.feature.clip_distance" +PROP_GPU_DEVICE_CREATE_FEATURE_DEPTH_CLAMPING_BOOLEAN :: "SDL.gpu.device.create.feature.depth_clamping" +PROP_GPU_DEVICE_CREATE_FEATURE_INDIRECT_DRAW_FIRST_INSTANCE_BOOLEAN :: "SDL.gpu.device.create.feature.indirect_draw_first_instance" +PROP_GPU_DEVICE_CREATE_FEATURE_ANISOTROPY_BOOLEAN :: "SDL.gpu.device.create.feature.anisotropy" +PROP_GPU_DEVICE_CREATE_SHADERS_PRIVATE_BOOLEAN :: "SDL.gpu.device.create.shaders.private" +PROP_GPU_DEVICE_CREATE_SHADERS_SPIRV_BOOLEAN :: "SDL.gpu.device.create.shaders.spirv" +PROP_GPU_DEVICE_CREATE_SHADERS_DXBC_BOOLEAN :: "SDL.gpu.device.create.shaders.dxbc" +PROP_GPU_DEVICE_CREATE_SHADERS_DXIL_BOOLEAN :: "SDL.gpu.device.create.shaders.dxil" +PROP_GPU_DEVICE_CREATE_SHADERS_MSL_BOOLEAN :: "SDL.gpu.device.create.shaders.msl" +PROP_GPU_DEVICE_CREATE_SHADERS_METALLIB_BOOLEAN :: "SDL.gpu.device.create.shaders.metallib" +PROP_GPU_DEVICE_CREATE_D3D12_ALLOW_FEWER_RESOURCE_SLOTS_BOOLEAN :: "SDL.gpu.device.create.d3d12.allowtier1resourcebinding" +PROP_GPU_DEVICE_CREATE_D3D12_SEMANTIC_NAME_STRING :: "SDL.gpu.device.create.d3d12.semantic" +PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEAN :: "SDL.gpu.device.create.vulkan.requirehardwareacceleration" +PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTER :: "SDL.gpu.device.create.vulkan.options" + +GPUVulkanOptions :: struct { + vulkan_api_version: Uint32, /**< The Vulkan API version to request for the instance. Use Vulkan's VK_MAKE_VERSION or VK_MAKE_API_VERSION. */ + feature_list: rawptr, /**< Pointer to the first element of a chain of Vulkan feature structs. (Requires API version 1.1 or higher.)*/ + vulkan_10_physical_device_features: rawptr, /**< Pointer to a VkPhysicalDeviceFeatures struct to enable additional Vulkan 1.0 features. */ + device_extension_count: Uint32, /**< Number of additional device extensions to require. */ + device_extension_names: [^]cstring, /**< Pointer to a list of additional device extensions to require. */ + instance_extension_count: Uint32, /**< Number of additional instance extensions to require. */ + instance_extension_names: [^]cstring, /**< Pointer to a list of additional instance extensions to require. */ +} PROP_GPU_COMPUTEPIPELINE_CREATE_NAME_STRING :: "SDL.gpu.computepipeline.create.name" PROP_GPU_GRAPHICSPIPELINE_CREATE_NAME_STRING :: "SDL.gpu.graphicspipeline.create.name" @@ -790,6 +808,11 @@ PROP_GPU_TEXTURE_CREATE_NAME_STRING :: "SDL.gpu.texture.create.na PROP_GPU_BUFFER_CREATE_NAME_STRING :: "SDL.gpu.buffer.create.name" PROP_GPU_TRANSFERBUFFER_CREATE_NAME_STRING :: "SDL.gpu.transferbuffer.create.name" +PROP_GPU_DEVICE_NAME_STRING :: "SDL.gpu.device.name" +PROP_GPU_DEVICE_DRIVER_NAME_STRING :: "SDL.gpu.device.driver_name" +PROP_GPU_DEVICE_DRIVER_VERSION_STRING :: "SDL.gpu.device.driver_version" +PROP_GPU_DEVICE_DRIVER_INFO_STRING :: "SDL.gpu.device.driver_info" + @(default_calling_convention="c", link_prefix="SDL_", require_results) foreign lib { GPUSupportsShaderFormats :: proc(format_flags: GPUShaderFormat, name: cstring) -> bool --- @@ -884,6 +907,8 @@ foreign lib { GPUTextureSupportsFormat :: proc(device: ^GPUDevice, format: GPUTextureFormat, type: GPUTextureType, usage: GPUTextureUsageFlags) -> bool --- GPUTextureSupportsSampleCount :: proc(device: ^GPUDevice, format: GPUTextureFormat, sample_count: GPUSampleCount) -> bool --- CalculateGPUTextureFormatSize :: proc(format: GPUTextureFormat, width, height: Uint32, depth_or_layer_count: Uint32) -> Uint32 --- + GetPixelFormatFromGPUTextureFormat :: proc(format: GPUTextureFormat) -> PixelFormat --- + GetGPUTextureFormatFromPixelFormat :: proc(format: PixelFormat) -> GPUTextureFormat --- } diff --git a/vendor/sdl3/sdl3_hidapi.odin b/vendor/sdl3/sdl3_hidapi.odin index 6817bffa2..71286cb3d 100644 --- a/vendor/sdl3/sdl3_hidapi.odin +++ b/vendor/sdl3/sdl3_hidapi.odin @@ -75,6 +75,7 @@ hid_device_info :: struct { next: ^hid_device_info, } +PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTER :: "SDL.hidapi.libusb.device.handle" @(default_calling_convention="c", link_prefix="SDL_", require_results) foreign lib { @@ -85,6 +86,7 @@ foreign lib { hid_free_enumeration :: proc(devs: ^hid_device_info) --- hid_open :: proc(vendor_id, product_id: c.ushort, serial_number: [^]c.wchar_t) -> ^hid_device --- hid_open_path :: proc(path: cstring) -> ^hid_device --- + hid_get_properties :: proc(dev: ^hid_device) -> PropertiesID --- hid_write :: proc(dev: ^hid_device, data: [^]byte, length: uint) -> c.int --- hid_read_timeout :: proc(dev: ^hid_device, data: [^]byte, length: uint, milliseconds: c.int) -> c.int --- hid_read :: proc(dev: ^hid_device, data: [^]byte, length: uint) -> c.int --- @@ -100,4 +102,4 @@ foreign lib { hid_get_device_info :: proc(dev: ^hid_device) -> ^hid_device_info --- hid_get_report_descriptor :: proc(dev: ^hid_device, buf: [^]byte, buf_size: uint) -> c.int --- hid_ble_scan :: proc(active: bool) --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_hints.odin b/vendor/sdl3/sdl3_hints.odin index 987010c57..8ef09295e 100644 --- a/vendor/sdl3/sdl3_hints.odin +++ b/vendor/sdl3/sdl3_hints.odin @@ -95,9 +95,15 @@ HINT_JOYSTICK_HIDAPI_STEAM :: "SDL_JOYSTICK_HIDAPI_STEAM" HINT_JOYSTICK_HIDAPI_STEAM_HOME_LED :: "SDL_JOYSTICK_HIDAPI_STEAM_HOME_LED" HINT_JOYSTICK_HIDAPI_STEAMDECK :: "SDL_JOYSTICK_HIDAPI_STEAMDECK" HINT_JOYSTICK_HIDAPI_STEAM_HORI :: "SDL_JOYSTICK_HIDAPI_STEAM_HORI" +HINT_JOYSTICK_HIDAPI_LG4FF :: "SDL_JOYSTICK_HIDAPI_LG4FF" +HINT_JOYSTICK_HIDAPI_8BITDO :: "SDL_JOYSTICK_HIDAPI_8BITDO" +HINT_JOYSTICK_HIDAPI_SINPUT :: "SDL_JOYSTICK_HIDAPI_SINPUT" +HINT_JOYSTICK_HIDAPI_ZUIKI :: "SDL_JOYSTICK_HIDAPI_ZUIKI" +HINT_JOYSTICK_HIDAPI_FLYDIGI :: "SDL_JOYSTICK_HIDAPI_FLYDIGI" HINT_JOYSTICK_HIDAPI_SWITCH :: "SDL_JOYSTICK_HIDAPI_SWITCH" HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED :: "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED :: "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED" +HINT_JOYSTICK_HIDAPI_SWITCH2 :: "SDL_JOYSTICK_HIDAPI_SWITCH2" HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS :: "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS" HINT_JOYSTICK_HIDAPI_WII :: "SDL_JOYSTICK_HIDAPI_WII" HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED :: "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED" @@ -107,6 +113,8 @@ HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED :: "SDL_JOYSTICK_HIDAPI_XBOX_360_PL HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS :: "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS" HINT_JOYSTICK_HIDAPI_XBOX_ONE :: "SDL_JOYSTICK_HIDAPI_XBOX_ONE" HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED :: "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED" +HINT_JOYSTICK_HIDAPI_GIP :: "SDL_JOYSTICK_HIDAPI_GIP" +HINT_JOYSTICK_HIDAPI_GIP_RESET_FOR_METADATA :: "SDL_JOYSTICK_HIDAPI_GIP_RESET_FOR_METADATA" HINT_JOYSTICK_IOKIT :: "SDL_JOYSTICK_IOKIT" HINT_JOYSTICK_LINUX_CLASSIC :: "SDL_JOYSTICK_LINUX_CLASSIC" HINT_JOYSTICK_LINUX_DEADZONES :: "SDL_JOYSTICK_LINUX_DEADZONES" @@ -127,17 +135,20 @@ HINT_JOYSTICK_HAPTIC_AXES :: "SDL_JOYSTICK_HAPTIC_AXES" HINT_KEYCODE_OPTIONS :: "SDL_KEYCODE_OPTIONS" HINT_KMSDRM_DEVICE_INDEX :: "SDL_KMSDRM_DEVICE_INDEX" HINT_KMSDRM_REQUIRE_DRM_MASTER :: "SDL_KMSDRM_REQUIRE_DRM_MASTER" +HINT_KMSDRM_ATOMIC :: "SDL_KMSDRM_ATOMIC" HINT_LOGGING :: "SDL_LOGGING" HINT_MAC_BACKGROUND_APP :: "SDL_MAC_BACKGROUND_APP" HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK :: "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" HINT_MAC_OPENGL_ASYNC_DISPATCH :: "SDL_MAC_OPENGL_ASYNC_DISPATCH" HINT_MAC_OPTION_AS_ALT :: "SDL_MAC_OPTION_AS_ALT" HINT_MAC_SCROLL_MOMENTUM :: "SDL_MAC_SCROLL_MOMENTUM" +HINT_MAC_PRESS_AND_HOLD :: "SDL_MAC_PRESS_AND_HOLD" HINT_MAIN_CALLBACK_RATE :: "SDL_MAIN_CALLBACK_RATE" HINT_MOUSE_AUTO_CAPTURE :: "SDL_MOUSE_AUTO_CAPTURE" HINT_MOUSE_DOUBLE_CLICK_RADIUS :: "SDL_MOUSE_DOUBLE_CLICK_RADIUS" HINT_MOUSE_DOUBLE_CLICK_TIME :: "SDL_MOUSE_DOUBLE_CLICK_TIME" HINT_MOUSE_DEFAULT_SYSTEM_CURSOR :: "SDL_MOUSE_DEFAULT_SYSTEM_CURSOR" +HINT_MOUSE_DPI_SCALE_CURSORS :: "SDL_MOUSE_DPI_SCALE_CURSORS" HINT_MOUSE_EMULATE_WARP_WITH_RELATIVE :: "SDL_MOUSE_EMULATE_WARP_WITH_RELATIVE" HINT_MOUSE_FOCUS_CLICKTHROUGH :: "SDL_MOUSE_FOCUS_CLICKTHROUGH" HINT_MOUSE_NORMAL_SPEED_SCALE :: "SDL_MOUSE_NORMAL_SPEED_SCALE" @@ -159,6 +170,7 @@ HINT_PREFERRED_LOCALES :: "SDL_PREFERRED_LOCALES" HINT_QUIT_ON_LAST_WINDOW_CLOSE :: "SDL_QUIT_ON_LAST_WINDOW_CLOSE" HINT_RENDER_DIRECT3D_THREADSAFE :: "SDL_RENDER_DIRECT3D_THREADSAFE" HINT_RENDER_DIRECT3D11_DEBUG :: "SDL_RENDER_DIRECT3D11_DEBUG" +HINT_RENDER_DIRECT3D11_WARP :: "SDL_RENDER_DIRECT3D11_WARP" HINT_RENDER_VULKAN_DEBUG :: "SDL_RENDER_VULKAN_DEBUG" HINT_RENDER_GPU_DEBUG :: "SDL_RENDER_GPU_DEBUG" HINT_RENDER_GPU_LOW_POWER :: "SDL_RENDER_GPU_LOW_POWER" @@ -169,6 +181,10 @@ HINT_RENDER_VSYNC :: "SDL_RENDER_VSYNC" HINT_RETURN_KEY_HIDES_IME :: "SDL_RETURN_KEY_HIDES_IME" HINT_ROG_GAMEPAD_MICE :: "SDL_ROG_GAMEPAD_MICE" HINT_ROG_GAMEPAD_MICE_EXCLUDED :: "SDL_ROG_GAMEPAD_MICE_EXCLUDED" +HINT_PS2_GS_WIDTH :: "SDL_PS2_GS_WIDTH" +HINT_PS2_GS_HEIGHT :: "SDL_PS2_GS_HEIGHT" +HINT_PS2_GS_PROGRESSIVE :: "SDL_PS2_GS_PROGRESSIVE" +HINT_PS2_GS_MODE :: "SDL_PS2_GS_MODE" HINT_RPI_VIDEO_LAYER :: "SDL_RPI_VIDEO_LAYER" HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME :: "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" HINT_SHUTDOWN_DBUS_ON_QUIT :: "SDL_SHUTDOWN_DBUS_ON_QUIT" @@ -189,6 +205,8 @@ HINT_VIDEO_EGL_ALLOW_GETDISPLAY_FALLBACK :: "SDL_VIDEO_EGL_ALLOW_GETDISPLAY_ HINT_VIDEO_FORCE_EGL :: "SDL_VIDEO_FORCE_EGL" HINT_VIDEO_MAC_FULLSCREEN_SPACES :: "SDL_VIDEO_MAC_FULLSCREEN_SPACES" HINT_VIDEO_MAC_FULLSCREEN_MENU_VISIBILITY :: "SDL_VIDEO_MAC_FULLSCREEN_MENU_VISIBILITY" +HINT_VIDEO_METAL_AUTO_RESIZE_DRAWABLE :: "SDL_VIDEO_METAL_AUTO_RESIZE_DRAWABLE" +HINT_VIDEO_MATCH_EXCLUSIVE_MODE_ON_MOVE :: "SDL_VIDEO_MATCH_EXCLUSIVE_MODE_ON_MOVE" HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS :: "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" HINT_VIDEO_OFFSCREEN_SAVE_FRAMES :: "SDL_VIDEO_OFFSCREEN_SAVE_FRAMES" HINT_VIDEO_SYNC_WINDOW_OPERATIONS :: "SDL_VIDEO_SYNC_WINDOW_OPERATIONS" @@ -263,4 +281,4 @@ foreign lib { ResetHints :: proc() --- AddHintCallback :: proc(name: cstring, callback: HintCallback, userdata: rawptr) -> bool --- RemoveHintCallback :: proc(name: cstring, callback: HintCallback, userdata: rawptr) --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_iostream.odin b/vendor/sdl3/sdl3_iostream.odin index 2f89c2ba6..f57dc947d 100644 --- a/vendor/sdl3/sdl3_iostream.odin +++ b/vendor/sdl3/sdl3_iostream.odin @@ -44,6 +44,7 @@ PROP_IOSTREAM_FILE_DESCRIPTOR_NUMBER :: "SDL.iostream.file_descriptor" PROP_IOSTREAM_ANDROID_AASSET_POINTER :: "SDL.iostream.android.aasset" PROP_IOSTREAM_MEMORY_POINTER :: "SDL.iostream.memory.base" PROP_IOSTREAM_MEMORY_SIZE_NUMBER :: "SDL.iostream.memory.size" +PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTER :: "SDL.iostream.memory.free" PROP_IOSTREAM_DYNAMIC_MEMORY_POINTER :: "SDL.iostream.dynamic.memory" PROP_IOSTREAM_DYNAMIC_CHUNKSIZE_NUMBER :: "SDL.iostream.dynamic.chunksize" diff --git a/vendor/sdl3/sdl3_mouse.odin b/vendor/sdl3/sdl3_mouse.odin index 3bc3aa57f..2a087a34c 100644 --- a/vendor/sdl3/sdl3_mouse.odin +++ b/vendor/sdl3/sdl3_mouse.odin @@ -34,6 +34,11 @@ MouseWheelDirection :: enum c.int { FLIPPED, /**< The scroll direction is flipped / natural */ } +CursorFrameInfo :: struct { + surface: ^Surface, + duration: Uint32, +} + MouseButtonFlags :: distinct bit_set[MouseButtonFlag; Uint32] MouseButtonFlag :: enum Uint32 { LEFT = 1 - 1, @@ -55,6 +60,8 @@ BUTTON_RMASK :: MouseButtonFlags{.RIGHT} BUTTON_X1MASK :: MouseButtonFlags{.X1} BUTTON_X2MASK :: MouseButtonFlags{.X2} +MouseMotionTransformCallback :: #type proc "c" (userdata: rawptr, timestamp: Uint64, window: ^Window, mouseID: MouseID, x, y: ^f32) + @(default_calling_convention="c", link_prefix="SDL_", require_results) foreign lib { HasMouse :: proc() -> bool --- @@ -66,11 +73,13 @@ foreign lib { GetRelativeMouseState :: proc(x, y: ^f32) -> MouseButtonFlags --- WarpMouseInWindow :: proc(window: ^Window, x, y: f32) --- WarpMouseGlobal :: proc(x, y: f32) -> bool --- + SetRelativeMouseTransform :: proc(callback: MouseMotionTransformCallback, userdata: rawptr) -> bool --- SetWindowRelativeMouseMode :: proc(window: ^Window, enabled: bool) -> bool --- GetWindowRelativeMouseMode :: proc(window: ^Window) -> bool --- CaptureMouse :: proc(enabled: bool) -> bool --- CreateCursor :: proc(data: [^]byte, mask: [^]Uint8, w, h, hot_x, hot_y: c.int) -> ^Cursor --- CreateColorCursor :: proc(surface: ^Surface, hot_x, hot_y: c.int) -> ^Cursor --- + CreateAnimatedCursor :: proc(frames: [^]CursorFrameInfo, frame_count, hot_x, hot_y: c.int) -> ^Cursor --- CreateSystemCursor :: proc(id: SystemCursor) -> ^Cursor --- SetCursor :: proc(cursor: ^Cursor) -> bool --- GetCursor :: proc() -> ^Cursor --- @@ -79,4 +88,4 @@ foreign lib { ShowCursor :: proc() -> bool --- HideCursor :: proc() -> bool --- CursorVisible :: proc() -> bool --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_pen.odin b/vendor/sdl3/sdl3_pen.odin index 81e820e6b..c28e7338b 100644 --- a/vendor/sdl3/sdl3_pen.odin +++ b/vendor/sdl3/sdl3_pen.odin @@ -10,13 +10,14 @@ PEN_TOUCHID :: TouchID(1<<64 - 2) PenInputFlags :: distinct bit_set[PenInputFlag; Uint32] PenInputFlag :: enum Uint32 { - DOWN = 0, /**< pen is pressed down */ - BUTTON_1 = 1, /**< button 1 is pressed */ - BUTTON_2 = 2, /**< button 2 is pressed */ - BUTTON_3 = 3, /**< button 3 is pressed */ - BUTTON_4 = 4, /**< button 4 is pressed */ - BUTTON_5 = 5, /**< button 5 is pressed */ - ERASER_TIP = 30, /**< eraser tip is used */ + DOWN = 0, /**< pen is pressed down */ + BUTTON_1 = 1, /**< button 1 is pressed */ + BUTTON_2 = 2, /**< button 2 is pressed */ + BUTTON_3 = 3, /**< button 3 is pressed */ + BUTTON_4 = 4, /**< button 4 is pressed */ + BUTTON_5 = 5, /**< button 5 is pressed */ + ERASER_TIP = 30, /**< eraser tip is used */ + IN_PROXIMITY = 31, /**< pen is in proximity (since SDL 3.4.0) */ } PenAxis :: enum c.int { @@ -27,4 +28,16 @@ PenAxis :: enum c.int { ROTATION, /**< Pen barrel rotation. Bidirectional: -180 to 179.9 (clockwise, 0 is facing up, -180.0 is facing down). */ SLIDER, /**< Pen finger wheel or slider (e.g., Airbrush Pen). Unidirectional: 0 to 1.0 */ TANGENTIAL_PRESSURE, /**< Pressure from squeezing the pen ("barrel pressure"). */ -} \ No newline at end of file +} + +PenDeviceType :: enum c.int { + INVALID = -1, /**< Not a valid pen device. */ + UNKNOWN, /**< Don't know specifics of this pen. */ + DIRECT, /**< Pen touches display. */ + INDIRECT /**< Pen touches something that isn't the display. */ +} + +@(default_calling_convention="c", link_prefix="SDL_", require_results) +foreign lib { + GetPenDeviceType :: proc(instance_id: PenID) --- +} diff --git a/vendor/sdl3/sdl3_pixels.odin b/vendor/sdl3/sdl3_pixels.odin index a636d13ff..e3a1c1537 100644 --- a/vendor/sdl3/sdl3_pixels.odin +++ b/vendor/sdl3/sdl3_pixels.odin @@ -518,7 +518,7 @@ Colorspace :: enum c.int { SDL_CHROMA_LOCATION_LEFT), */ RGB_DEFAULT = SRGB, /**< The default colorspace for RGB surfaces if no colorspace is specified */ - YUV_DEFAULT = JPEG, /**< The default colorspace for YUV surfaces if no colorspace is specified */ + YUV_DEFAULT = BT601_LIMITED, /**< The default colorspace for YUV surfaces if no colorspace is specified */ } Color :: distinct [4]Uint8 @@ -561,6 +561,6 @@ foreign lib { DestroyPalette :: proc(palette: ^Palette) --- MapRGB :: proc(format: ^PixelFormatDetails, palette: ^Palette, r, g, b: Uint8) -> Uint32 --- MapRGBA :: proc(format: ^PixelFormatDetails, palette: ^Palette, r, g, b, a: Uint8) -> Uint32 --- - GetRGB :: proc(pixel: Uint32, format: ^PixelFormatDetails, palette: ^Palette, r, g, b: ^Uint8) --- - GetRGBA :: proc(pixel: Uint32, format: ^PixelFormatDetails, palette: ^Palette, r, g, b, a: ^Uint8) --- + GetRGB :: proc(pixelvalue: Uint32, format: ^PixelFormatDetails, palette: ^Palette, r, g, b: ^Uint8) --- + GetRGBA :: proc(pixelvalue: Uint32, format: ^PixelFormatDetails, palette: ^Palette, r, g, b, a: ^Uint8) --- } diff --git a/vendor/sdl3/sdl3_process.odin b/vendor/sdl3/sdl3_process.odin index d3ba6f2ba..71686a444 100644 --- a/vendor/sdl3/sdl3_process.odin +++ b/vendor/sdl3/sdl3_process.odin @@ -13,6 +13,7 @@ ProcessIO :: enum c.int { PROP_PROCESS_CREATE_ARGS_POINTER :: "SDL.process.create.args" PROP_PROCESS_CREATE_ENVIRONMENT_POINTER :: "SDL.process.create.environment" +PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRING :: "SDL.process.create.working_directory" PROP_PROCESS_CREATE_STDIN_NUMBER :: "SDL.process.create.stdin_option" PROP_PROCESS_CREATE_STDIN_POINTER :: "SDL.process.create.stdin_source" PROP_PROCESS_CREATE_STDOUT_NUMBER :: "SDL.process.create.stdout_option" @@ -21,6 +22,7 @@ PROP_PROCESS_CREATE_STDERR_NUMBER :: "SDL.process.create.stderr_op PROP_PROCESS_CREATE_STDERR_POINTER :: "SDL.process.create.stderr_source" PROP_PROCESS_CREATE_STDERR_TO_STDOUT_BOOLEAN :: "SDL.process.create.stderr_to_stdout" PROP_PROCESS_CREATE_BACKGROUND_BOOLEAN :: "SDL.process.create.background" +PROP_PROCESS_CREATE_CMDLINE_STRING :: "SDL.process.create.cmdline" PROP_PROCESS_PID_NUMBER :: "SDL.process.pid" PROP_PROCESS_STDIN_POINTER :: "SDL.process.stdin" @@ -39,4 +41,4 @@ foreign lib { KillProcess :: proc(process: ^Process, force: bool) -> bool --- WaitProcess :: proc(process: ^Process, block: bool, exitcode: ^c.int) -> bool --- DestroyProcess :: proc(process: ^Process) --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_render.odin b/vendor/sdl3/sdl3_render.odin index 5af4bb055..191dbecfe 100644 --- a/vendor/sdl3/sdl3_render.odin +++ b/vendor/sdl3/sdl3_render.odin @@ -4,6 +4,7 @@ import "core:c" SOFTWARE_RENDERER :: "software" +GPU_RENDER :: "gpu" Vertex :: struct { position: FPoint, /**< Vertex position, in SDL_Renderer coordinates */ @@ -17,6 +18,13 @@ TextureAccess :: enum c.int { TARGET, /**< Texture can be used as a render target */ } +TextureAddressMode :: enum c.int { + TEXTURE_ADDRESS_INVALID = -1, + TEXTURE_ADDRESS_AUTO, /**< Wrapping is enabled if texture coordinates are outside [0, 1], this is the default */ + TEXTURE_ADDRESS_CLAMP, /**< Texture coordinates are clamped to the [0, 1] range */ + TEXTURE_ADDRESS_WRAP /**< The texture is repeated (tiled) */ +} + RendererLogicalPresentation :: enum c.int { DISABLED, /**< There is no logical size in effect */ STRETCH, /**< The rendered content is stretched to the output resolution */ @@ -40,6 +48,10 @@ PROP_RENDERER_CREATE_WINDOW_POINTER :: "SDL.renderer PROP_RENDERER_CREATE_SURFACE_POINTER :: "SDL.renderer.create.surface" PROP_RENDERER_CREATE_OUTPUT_COLORSPACE_NUMBER :: "SDL.renderer.create.output_colorspace" PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER :: "SDL.renderer.create.present_vsync" +PROP_RENDERER_CREATE_GPU_DEVICE_POINTER :: "SDL.renderer.create.gpu.device" +PROP_RENDERER_CREATE_GPU_SHADERS_SPIRV_BOOLEAN :: "SDL.renderer.create.gpu.shaders_spirv" +PROP_RENDERER_CREATE_GPU_SHADERS_DXIL_BOOLEAN :: "SDL.renderer.create.gpu.shaders_dxil" +PROP_RENDERER_CREATE_GPU_SHADERS_MSL_BOOLEAN :: "SDL.renderer.create.gpu.shaders_msl" PROP_RENDERER_CREATE_VULKAN_INSTANCE_POINTER :: "SDL.renderer.create.vulkan.instance" PROP_RENDERER_CREATE_VULKAN_SURFACE_NUMBER :: "SDL.renderer.create.vulkan.surface" PROP_RENDERER_CREATE_VULKAN_PHYSICAL_DEVICE_POINTER :: "SDL.renderer.create.vulkan.physical_device" @@ -53,6 +65,7 @@ PROP_RENDERER_SURFACE_POINTER :: "SDL.renderer.surface PROP_RENDERER_VSYNC_NUMBER :: "SDL.renderer.vsync" PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER :: "SDL.renderer.max_texture_size" PROP_RENDERER_TEXTURE_FORMATS_POINTER :: "SDL.renderer.texture_formats" +PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN :: "SDL.renderer.texture_wrapping" PROP_RENDERER_OUTPUT_COLORSPACE_NUMBER :: "SDL.renderer.output_colorspace" PROP_RENDERER_HDR_ENABLED_BOOLEAN :: "SDL.renderer.HDR_enabled" PROP_RENDERER_SDR_WHITE_POINT_FLOAT :: "SDL.renderer.SDR_white_point" @@ -72,29 +85,35 @@ PROP_RENDERER_VULKAN_PRESENT_QUEUE_FAMILY_INDEX_NUMBER :: "SDL.renderer.vulkan. PROP_RENDERER_VULKAN_SWAPCHAIN_IMAGE_COUNT_NUMBER :: "SDL.renderer.vulkan.swapchain_image_count" PROP_RENDERER_GPU_DEVICE_POINTER :: "SDL.renderer.gpu.device" -PROP_TEXTURE_CREATE_COLORSPACE_NUMBER :: "SDL.texture.create.colorspace" -PROP_TEXTURE_CREATE_FORMAT_NUMBER :: "SDL.texture.create.format" -PROP_TEXTURE_CREATE_ACCESS_NUMBER :: "SDL.texture.create.access" -PROP_TEXTURE_CREATE_WIDTH_NUMBER :: "SDL.texture.create.width" -PROP_TEXTURE_CREATE_HEIGHT_NUMBER :: "SDL.texture.create.height" -PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT :: "SDL.texture.create.SDR_white_point" -PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT :: "SDL.texture.create.HDR_headroom" -PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER :: "SDL.texture.create.d3d11.texture" -PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER :: "SDL.texture.create.d3d11.texture_u" -PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER :: "SDL.texture.create.d3d11.texture_v" -PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER :: "SDL.texture.create.d3d12.texture" -PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER :: "SDL.texture.create.d3d12.texture_u" -PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER :: "SDL.texture.create.d3d12.texture_v" -PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER :: "SDL.texture.create.metal.pixelbuffer" -PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER :: "SDL.texture.create.opengl.texture" -PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER :: "SDL.texture.create.opengl.texture_uv" -PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER :: "SDL.texture.create.opengl.texture_u" -PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER :: "SDL.texture.create.opengl.texture_v" -PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER :: "SDL.texture.create.opengles2.texture" -PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER :: "SDL.texture.create.opengles2.texture_uv" -PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER :: "SDL.texture.create.opengles2.texture_u" -PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER :: "SDL.texture.create.opengles2.texture_v" -PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER :: "SDL.texture.create.vulkan.texture" +PROP_TEXTURE_CREATE_COLORSPACE_NUMBER :: "SDL.texture.create.colorspace" +PROP_TEXTURE_CREATE_FORMAT_NUMBER :: "SDL.texture.create.format" +PROP_TEXTURE_CREATE_ACCESS_NUMBER :: "SDL.texture.create.access" +PROP_TEXTURE_CREATE_WIDTH_NUMBER :: "SDL.texture.create.width" +PROP_TEXTURE_CREATE_HEIGHT_NUMBER :: "SDL.texture.create.height" +PROP_TEXTURE_CREATE_PALETTE_POINTER :: "SDL.texture.create.palette" +PROP_TEXTURE_CREATE_SDR_WHITE_POINT_FLOAT :: "SDL.texture.create.SDR_white_point" +PROP_TEXTURE_CREATE_HDR_HEADROOM_FLOAT :: "SDL.texture.create.HDR_headroom" +PROP_TEXTURE_CREATE_D3D11_TEXTURE_POINTER :: "SDL.texture.create.d3d11.texture" +PROP_TEXTURE_CREATE_D3D11_TEXTURE_U_POINTER :: "SDL.texture.create.d3d11.texture_u" +PROP_TEXTURE_CREATE_D3D11_TEXTURE_V_POINTER :: "SDL.texture.create.d3d11.texture_v" +PROP_TEXTURE_CREATE_D3D12_TEXTURE_POINTER :: "SDL.texture.create.d3d12.texture" +PROP_TEXTURE_CREATE_D3D12_TEXTURE_U_POINTER :: "SDL.texture.create.d3d12.texture_u" +PROP_TEXTURE_CREATE_D3D12_TEXTURE_V_POINTER :: "SDL.texture.create.d3d12.texture_v" +PROP_TEXTURE_CREATE_METAL_PIXELBUFFER_POINTER :: "SDL.texture.create.metal.pixelbuffer" +PROP_TEXTURE_CREATE_OPENGL_TEXTURE_NUMBER :: "SDL.texture.create.opengl.texture" +PROP_TEXTURE_CREATE_OPENGL_TEXTURE_UV_NUMBER :: "SDL.texture.create.opengl.texture_uv" +PROP_TEXTURE_CREATE_OPENGL_TEXTURE_U_NUMBER :: "SDL.texture.create.opengl.texture_u" +PROP_TEXTURE_CREATE_OPENGL_TEXTURE_V_NUMBER :: "SDL.texture.create.opengl.texture_v" +PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_NUMBER :: "SDL.texture.create.opengles2.texture" +PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_UV_NUMBER :: "SDL.texture.create.opengles2.texture_uv" +PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_U_NUMBER :: "SDL.texture.create.opengles2.texture_u" +PROP_TEXTURE_CREATE_OPENGLES2_TEXTURE_V_NUMBER :: "SDL.texture.create.opengles2.texture_v" +PROP_TEXTURE_CREATE_VULKAN_TEXTURE_NUMBER :: "SDL.texture.create.vulkan.texture" +PROP_TEXTURE_CREATE_VULKAN_LAYOUT_NUMBER :: "SDL.texture.create.vulkan.layout" +PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER :: "SDL.texture.create.gpu.texture" +PROP_TEXTURE_CREATE_GPU_TEXTURE_UV_POINTER :: "SDL.texture.create.gpu.texture_uv" +PROP_TEXTURE_CREATE_GPU_TEXTURE_U_POINTER :: "SDL.texture.create.gpu.texture_u" +PROP_TEXTURE_CREATE_GPU_TEXTURE_V_POINTER :: "SDL.texture.create.gpu.texture_v" PROP_TEXTURE_COLORSPACE_NUMBER :: "SDL.texture.colorspace" PROP_TEXTURE_FORMAT_NUMBER :: "SDL.texture.format" @@ -122,6 +141,10 @@ PROP_TEXTURE_OPENGLES2_TEXTURE_U_NUMBER :: "SDL.texture.opengles2.textur PROP_TEXTURE_OPENGLES2_TEXTURE_V_NUMBER :: "SDL.texture.opengles2.texture_v" PROP_TEXTURE_OPENGLES2_TEXTURE_TARGET_NUMBER :: "SDL.texture.opengles2.target" PROP_TEXTURE_VULKAN_TEXTURE_NUMBER :: "SDL.texture.vulkan.texture" +PROP_TEXTURE_GPU_TEXTURE_POINTER :: "SDL.texture.gpu.texture" +PROP_TEXTURE_GPU_TEXTURE_UV_POINTER :: "SDL.texture.gpu.texture_uv" +PROP_TEXTURE_GPU_TEXTURE_U_POINTER :: "SDL.texture.gpu.texture_u" +PROP_TEXTURE_GPU_TEXTURE_V_POINTER :: "SDL.texture.gpu.texture_v" RENDERER_VSYNC_DISABLED :: 0 RENDERER_VSYNC_ADAPTIVE :: -1 @@ -134,6 +157,8 @@ foreign lib { GetRenderDriver :: proc(index: c.int) -> cstring --- CreateRenderer :: proc(window: ^Window, name: cstring) -> ^Renderer --- CreateRendererWithProperties :: proc(props: PropertiesID) -> ^Renderer --- + CreateGPURenderer :: proc(device: ^GPUDevice, window: ^Window) -> ^Renderer --- + GetGPURendererDevice :: proc(device: ^Renderer) -> ^GPUDevice --- CreateSoftwareRenderer :: proc(surface: ^Surface) -> ^Renderer --- GetRenderer :: proc(window: ^Window) -> ^Renderer --- GetRenderWindow :: proc(renderer: ^Renderer) -> ^Window --- @@ -158,6 +183,8 @@ foreign lib { GetRenderOutputSize :: proc(renderer: ^Renderer, w, h: ^c.int) -> bool --- GetCurrentRenderOutputSize :: proc(renderer: ^Renderer, w, h: ^c.int) -> bool --- GetTextureSize :: proc(texture: ^Texture, w, h: ^f32) -> bool --- + SetTexturePalette :: proc(texture: ^Texture, palette: ^Palette) -> bool --- + GetTexturePalette :: proc(texture: ^Texture) -> ^Palette --- SetTextureColorMod :: proc(texture: ^Texture, r, g, b: Uint8) -> bool --- SetTextureColorModFloat :: proc(texture: ^Texture, r, g, b: f32) -> bool --- GetTextureColorMod :: proc(texture: ^Texture, r, g, b: ^Uint8) -> bool --- @@ -212,8 +239,11 @@ foreign lib { RenderTextureAffine :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), origin, right, down: Maybe(^FPoint)) -> bool --- RenderTextureTiled :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), scale: f32, dstrect: Maybe(^FRect)) -> bool --- RenderTexture9Grid :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), left_width, right_width, top_height, bottom_height: f32, scale: f32, dstrect: Maybe(^FRect)) -> bool --- + RenderTexture9GridTiled :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), left_width, right_width, top_height, bottom_height: f32, scale: f32, dstrect: Maybe(^FRect), tileScale: f32) -> bool --- RenderGeometry :: proc(renderer: ^Renderer, texture: ^Texture, vertices: [^]Vertex, num_vertices: c.int, indices: [^]c.int, num_indices: c.int) -> bool --- RenderGeometryRaw :: proc(renderer: ^Renderer, texture: ^Texture, xy: [^]f32, xy_stride: c.int, color: [^]FColor, color_stride: c.int, uv: [^]f32, uv_stride: c.int, num_vertices: c.int, indices: rawptr, num_indices: c.int, size_indices: c.int) -> bool --- + SetRenderTextureAddressMode :: proc(renderer: ^Renderer, u_mode, v_mode: TextureAddressMode) -> bool --- + GetRenderTextureAddressMode :: proc(renderer: ^Renderer, u_mode, v_mode: ^TextureAddressMode) -> bool --- RenderPresent :: proc(renderer: ^Renderer) -> bool --- DestroyTexture :: proc(texture: ^Texture) --- DestroyRenderer :: proc(renderer: ^Renderer) --- @@ -223,4 +253,28 @@ foreign lib { GetRenderVSync :: proc(renderer: ^Renderer, vsync: ^c.int) -> bool --- RenderDebugText :: proc(renderer: ^Renderer, x, y: f32, str: cstring) -> bool --- RenderDebugTextFormat :: proc(renderer: ^Renderer, x, y: f32, fmt: cstring, #c_vararg args: ..any) -> bool --- -} \ No newline at end of file + SetDefaultTextureAddressMode :: proc(renderer: ^Renderer, scale_mode: ScaleMode) -> bool --- + GetDefaultTextureAddressMode :: proc(renderer: ^Renderer, scale_mode: ^ScaleMode) -> bool --- +} + + +GPURenderStateCreateInfo :: struct { + fragment_shader: ^GPUShader, /**< The fragment shader to use when this render state is active */ + num_sampler_bindings: Sint32, /**< The number of additional fragment samplers to bind when this render state is active */ + sampler_bindings: [^]GPUTextureSamplerBinding, /**< Additional fragment samplers to bind when this render state is active */ + num_storage_textures: Sint32, /**< The number of storage textures to bind when this render state is active */ + storage_textures: [^]^GPUTexture, /**< Storage textures to bind when this render state is active */ + num_storage_buffers: Sint32, /**< The number of storage buffers to bind when this render state is active */ + storage_buffers: [^]^GPUBuffer, /**< Storage buffers to bind when this render state is active */ + props: PropertiesID, /**< A properties ID for extensions. Should be 0 if no extensions are needed. */ +} + +GPURenderState :: struct {} + +@(default_calling_convention="c", link_prefix="SDL_", require_results) +foreign lib { + CreateGPURenderState :: proc(renderer: ^Renderer, createinfo: ^GPURenderStateCreateInfo) -> ^GPURenderState --- + SetGPURenderStateFragmentUniforms :: proc(state: ^GPURenderState, slot_index: Uint32, data: rawptr, length: Uint32) -> bool --- + SetGPURenderState :: proc(renderer: ^Renderer, state: ^GPURenderState) -> bool --- + DestroyGPURenderState :: proc(renderer: ^Renderer) --- +} diff --git a/vendor/sdl3/sdl3_surface.odin b/vendor/sdl3/sdl3_surface.odin index 526940147..9aaf54cec 100644 --- a/vendor/sdl3/sdl3_surface.odin +++ b/vendor/sdl3/sdl3_surface.odin @@ -23,14 +23,16 @@ MUSTLOCK :: proc "c" (S: ^Surface) -> bool { ScaleMode :: enum c.int { INVALID = -1, - NEAREST, /**< nearest pixel sampling */ - LINEAR, /**< linear filtering */ + NEAREST, /**< nearest pixel sampling */ + LINEAR, /**< linear filtering */ + PIXELART, /**< nearest pixel sampling with improved scaling for pixel art, available since SDL 3.4.0 */ } FlipMode :: enum c.int { - NONE, /**< Do not flip */ - HORIZONTAL, /**< flip horizontally */ - VERTICAL, /**< flip vertically */ + NONE, /**< Do not flip */ + HORIZONTAL, /**< flip horizontally */ + VERTICAL, /**< flip vertically */ + HORIZONTAL_AND_VERTICAL = HORIZONTAL | VERTICAL, /**< flip horizontally and vertically (not a diagonal flip) */ } Surface :: struct { @@ -51,6 +53,7 @@ PROP_SURFACE_HDR_HEADROOM_FLOAT :: "SDL.surface.HDR_headroom" PROP_SURFACE_TONEMAP_OPERATOR_STRING :: "SDL.surface.tonemap" PROP_SURFACE_HOTSPOT_X_NUMBER :: "SDL.surface.hotspot.x" PROP_SURFACE_HOTSPOT_Y_NUMBER :: "SDL.surface.hotspot.y" +PROP_SURFACE_ROTATION_FLOAT :: "SDL.surface.rotation" @(default_calling_convention="c", link_prefix="SDL_") foreign lib { @@ -69,10 +72,16 @@ foreign lib { RemoveSurfaceAlternateImages :: proc(surface: ^Surface) --- LockSurface :: proc(surface: ^Surface) -> bool --- UnlockSurface :: proc(surface: ^Surface) --- + LoadSurface_IO :: proc(src: ^IOStream, closeio: bool) -> ^Surface --- + LoadSurface :: proc(file: cstring) -> ^Surface --- LoadBMP_IO :: proc(src: ^IOStream, closeio: bool) -> ^Surface --- LoadBMP :: proc(file: cstring) -> ^Surface --- SaveBMP_IO :: proc(surface: ^Surface, dst: ^IOStream, closeio: bool) -> bool --- SaveBMP :: proc(surface: ^Surface, file: cstring) -> bool --- + LoadPNG_IO :: proc(src: ^IOStream, closeio: bool) -> ^Surface --- + LoadPNG :: proc(file: cstring) -> ^Surface --- + SavePNG_IO :: proc(surface: ^Surface, dst: ^IOStream, closeio: bool) -> bool --- + SavePNG :: proc(surface: ^Surface, file: cstring) -> bool --- SetSurfaceRLE :: proc(surface: ^Surface, enabled: bool) -> bool --- SurfaceHasRLE :: proc(surface: ^Surface) -> bool --- SetSurfaceColorKey :: proc(surface: ^Surface, enabled: bool, key: Uint32) -> bool --- @@ -87,6 +96,7 @@ foreign lib { SetSurfaceClipRect :: proc(surface: ^Surface, rect: Maybe(^Rect)) -> bool --- GetSurfaceClipRect :: proc(surface: ^Surface, rect: ^Rect) -> bool --- FlipSurface :: proc(surface: ^Surface, flip: FlipMode) -> bool --- + RotateSurface :: proc(surface: ^Surface, angle: f32) -> ^Surface --- DuplicateSurface :: proc(surface: ^Surface) -> ^Surface --- ScaleSurface :: proc(surface: ^Surface, width, height: c.int, scaleMode: ScaleMode) -> ^Surface --- ConvertSurface :: proc(surface: ^Surface, format: PixelFormat) -> ^Surface --- @@ -112,4 +122,4 @@ foreign lib { ReadSurfacePixelFloat :: proc(surface: ^Surface, x, y: c.int, r, g, b, a: ^f32) -> bool --- WriteSurfacePixel :: proc(surface: ^Surface, x, y: c.int, r, g, b, a: Uint8) -> bool --- WriteSurfacePixelFloat :: proc(surface: ^Surface, x, y: c.int, r, g, b, a: f32) -> bool --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_video.odin b/vendor/sdl3/sdl3_video.odin index 6761bee56..687f3d9a7 100644 --- a/vendor/sdl3/sdl3_video.odin +++ b/vendor/sdl3/sdl3_video.odin @@ -61,6 +61,7 @@ WindowFlag :: enum Uint64 { TOOLTIP = 18, POPUP_MENU = 19, KEYBOARD_GRABBED = 20, + FILL_DOCUMENT = 21, VULKAN = 28, METAL = 29, @@ -133,6 +134,15 @@ FlashOperation :: enum c.int { UNTIL_FOCUSED, /**< Flash the window until it gets focus */ } +ProgressState :: enum c.int { + PROGRESS_STATE_INVALID = -1, /**< An invalid progress state indicating an error; check SDL_GetError() */ + PROGRESS_STATE_NONE, /**< No progress bar is shown */ + PROGRESS_STATE_INDETERMINATE, /**< The progress bar is shown in a indeterminate state */ + PROGRESS_STATE_NORMAL, /**< The progress bar is shown in a normal state */ + PROGRESS_STATE_PAUSED, /**< The progress bar is shown in a paused state */ + PROGRESS_STATE_ERROR /**< The progress bar is shown in a state indicating the application had an error */ +} + GLContextState :: struct {} GLContext :: ^GLContextState EGLDisplay :: distinct rawptr @@ -167,7 +177,7 @@ GLAttr :: enum c.int { CONTEXT_FLAGS, /**< some combination of 0 or more of elements of the SDL_GLContextFlag enumeration; defaults to 0. */ CONTEXT_PROFILE_MASK, /**< type of GL context (Core, Compatibility, ES). See SDL_GLProfile; default value depends on platform. */ SHARE_WITH_CURRENT_CONTEXT, /**< OpenGL context sharing; defaults to 0. */ - FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB capable visual; defaults to 0. */ + FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB-capable visual if 1. Defaults to -1 ("don't care"). This is a request; GL drivers might not comply! */ CONTEXT_RELEASE_BEHAVIOR, /**< sets context the release behavior. See SDL_GLContextReleaseFlag; defaults to FLUSH. */ CONTEXT_RESET_NOTIFICATION, /**< set context reset notification. See SDL_GLContextResetNotification; defaults to NO_NOTIFICATION. */ CONTEXT_NO_ERROR, @@ -275,12 +285,15 @@ PROP_WINDOW_CREATE_X_NUMBER :: "SDL.window.create.x" PROP_WINDOW_CREATE_Y_NUMBER :: "SDL.window.create.y" PROP_WINDOW_CREATE_COCOA_WINDOW_POINTER :: "SDL.window.create.cocoa.window" PROP_WINDOW_CREATE_COCOA_VIEW_POINTER :: "SDL.window.create.cocoa.view" +PROP_WINDOW_CREATE_WINDOWSCENE_POINTER :: "SDL.window.create.uikit.windowscene" PROP_WINDOW_CREATE_WAYLAND_SURFACE_ROLE_CUSTOM_BOOLEAN :: "SDL.window.create.wayland.surface_role_custom" PROP_WINDOW_CREATE_WAYLAND_CREATE_EGL_WINDOW_BOOLEAN :: "SDL.window.create.wayland.create_egl_window" PROP_WINDOW_CREATE_WAYLAND_WL_SURFACE_POINTER :: "SDL.window.create.wayland.wl_surface" PROP_WINDOW_CREATE_WIN32_HWND_POINTER :: "SDL.window.create.win32.hwnd" PROP_WINDOW_CREATE_WIN32_PIXEL_FORMAT_HWND_POINTER :: "SDL.window.create.win32.pixel_format_hwnd" PROP_WINDOW_CREATE_X11_WINDOW_NUMBER :: "SDL.window.create.x11.window" +PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING :: "SDL.window.create.emscripten.canvas_id" +PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING :: "SDL.window.create.emscripten.keyboard_element" PROP_WINDOW_SHAPE_POINTER :: "SDL.window.shape" PROP_WINDOW_HDR_ENABLED_BOOLEAN :: "SDL.window.HDR_enabled" @@ -298,7 +311,7 @@ PROP_WINDOW_KMSDRM_DRM_FD_NUMBER :: "SDL.window.kmsdrm.drm_ PROP_WINDOW_KMSDRM_GBM_DEVICE_POINTER :: "SDL.window.kmsdrm.gbm_dev" PROP_WINDOW_COCOA_WINDOW_POINTER :: "SDL.window.cocoa.window" PROP_WINDOW_COCOA_METAL_VIEW_TAG_NUMBER :: "SDL.window.cocoa.metal_view_tag" -PROP_WINDOW_OPENVR_OVERLAY_ID :: "SDL.window.openvr.overlay_id" +PROP_WINDOW_OPENVR_OVERLAY_ID_NUMBER :: "SDL.window.openvr.overlay_id" PROP_WINDOW_VIVANTE_DISPLAY_POINTER :: "SDL.window.vivante.display" PROP_WINDOW_VIVANTE_WINDOW_POINTER :: "SDL.window.vivante.window" PROP_WINDOW_VIVANTE_SURFACE_POINTER :: "SDL.window.vivante.surface" @@ -317,6 +330,8 @@ PROP_WINDOW_WAYLAND_XDG_POSITIONER_POINTER :: "SDL.window.wayland.xdg PROP_WINDOW_X11_DISPLAY_POINTER :: "SDL.window.x11.display" PROP_WINDOW_X11_SCREEN_NUMBER :: "SDL.window.x11.screen" PROP_WINDOW_X11_WINDOW_NUMBER :: "SDL.window.x11.window" +PROP_WINDOW_EMSCRIPTEN_CANVAS_ID_STRING :: "SDL.window.emscripten.canvas_id" +PROP_WINDOW_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING :: "SDL.window.emscripten.keyboard_element" WINDOW_SURFACE_VSYNC_DISABLED :: 0 WINDOW_SURFACE_VSYNC_ADAPTIVE :: -1 @@ -377,6 +392,7 @@ foreign lib { SetWindowBordered :: proc(window: ^Window, bordered: bool) -> bool --- SetWindowResizable :: proc(window: ^Window, resizable: bool) -> bool --- SetWindowAlwaysOnTop :: proc(window: ^Window, on_top: bool) -> bool --- + SetWindowFillDocument :: proc(window: ^Window, fill: bool) -> bool --- ShowWindow :: proc(window: ^Window) -> bool --- HideWindow :: proc(window: ^Window) -> bool --- RaiseWindow :: proc(window: ^Window) -> bool --- @@ -427,6 +443,10 @@ foreign lib { SetWindowHitTest :: proc(window: ^Window, callback: HitTest, callback_data: rawptr) -> bool --- SetWindowShape :: proc(window: ^Window, shape: ^Surface) -> bool --- FlashWindow :: proc(window: ^Window, operation: FlashOperation) -> bool --- + SetWindowProgressState :: proc(window: ^Window, state: ProgressState) -> bool --- + GetWindowProgressState :: proc(window: ^Window) -> ProgressState --- + SetWindowProgrssValue :: proc(window: ^Window, value: f32) -> bool --- + GetWindowProgrssValue :: proc(window: ^Window) -> f32 --- DestroyWindow :: proc(window: ^Window) --- ScreenSaverEnabled :: proc() -> bool --- EnableScreenSaver :: proc() -> bool --- @@ -461,4 +481,4 @@ foreign lib { // Used by vendor:OpenGL gl_set_proc_address :: proc(p: rawptr, name: cstring) { (^FunctionPointer)(p)^ = GL_GetProcAddress(name) -} \ No newline at end of file +} From b34cf987c3e3aeaccfb83b580497dd652f911e89 Mon Sep 17 00:00:00 2001 From: A1029384756 Date: Fri, 2 Jan 2026 14:43:50 -0500 Subject: [PATCH 066/212] [vendor/sdl3] satify vet --- vendor/sdl3/sdl3_pen.odin | 2 +- vendor/sdl3/sdl3_render.odin | 2 +- vendor/sdl3/sdl3_video.odin | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vendor/sdl3/sdl3_pen.odin b/vendor/sdl3/sdl3_pen.odin index c28e7338b..d96848fed 100644 --- a/vendor/sdl3/sdl3_pen.odin +++ b/vendor/sdl3/sdl3_pen.odin @@ -34,7 +34,7 @@ PenDeviceType :: enum c.int { INVALID = -1, /**< Not a valid pen device. */ UNKNOWN, /**< Don't know specifics of this pen. */ DIRECT, /**< Pen touches display. */ - INDIRECT /**< Pen touches something that isn't the display. */ + INDIRECT, /**< Pen touches something that isn't the display. */ } @(default_calling_convention="c", link_prefix="SDL_", require_results) diff --git a/vendor/sdl3/sdl3_render.odin b/vendor/sdl3/sdl3_render.odin index 191dbecfe..68e333c64 100644 --- a/vendor/sdl3/sdl3_render.odin +++ b/vendor/sdl3/sdl3_render.odin @@ -22,7 +22,7 @@ TextureAddressMode :: enum c.int { TEXTURE_ADDRESS_INVALID = -1, TEXTURE_ADDRESS_AUTO, /**< Wrapping is enabled if texture coordinates are outside [0, 1], this is the default */ TEXTURE_ADDRESS_CLAMP, /**< Texture coordinates are clamped to the [0, 1] range */ - TEXTURE_ADDRESS_WRAP /**< The texture is repeated (tiled) */ + TEXTURE_ADDRESS_WRAP, /**< The texture is repeated (tiled) */ } RendererLogicalPresentation :: enum c.int { diff --git a/vendor/sdl3/sdl3_video.odin b/vendor/sdl3/sdl3_video.odin index 687f3d9a7..4dc1cc107 100644 --- a/vendor/sdl3/sdl3_video.odin +++ b/vendor/sdl3/sdl3_video.odin @@ -140,7 +140,7 @@ ProgressState :: enum c.int { PROGRESS_STATE_INDETERMINATE, /**< The progress bar is shown in a indeterminate state */ PROGRESS_STATE_NORMAL, /**< The progress bar is shown in a normal state */ PROGRESS_STATE_PAUSED, /**< The progress bar is shown in a paused state */ - PROGRESS_STATE_ERROR /**< The progress bar is shown in a state indicating the application had an error */ + PROGRESS_STATE_ERROR, /**< The progress bar is shown in a state indicating the application had an error */ } GLContextState :: struct {} From 4237a4494431ea6393aa6c6c6dec5cb26aec4f50 Mon Sep 17 00:00:00 2001 From: A1029384756 Date: Fri, 2 Jan 2026 17:07:43 -0500 Subject: [PATCH 067/212] [vendor/sdl3] another pass over the headers --- vendor/sdl3/sdl3_haptic.odin | 15 ++++++++------- vendor/sdl3/sdl3_properties.odin | 4 +++- vendor/sdl3/sdl3_render.odin | 8 ++++---- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/vendor/sdl3/sdl3_haptic.odin b/vendor/sdl3/sdl3_haptic.odin index d5efadcf3..adf055ee6 100644 --- a/vendor/sdl3/sdl3_haptic.odin +++ b/vendor/sdl3/sdl3_haptic.odin @@ -5,6 +5,7 @@ import "core:c" Haptic :: struct {} HapticType :: Uint16 +HapticEffectId :: c.int HAPTIC_CONSTANT :: 1<<0 HAPTIC_SINE :: 1<<1 @@ -215,12 +216,12 @@ foreign lib { GetHapticFeatures :: proc(haptic: ^Haptic) -> Uint32 --- GetNumHapticAxes :: proc(haptic: ^Haptic) -> c.int --- HapticEffectSupported :: proc(haptic: ^Haptic, #by_ptr effect: HapticEffect) -> bool --- - CreateHapticEffect :: proc(haptic: ^Haptic, #by_ptr effect: HapticEffect) -> c.int --- - UpdateHapticEffect :: proc(haptic: ^Haptic, effect: c.int, #by_ptr data: HapticEffect) -> bool --- - RunHapticEffect :: proc(haptic: ^Haptic, effect: c.int, iterations: Uint32) -> bool --- - StopHapticEffect :: proc(haptic: ^Haptic, effect: c.int) -> bool --- - DestroyHapticEffect :: proc(haptic: ^Haptic, effect: c.int) --- - GetHapticEffectStatus :: proc(haptic: ^Haptic, effect: c.int) -> bool --- + CreateHapticEffect :: proc(haptic: ^Haptic, #by_ptr effect: HapticEffect) -> HapticEffectId --- + UpdateHapticEffect :: proc(haptic: ^Haptic, effect: HapticEffectId, #by_ptr data: HapticEffect) -> bool --- + RunHapticEffect :: proc(haptic: ^Haptic, effect: HapticEffectId, iterations: Uint32) -> bool --- + StopHapticEffect :: proc(haptic: ^Haptic, effect: HapticEffectId) -> bool --- + DestroyHapticEffect :: proc(haptic: ^Haptic, effect: HapticEffectId) --- + GetHapticEffectStatus :: proc(haptic: ^Haptic, effect: HapticEffectId) -> bool --- SetHapticGain :: proc(haptic: ^Haptic, gain: c.int) -> bool --- SetHapticAutocenter :: proc(haptic: ^Haptic, autocenter: c.int) -> bool --- PauseHaptic :: proc(haptic: ^Haptic) -> bool --- @@ -230,4 +231,4 @@ foreign lib { InitHapticRumble :: proc(haptic: ^Haptic) -> bool --- PlayHapticRumble :: proc(haptic: ^Haptic, strength: f32, length: Uint32) -> bool --- StopHapticRumble :: proc(haptic: ^Haptic) -> bool --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_properties.odin b/vendor/sdl3/sdl3_properties.odin index 73372c290..01bdff59b 100644 --- a/vendor/sdl3/sdl3_properties.odin +++ b/vendor/sdl3/sdl3_properties.odin @@ -4,6 +4,8 @@ import "core:c" PropertiesID :: distinct Uint32 +PROP_NAME_STRING :: "SDL.name" + PropertyType :: enum c.int { INVALID, POINTER, @@ -41,4 +43,4 @@ foreign lib { ClearProperty :: proc(props: PropertiesID, name: cstring) -> bool --- EnumerateProperties :: proc(props: PropertiesID, callback: EnumeratePropertiesCallback, userdata: rawptr) -> bool --- DestroyProperties :: proc(props: PropertiesID) --- -} \ No newline at end of file +} diff --git a/vendor/sdl3/sdl3_render.odin b/vendor/sdl3/sdl3_render.odin index 68e333c64..9b2d4efd4 100644 --- a/vendor/sdl3/sdl3_render.odin +++ b/vendor/sdl3/sdl3_render.odin @@ -19,10 +19,10 @@ TextureAccess :: enum c.int { } TextureAddressMode :: enum c.int { - TEXTURE_ADDRESS_INVALID = -1, - TEXTURE_ADDRESS_AUTO, /**< Wrapping is enabled if texture coordinates are outside [0, 1], this is the default */ - TEXTURE_ADDRESS_CLAMP, /**< Texture coordinates are clamped to the [0, 1] range */ - TEXTURE_ADDRESS_WRAP, /**< The texture is repeated (tiled) */ + INVALID = -1, + AUTO, /**< Wrapping is enabled if texture coordinates are outside [0, 1], this is the default */ + CLAMP, /**< Texture coordinates are clamped to the [0, 1] range */ + WRAP, /**< The texture is repeated (tiled) */ } RendererLogicalPresentation :: enum c.int { From c867143a581cace6adec1ac3097ba2936e8ddda6 Mon Sep 17 00:00:00 2001 From: A1029384756 Date: Fri, 2 Jan 2026 17:38:21 -0500 Subject: [PATCH 068/212] [vendor/sdl3] typo --- vendor/sdl3/sdl3_video.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/sdl3/sdl3_video.odin b/vendor/sdl3/sdl3_video.odin index 4dc1cc107..4a0b6840b 100644 --- a/vendor/sdl3/sdl3_video.odin +++ b/vendor/sdl3/sdl3_video.odin @@ -445,8 +445,8 @@ foreign lib { FlashWindow :: proc(window: ^Window, operation: FlashOperation) -> bool --- SetWindowProgressState :: proc(window: ^Window, state: ProgressState) -> bool --- GetWindowProgressState :: proc(window: ^Window) -> ProgressState --- - SetWindowProgrssValue :: proc(window: ^Window, value: f32) -> bool --- - GetWindowProgrssValue :: proc(window: ^Window) -> f32 --- + SetWindowProgressValue :: proc(window: ^Window, value: f32) -> bool --- + GetWindowProgressValue :: proc(window: ^Window) -> f32 --- DestroyWindow :: proc(window: ^Window) --- ScreenSaverEnabled :: proc() -> bool --- EnableScreenSaver :: proc() -> bool --- From 08dd0cb0af79c8712be6139b28f075d5810ce77f Mon Sep 17 00:00:00 2001 From: A1029384756 Date: Fri, 2 Jan 2026 17:41:20 -0500 Subject: [PATCH 069/212] [vendor/sdl3] shortened enum naming --- vendor/sdl3/sdl3_video.odin | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/vendor/sdl3/sdl3_video.odin b/vendor/sdl3/sdl3_video.odin index 4a0b6840b..e4547d991 100644 --- a/vendor/sdl3/sdl3_video.odin +++ b/vendor/sdl3/sdl3_video.odin @@ -135,12 +135,12 @@ FlashOperation :: enum c.int { } ProgressState :: enum c.int { - PROGRESS_STATE_INVALID = -1, /**< An invalid progress state indicating an error; check SDL_GetError() */ - PROGRESS_STATE_NONE, /**< No progress bar is shown */ - PROGRESS_STATE_INDETERMINATE, /**< The progress bar is shown in a indeterminate state */ - PROGRESS_STATE_NORMAL, /**< The progress bar is shown in a normal state */ - PROGRESS_STATE_PAUSED, /**< The progress bar is shown in a paused state */ - PROGRESS_STATE_ERROR, /**< The progress bar is shown in a state indicating the application had an error */ + INVALID = -1, /**< An invalid progress state indicating an error; check SDL_GetError() */ + NONE, /**< No progress bar is shown */ + INDETERMINATE, /**< The progress bar is shown in a indeterminate state */ + NORMAL, /**< The progress bar is shown in a normal state */ + PAUSED, /**< The progress bar is shown in a paused state */ + ERROR, /**< The progress bar is shown in a state indicating the application had an error */ } GLContextState :: struct {} From 7fa05f16bfc55a3380c758bdedaf3da351774713 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 3 Jan 2026 20:14:15 +0000 Subject: [PATCH 070/212] Minor change from `make_checker_context` to `init_checker_context` --- src/checker.cpp | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/checker.cpp b/src/checker.cpp index 13d02c512..ab3ba50dd 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1530,17 +1530,16 @@ gb_internal void destroy_checker_info(CheckerInfo *i) { map_destroy(&i->load_directory_map); } -gb_internal CheckerContext make_checker_context(Checker *c) { - CheckerContext ctx = {}; - ctx.checker = c; - ctx.info = &c->info; - ctx.scope = builtin_pkg->scope; - ctx.pkg = builtin_pkg; +gb_internal void init_checker_context(CheckerContext *ctx, Checker *c) { + ctx->checker = c; + ctx->info = &c->info; + ctx->scope = builtin_pkg->scope; + ctx->pkg = builtin_pkg; - ctx.type_path = new_checker_type_path(heap_allocator()); - ctx.type_level = 0; - return ctx; + ctx->type_path = new_checker_type_path(heap_allocator()); + ctx->type_level = 0; } + gb_internal void destroy_checker_context(CheckerContext *ctx) { destroy_checker_type_path(ctx->type_path, heap_allocator()); } @@ -1605,7 +1604,7 @@ gb_internal void init_checker(Checker *c) { mpsc_init(&c->global_untyped_queue, a); // , 1<<20); mpsc_init(&c->soa_types_to_complete, a); // , 1<<20); - c->builtin_ctx = make_checker_context(c); + init_checker_context(&c->builtin_ctx, c); } gb_internal void destroy_checker(Checker *c) { @@ -4964,7 +4963,7 @@ gb_internal void check_collect_entities(CheckerContext *c, Slice const &n gb_internal CheckerContext *create_checker_context(Checker *c) { CheckerContext *ctx = gb_alloc_item(permanent_allocator(), CheckerContext); - *ctx = make_checker_context(c); + init_checker_context(ctx, c); return ctx; } @@ -5409,7 +5408,8 @@ gb_internal DECL_ATTRIBUTE_PROC(foreign_import_decl_attribute) { } gb_internal void check_foreign_import_fullpaths(Checker *c) { - CheckerContext ctx = make_checker_context(c); + CheckerContext ctx = {}; + init_checker_context(&ctx, c); UntypedExprInfoMap untyped = {}; defer (map_destroy(&untyped)); @@ -5792,7 +5792,7 @@ gb_internal void check_collect_entities_all(Checker *c) { for (isize i = 0; i < thread_count; i++) { auto *wd = &collect_entity_worker_data[i]; wd->c = c; - wd->ctx = make_checker_context(c); + init_checker_context(&wd->ctx, c); map_init(&wd->untyped); } @@ -5833,7 +5833,7 @@ gb_internal void check_export_entities(Checker *c) { for (isize i = 0; i < thread_count; i++) { auto *wd = &collect_entity_worker_data[i]; map_clear(&wd->untyped); - wd->ctx = make_checker_context(c); + init_checker_context(&wd->ctx, c); } for (auto const &entry : c->info.packages) { @@ -5900,7 +5900,8 @@ gb_internal void check_import_entities(Checker *c) { } TIME_SECTION("check_import_entities - collect file decls"); - CheckerContext ctx = make_checker_context(c); + CheckerContext ctx = {}; + init_checker_context(&ctx, c); UntypedExprInfoMap untyped = {}; defer (map_destroy(&untyped)); @@ -6249,7 +6250,8 @@ gb_internal bool check_proc_info(Checker *c, ProcInfo *pi, UntypedExprInfoMap *u } } - CheckerContext ctx = make_checker_context(c); + CheckerContext ctx = {}; + init_checker_context(&ctx, c); defer (destroy_checker_context(&ctx)); reset_checker_context(&ctx, pi->file, untyped); ctx.decl = pi->decl; From 377a76bb15c14fb1d37ddd0facf4d925cec9f8c9 Mon Sep 17 00:00:00 2001 From: figuerom16 Date: Sun, 4 Jan 2026 20:04:57 -0800 Subject: [PATCH 071/212] Update lz4.odin: foreign import for linux --- vendor/compress/lz4/lz4.odin | 2 ++ 1 file changed, 2 insertions(+) diff --git a/vendor/compress/lz4/lz4.odin b/vendor/compress/lz4/lz4.odin index 19476c8c4..f3b0fcb0d 100644 --- a/vendor/compress/lz4/lz4.odin +++ b/vendor/compress/lz4/lz4.odin @@ -4,6 +4,8 @@ package vendor_compress_lz4 when ODIN_OS == .Windows { @(extra_linker_flags="/NODEFAULTLIB:libcmt") foreign import lib { "lib/liblz4_static.lib", "system:ucrt.lib" } +} else { + foreign import lib "system:lz4" } import "core:c" From 5fae3527c14bb7e37812c129a2850212407c36e2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 5 Jan 2026 11:44:52 +0000 Subject: [PATCH 072/212] Implement `LPWSAOVERLAPPED_COMPLETION_ROUTINE` correctly --- core/sys/windows/types.odin | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 21bb2c5c1..b43268c1e 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -151,8 +151,21 @@ LPCOLESTR :: LPCSTR LPFILETIME :: ^FILETIME LPWSABUF :: ^WSABUF -LPWSAOVERLAPPED :: distinct rawptr -LPWSAOVERLAPPED_COMPLETION_ROUTINE :: distinct rawptr +WSAOVERLAPPED :: struct { + Internal: DWORD, + InternalHigh: DWORD, + Offset: DWORD, + OffsetHigh: DWORD, + hEvent: WSAEVENT, +} + +LPWSAOVERLAPPED :: ^WSAOVERLAPPED +LPWSAOVERLAPPED_COMPLETION_ROUTINE :: #type proc "system" ( + dwError: DWORD, + cbTransferred: DWORD, + lpOverlapped: LPWSAOVERLAPPED, + dwFlags: DWORD, +) LPCVOID :: rawptr SCODE :: LONG From 393fec2f668ce2c1c7f2e885ab3e479d34e1e896 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 5 Jan 2026 11:48:19 +0000 Subject: [PATCH 073/212] Move `WSAEVENT` to types.odin --- core/sys/windows/types.odin | 2 ++ core/sys/windows/ws2_32.odin | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index b43268c1e..e1a14fb94 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -151,6 +151,8 @@ LPCOLESTR :: LPCSTR LPFILETIME :: ^FILETIME LPWSABUF :: ^WSABUF +WSAEVENT :: HANDLE + WSAOVERLAPPED :: struct { Internal: DWORD, InternalHigh: DWORD, diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin index 2c8dbe3b0..ad9089c6e 100644 --- a/core/sys/windows/ws2_32.odin +++ b/core/sys/windows/ws2_32.odin @@ -35,7 +35,6 @@ WSANETWORKEVENTS :: struct { iErrorCode: [FD_MAX_EVENTS]c_int, } -WSAEVENT :: HANDLE WSAID_ACCEPTEX :: GUID{0xb5367df1, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} WSAID_GETACCEPTEXSOCKADDRS :: GUID{0xb5367df2, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} From 91c1950b9f198ab844b83dabb0f381810965a3ce Mon Sep 17 00:00:00 2001 From: ske Date: Wed, 7 Jan 2026 02:19:41 -0300 Subject: [PATCH 074/212] Fix constant conversion checks (#6104) --- src/check_expr.cpp | 23 ++++++----------------- tests/issues/test_issue_6068.odin | 16 ++++++++-------- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 3b32d734a..2b2ae09cc 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3526,28 +3526,17 @@ gb_internal bool check_cast_internal(CheckerContext *c, Operand *x, Type *type) Type *elem = core_array_type(bt); if (core_type(bt)->kind == Type_Basic) { - if (check_representable_as_constant(c, x->value, type, &x->value)) { - return true; - } - goto check_castable; - } else if (!are_types_identical(elem, bt) && - elem->kind == Type_Basic && - check_representable_as_constant(c, x->value, elem, &x->value)) { - if (check_representable_as_constant(c, x->value, type, &x->value)) { - return true; - } - goto check_castable; + return check_representable_as_constant(c, x->value, type, &x->value) || + (is_type_pointer(type) && check_is_castable_to(c, x, type)); + } else if (!are_types_identical(elem, bt) && elem->kind == Type_Basic) { + return check_representable_as_constant(c, x->value, elem, &x->value) || + (is_type_pointer(elem) && check_is_castable_to(c, x, elem)); } else if (check_is_castable_to(c, x, type)) { x->value = {}; x->mode = Addressing_Value; return true; } - - return false; - } - -check_castable: - if (check_is_castable_to(c, x, type)) { + } else if (check_is_castable_to(c, x, type)) { if (x->mode != Addressing_Constant) { x->mode = Addressing_Value; } else if (is_type_slice(type) && is_type_string(x->type)) { diff --git a/tests/issues/test_issue_6068.odin b/tests/issues/test_issue_6068.odin index 011c95442..88a21ee27 100644 --- a/tests/issues/test_issue_6068.odin +++ b/tests/issues/test_issue_6068.odin @@ -58,14 +58,14 @@ test_issue_6068 :: proc(t: ^testing.T) { testing.expect(t, f64be(-1.234) == check_be) testing.expect(t, cast(f64be)value == check_be) testing.expect(t, cast(f64be)-1.234 == check_be) - testing.expect(t, f64be(int(-1.234)) == check_be) - testing.expect(t, cast(f64be)int(-1.234) == check_be) + testing.expect(t, f64be(f64(-1.234)) == check_be) + testing.expect(t, cast(f64be)f64(-1.234) == check_be) testing.expect(t, f64le(value) == check_le) testing.expect(t, f64le(-1.234) == check_le) testing.expect(t, cast(f64le)value == check_le) testing.expect(t, cast(f64le)-1.234 == check_le) - testing.expect(t, f64le(int(-1.234)) == check_le) - testing.expect(t, cast(f64le)int(-1.234) == check_le) + testing.expect(t, f64le(f64(-1.234)) == check_le) + testing.expect(t, cast(f64le)f64(-1.234) == check_le) testing.expect(t, f64le(reverse) == check_le) testing.expect(t, cast(f64le)reverse == check_le) @@ -74,14 +74,14 @@ test_issue_6068 :: proc(t: ^testing.T) { testing.expect(t, f64be(-1.234) == -1.234) testing.expect(t, cast(f64be)value == -1.234) testing.expect(t, cast(f64be)-1.234 == -1.234) - testing.expect(t, f64be(int(-1.234)) == -1.234) - testing.expect(t, cast(f64be)int(-1.234) == -1.234) + testing.expect(t, f64be(f64(-1.234)) == -1.234) + testing.expect(t, cast(f64be)f64(-1.234) == -1.234) testing.expect(t, f64le(value) == -1.234) testing.expect(t, f64le(-1.234) == -1.234) testing.expect(t, cast(f64le)value == -1.234) testing.expect(t, cast(f64le)-1.234 == -1.234) - testing.expect(t, f64le(int(-1.234)) == -1.234) - testing.expect(t, cast(f64le)int(-1.234) == -1.234) + testing.expect(t, f64le(f64(-1.234)) == -1.234) + testing.expect(t, cast(f64le)f64(-1.234) == -1.234) testing.expect(t, f64le(reverse) == -1.234) testing.expect(t, cast(f64le)reverse == -1.234) } From dc37ff50368f30742f422ea15d6373df67bcb13e Mon Sep 17 00:00:00 2001 From: StudebakerGuy <> Date: Wed, 7 Jan 2026 18:44:30 -0500 Subject: [PATCH 075/212] Comments before first emlement not being captured The xml library was not correctly detect that a comment occured before the first element. This addresses the issue, but the comment incorrectly includes --. --- core/encoding/xml/xml_reader.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/encoding/xml/xml_reader.odin b/core/encoding/xml/xml_reader.odin index 99d73670b..5e056177e 100644 --- a/core/encoding/xml/xml_reader.odin +++ b/core/encoding/xml/xml_reader.odin @@ -294,7 +294,7 @@ parse_bytes :: proc(data: []u8, options := DEFAULT_OPTIONS, path := "", error_ha comment := scan_comment(t) or_return if .Intern_Comments in opts.flags { - if len(doc.elements) == 0 { + if doc.element_count == 0 { append(&doc.comments, comment) } else { el := new_element(doc) From 14d63710586ef6ca0096c170cb758ce5ae1fe6c1 Mon Sep 17 00:00:00 2001 From: StudebakerGuy <> Date: Wed, 7 Jan 2026 19:24:02 -0500 Subject: [PATCH 076/212] Comment includiing -- at end Comments are incorrectly including -- a the end. This was due to the comment slice being returned 2 charachters too long. --- core/encoding/xml/tokenizer.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/encoding/xml/tokenizer.odin b/core/encoding/xml/tokenizer.odin index 71fa0bdf5..d07f41580 100644 --- a/core/encoding/xml/tokenizer.odin +++ b/core/encoding/xml/tokenizer.odin @@ -264,7 +264,7 @@ scan_comment :: proc(t: ^Tokenizer) -> (comment: string, err: Error) { expect(t, .Dash) expect(t, .Gt) - return string(t.src[offset : t.offset - 1]), .None + return string(t.src[offset : t.offset - 3]), .None } // Skip CDATA From d4a21b7573f01a7d28bcdca805f0d6b0360932a8 Mon Sep 17 00:00:00 2001 From: Viktor Date: Thu, 8 Jan 2026 12:01:43 +0000 Subject: [PATCH 077/212] Fix TGA header detection --- core/image/general.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/image/general.odin b/core/image/general.odin index 1662cf14e..779f5d0b1 100644 --- a/core/image/general.odin +++ b/core/image/general.odin @@ -86,7 +86,7 @@ which_bytes :: proc(data: []byte) -> Which_File_Type { return v } get16le :: #force_inline proc(s: ^string) -> u16 { - v := u16(s[0]) | u16(s[1])<<16 + v := u16(s[0]) | u16(s[1])<<8 s^ = s[2:] return v } From 559b75cc817355801e37b218a7639e8de78e6846 Mon Sep 17 00:00:00 2001 From: bogdanov Date: Thu, 8 Jan 2026 18:56:59 +0300 Subject: [PATCH 078/212] Show `-target` flag usage examples in the help --- src/main.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 9a5df8aea..326c4c457 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2971,6 +2971,10 @@ gb_internal int print_show_help(String const arg0, String command, String option if (check) { if (print_flag("-target:")) { print_usage_line(2, "Sets the target for the executable to be built in."); + print_usage_line(2, "Examples:"); + print_usage_line(3, "-target:linux_amd64"); + print_usage_line(3, "-target:windows_amd64"); + print_usage_line(3, "-target:\"?\" for a list"); } if (print_flag("-terse-errors")) { From fb479b3aaec5a9a715bcff7d65498ba18020f4f0 Mon Sep 17 00:00:00 2001 From: StudebakerGuy <> Date: Thu, 8 Jan 2026 11:34:50 -0500 Subject: [PATCH 079/212] Corrected CRC's CRC's were correct in relation to changes to address comments containing -- at the end. --- tests/core/encoding/xml/test_core_xml.odin | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/core/encoding/xml/test_core_xml.odin b/tests/core/encoding/xml/test_core_xml.odin index 409a8c9c0..23d583e98 100644 --- a/tests/core/encoding/xml/test_core_xml.odin +++ b/tests/core/encoding/xml/test_core_xml.odin @@ -114,7 +114,7 @@ xml_test_entities :: proc(t: ^testing.T) { }, expected_doctype = "html", }, - crc32 = 0x48f41216, + crc32 = 0x98791215, }) } @@ -128,7 +128,7 @@ xml_test_entities_unbox :: proc(t: ^testing.T) { }, expected_doctype = "html", }, - crc32 = 0xd0567818, + crc32 = 0x5fd5ab4e, }) } @@ -142,7 +142,7 @@ xml_test_entities_unbox_decode :: proc(t: ^testing.T) { }, expected_doctype = "html", }, - crc32 = 0x68d2571e, + crc32 = 0x3c0973e2, }) } @@ -298,4 +298,4 @@ doc_to_string :: proc(doc: ^xml.Document) -> (result: string) { print(strings.to_writer(&buf), doc) return strings.clone(strings.to_string(buf)) -} \ No newline at end of file +} From 48fe0e239429e36574825168a5c18774e12ada3d Mon Sep 17 00:00:00 2001 From: konodin Date: Thu, 8 Jan 2026 22:35:40 +0100 Subject: [PATCH 080/212] Fix `EINVAL` binding to IPv6 on FreeBSD --- core/net/socket_freebsd.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/net/socket_freebsd.odin b/core/net/socket_freebsd.odin index 504229e73..fa20742cb 100644 --- a/core/net/socket_freebsd.odin +++ b/core/net/socket_freebsd.odin @@ -391,7 +391,7 @@ _endpoint_to_sockaddr :: proc(ep: Endpoint) -> (sockaddr: freebsd.Socket_Address } case IP6_Address: (cast(^freebsd.Socket_Address_Internet6)(&sockaddr))^ = { - len = size_of(freebsd.Socket_Address_Internet), + len = size_of(freebsd.Socket_Address_Internet6), family = .INET6, port = cast(freebsd.in_port_t)ep.port, addr = transmute(freebsd.IP6_Address)addr, From 9b5090352e9c9e64708769e70660d3bc6df3f28a Mon Sep 17 00:00:00 2001 From: konodin Date: Thu, 8 Jan 2026 23:07:01 +0100 Subject: [PATCH 081/212] Link Curl the same for all UNIX oses --- vendor/curl/curl.odin | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vendor/curl/curl.odin b/vendor/curl/curl.odin index ce10c443f..41ecbcb75 100644 --- a/vendor/curl/curl.odin +++ b/vendor/curl/curl.odin @@ -14,15 +14,6 @@ when ODIN_OS == .Windows { "system:Ws2_32.lib", "system:iphlpapi.lib", } -} else when ODIN_OS == .Linux { - @(export) - foreign import lib { - "system:curl", - "system:mbedtls", - "system:mbedx509", - "system:mbedcrypto", - "system:z", - } } else when ODIN_OS == .Darwin { @(export) foreign import lib { @@ -32,6 +23,15 @@ when ODIN_OS == .Windows { "system:z", "system:SystemConfiguration.framework", } +} else { + @(export) + foreign import lib { + "system:curl", + "system:mbedtls", + "system:mbedx509", + "system:mbedcrypto", + "system:z", + } } off_t :: i64 From bf7c92bf0909aaf49a8590570085e1c6a1787d00 Mon Sep 17 00:00:00 2001 From: Tohei Ichikawa Date: Sat, 10 Jan 2026 03:02:25 -0500 Subject: [PATCH 082/212] Fix assertion error when imported proc groups are passed as proc arguments --- src/check_expr.cpp | 6 +++++- tests/internal/test_imported_proc_groups.odin | 10 ++++++++++ .../internal/test_imported_proc_groups/proc_group.odin | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 tests/internal/test_imported_proc_groups.odin create mode 100644 tests/internal/test_imported_proc_groups/proc_group.odin diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 2b2ae09cc..60fae74c6 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -1133,7 +1133,11 @@ gb_internal void check_assignment(CheckerContext *c, Operand *operand, Type *typ x.mode = Addressing_Value; x.type = t; if (check_is_assignable_to(c, &x, type)) { - add_entity_use(c, operand->expr, e); + if (operand->expr->kind == Ast_SelectorExpr) { + add_entity_use(c, operand->expr->SelectorExpr.selector, e); + } else { + add_entity_use(c, operand->expr, e); + } good = true; break; } diff --git a/tests/internal/test_imported_proc_groups.odin b/tests/internal/test_imported_proc_groups.odin new file mode 100644 index 000000000..3f5b01fb3 --- /dev/null +++ b/tests/internal/test_imported_proc_groups.odin @@ -0,0 +1,10 @@ +package test_internal + +import "core:testing" +import "test_imported_proc_groups" + +@test +test_ :: proc(t: ^testing.T) { + use_proc :: proc(proc()) { } + use_proc(test_imported_proc_groups.proc_group) +} diff --git a/tests/internal/test_imported_proc_groups/proc_group.odin b/tests/internal/test_imported_proc_groups/proc_group.odin new file mode 100644 index 000000000..59519ab9c --- /dev/null +++ b/tests/internal/test_imported_proc_groups/proc_group.odin @@ -0,0 +1,4 @@ +package test_imported_proc_groups + +proc_group :: proc{empty_proc} +empty_proc :: proc() { } From c8f2603d3eb6f47ab772f83ecd0a5758d18e7b59 Mon Sep 17 00:00:00 2001 From: Tohei Ichikawa Date: Sat, 10 Jan 2026 03:35:33 -0500 Subject: [PATCH 083/212] Fix test name, add PR link, use tabs --- tests/internal/test_imported_proc_groups.odin | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/internal/test_imported_proc_groups.odin b/tests/internal/test_imported_proc_groups.odin index 3f5b01fb3..e91af4bf5 100644 --- a/tests/internal/test_imported_proc_groups.odin +++ b/tests/internal/test_imported_proc_groups.odin @@ -3,8 +3,9 @@ package test_internal import "core:testing" import "test_imported_proc_groups" +// https://github.com/odin-lang/Odin/pull/6119 @test -test_ :: proc(t: ^testing.T) { - use_proc :: proc(proc()) { } - use_proc(test_imported_proc_groups.proc_group) +test_use_imported_proc_group_as_argument :: proc(t: ^testing.T) { + use_proc :: proc(proc()) { } + use_proc(test_imported_proc_groups.proc_group) } From 3e31055ca7dbfa42998f7f6b42c45d15b967622e Mon Sep 17 00:00:00 2001 From: ske Date: Sat, 10 Jan 2026 10:46:53 -0300 Subject: [PATCH 084/212] Fix regression in #6118 --- src/check_expr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 2b2ae09cc..98185b0d3 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -3528,7 +3528,7 @@ gb_internal bool check_cast_internal(CheckerContext *c, Operand *x, Type *type) if (core_type(bt)->kind == Type_Basic) { return check_representable_as_constant(c, x->value, type, &x->value) || (is_type_pointer(type) && check_is_castable_to(c, x, type)); - } else if (!are_types_identical(elem, bt) && elem->kind == Type_Basic) { + } else if (!are_types_identical(elem, bt) && elem->kind == Type_Basic && x->type->kind == Type_Basic) { return check_representable_as_constant(c, x->value, elem, &x->value) || (is_type_pointer(elem) && check_is_castable_to(c, x, elem)); } else if (check_is_castable_to(c, x, type)) { From 5938c783a69e826cd8c113521a3950a6bacdb9aa Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 11 Jan 2026 18:54:46 +0000 Subject: [PATCH 085/212] Fix `#type` not being handled as in normal expressions --- src/check_expr.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 3b32d734a..c4f235b51 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -11565,6 +11565,15 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast return kind; case_end; + case_ast_node(ht, HelperType, node); + Type *type = check_type(c, ht->type); + if (type != nullptr && type != t_invalid) { + o->mode = Addressing_Type; + o->type = type; + } + return kind; + case_end; + case_ast_node(i, Implicit, node); switch (i->kind) { case Token_context: From a6ec199a52ae83603921fcf948fdf45e327fd17d Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:04:51 +0100 Subject: [PATCH 086/212] ci: don't check BSD or ARM targets on Linux amd64 because they have their own run --- .github/workflows/ci.yml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6219f370..0d2f3f1ca 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -156,18 +156,14 @@ jobs: - name: Check benchmarks run: ./odin check tests/benchmark -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -no-entry-point + - name: Odin check examples/all for Linux i386 if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:linux_i386 - - name: Odin check examples/all for Linux arm64 - if: matrix.os == 'ubuntu-latest' - run: ./odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:linux_arm64 - - name: Odin check examples/all for FreeBSD amd64 - if: matrix.os == 'ubuntu-latest' - run: ./odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:freebsd_amd64 - name: Odin check examples/all for OpenBSD amd64 if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -target:openbsd_amd64 + - name: Odin check examples/all for js_wasm32 if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -no-entry-point -target:js_wasm32 @@ -178,12 +174,6 @@ jobs: - name: Odin check examples/all/sdl3 for Linux i386 if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all/sdl3 -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -no-entry-point -target:linux_i386 - - name: Odin check examples/all/sdl3 for Linux arm64 - if: matrix.os == 'ubuntu-latest' - run: ./odin check examples/all/sdl3 -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -no-entry-point -target:linux_arm64 - - name: Odin check examples/all/sdl3 for FreeBSD amd64 - if: matrix.os == 'ubuntu-latest' - run: ./odin check examples/all/sdl3 -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -no-entry-point -target:freebsd_amd64 - name: Odin check examples/all/sdl3 for OpenBSD amd64 if: matrix.os == 'ubuntu-latest' run: ./odin check examples/all/sdl3 -vet -vet-tabs -strict-style -vet-style -warnings-as-errors -disallow-do -no-entry-point -target:openbsd_amd64 From c10771305d91b966f7520b830c398abffe4e9e1d Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:07:03 +0100 Subject: [PATCH 087/212] net: implement OpenBSD and NetBSD support & add stubs for other targets & cleanup --- core/flags/constants.odin | 3 +- core/flags/errors.odin | 8 + core/flags/errors_bsd.odin | 9 - core/flags/errors_nonbsd.odin | 12 -- core/flags/internal_rtti.odin | 14 +- core/flags/internal_rtti_nonbsd.odin | 32 --- core/net/addr.odin | 51 +++-- core/net/common.odin | 10 +- core/net/dns.odin | 182 +++++++++--------- core/net/dns_os.odin | 24 +++ core/net/dns_others.odin | 12 ++ core/net/dns_unix.odin | 13 +- core/net/dns_windows.odin | 22 ++- core/net/errors.odin | 10 + core/net/errors_others.odin | 9 +- .../{errors_darwin.odin => errors_posix.odin} | 2 +- core/net/errors_windows.odin | 4 +- core/net/interface_others.odin | 11 ++ ...rface_darwin.odin => interface_posix.odin} | 59 +++--- core/net/socket.odin | 30 ++- core/net/socket_freebsd.odin | 58 +++--- core/net/socket_linux.odin | 47 +++-- core/net/socket_others.odin | 105 ++++++++++ .../{socket_darwin.odin => socket_posix.odin} | 47 +++-- core/net/socket_windows.odin | 73 +++---- tests/core/net/test_core_net.odin | 2 - 26 files changed, 519 insertions(+), 330 deletions(-) delete mode 100644 core/flags/errors_bsd.odin delete mode 100644 core/flags/errors_nonbsd.odin delete mode 100644 core/flags/internal_rtti_nonbsd.odin create mode 100644 core/net/dns_os.odin create mode 100644 core/net/dns_others.odin rename core/net/{errors_darwin.odin => errors_posix.odin} (99%) create mode 100644 core/net/interface_others.odin rename core/net/{interface_darwin.odin => interface_posix.odin} (79%) create mode 100644 core/net/socket_others.odin rename core/net/{socket_darwin.odin => socket_posix.odin} (90%) diff --git a/core/flags/constants.odin b/core/flags/constants.odin index dc2663e2a..154ed3cec 100644 --- a/core/flags/constants.odin +++ b/core/flags/constants.odin @@ -11,8 +11,7 @@ NO_CORE_NAMED_TYPES :: #config(ODIN_CORE_FLAGS_NO_CORE_NAMED_TYPES, false) IMPORTING_TIME :: #config(ODIN_CORE_FLAGS_USE_TIME, time.IS_SUPPORTED) // Override support for parsing `net` types. -// TODO: Update this when the BSDs are supported. -IMPORTING_NET :: #config(ODIN_CORE_FLAGS_USE_NET, ODIN_OS == .Windows || ODIN_OS == .Linux || ODIN_OS == .Darwin || ODIN_OS == .FreeBSD) +IMPORTING_NET :: #config(ODIN_CORE_FLAGS_USE_NET, ODIN_OS == .Windows || ODIN_OS == .Linux || ODIN_OS == .Darwin || ODIN_OS == .FreeBSD || ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD) TAG_ARGS :: "args" SUBTAG_NAME :: "name" diff --git a/core/flags/errors.odin b/core/flags/errors.odin index 3d34a95d3..e9b2e18c8 100644 --- a/core/flags/errors.odin +++ b/core/flags/errors.odin @@ -1,5 +1,7 @@ package flags +import "base:runtime" +import "core:net" import "core:os" Parse_Error_Reason :: enum { @@ -24,6 +26,12 @@ Parse_Error :: struct { message: string, } +Unified_Parse_Error_Reason :: union #shared_nil { + Parse_Error_Reason, + runtime.Allocator_Error, + net.Parse_Endpoint_Error, +} + // Raised during parsing. // Provides more granular information than what just a string could hold. Open_File_Error :: struct { diff --git a/core/flags/errors_bsd.odin b/core/flags/errors_bsd.odin deleted file mode 100644 index 4d98d2ee4..000000000 --- a/core/flags/errors_bsd.odin +++ /dev/null @@ -1,9 +0,0 @@ -#+build netbsd, openbsd -package flags - -import "base:runtime" - -Unified_Parse_Error_Reason :: union #shared_nil { - Parse_Error_Reason, - runtime.Allocator_Error, -} diff --git a/core/flags/errors_nonbsd.odin b/core/flags/errors_nonbsd.odin deleted file mode 100644 index 28912b57f..000000000 --- a/core/flags/errors_nonbsd.odin +++ /dev/null @@ -1,12 +0,0 @@ -#+build !netbsd -#+build !openbsd -package flags - -import "base:runtime" -import "core:net" - -Unified_Parse_Error_Reason :: union #shared_nil { - Parse_Error_Reason, - runtime.Allocator_Error, - net.Parse_Endpoint_Error, -} diff --git a/core/flags/internal_rtti.odin b/core/flags/internal_rtti.odin index a1b050597..b3880afa0 100644 --- a/core/flags/internal_rtti.odin +++ b/core/flags/internal_rtti.odin @@ -5,6 +5,7 @@ import "base:intrinsics" import "base:runtime" import "core:fmt" import "core:mem" +import "core:net" import "core:os" import "core:reflect" import "core:strconv" @@ -310,7 +311,18 @@ parse_and_set_pointer_by_named_type :: proc(ptr: rawptr, str: string, data_type: } when IMPORTING_NET { - if try_net_parse_workaround(data_type, str, ptr, out_error) { + if data_type == net.Host_Or_Endpoint { + addr, net_error := net.parse_hostname_or_endpoint(str) + if net_error != nil { + // We pass along `net.Error` here. + out_error^ = Parse_Error { + net_error, + "Invalid Host/Endpoint.", + } + return + } + + (cast(^net.Host_Or_Endpoint)ptr)^ = addr return } } diff --git a/core/flags/internal_rtti_nonbsd.odin b/core/flags/internal_rtti_nonbsd.odin deleted file mode 100644 index e1286186b..000000000 --- a/core/flags/internal_rtti_nonbsd.odin +++ /dev/null @@ -1,32 +0,0 @@ -#+private -#+build !netbsd -#+build !openbsd -package flags - -import "core:net" - -// This proc exists purely as a workaround for import restrictions. -// Returns true if caller should return early. -try_net_parse_workaround :: #force_inline proc ( - data_type: typeid, - str: string, - ptr: rawptr, - out_error: ^Error, -) -> bool { - if data_type == net.Host_Or_Endpoint { - addr, net_error := net.parse_hostname_or_endpoint(str) - if net_error != nil { - // We pass along `net.Error` here. - out_error^ = Parse_Error { - net_error, - "Invalid Host/Endpoint.", - } - return true - } - - (cast(^net.Host_Or_Endpoint)ptr)^ = addr - return true - } - - return false -} diff --git a/core/net/addr.odin b/core/net/addr.odin index 6e2881ac8..a3fa02cce 100644 --- a/core/net/addr.odin +++ b/core/net/addr.odin @@ -1,4 +1,3 @@ -#+build windows, linux, darwin, freebsd package net /* @@ -22,7 +21,6 @@ package net import "core:strconv" import "core:strings" -import "core:fmt" /* Expects an IPv4 address with no leading or trailing whitespace: @@ -473,13 +471,20 @@ join_port :: proc(address_or_host: string, port: int, allocator := context.alloc addr := parse_address(addr_or_host) if addr == nil { // hostname - fmt.sbprintf(&b, "%v:%v", addr_or_host, port) + strings.write_string(&b, addr_or_host) + strings.write_string(&b, ":") + strings.write_int(&b, port) } else { switch _ in addr { case IP4_Address: - fmt.sbprintf(&b, "%v:%v", address_to_string(addr), port) + strings.write_string(&b, address_to_string(addr)) + strings.write_string(&b, ":") + strings.write_int(&b, port) case IP6_Address: - fmt.sbprintf(&b, "[%v]:%v", address_to_string(addr), port) + strings.write_string(&b, "[") + strings.write_string(&b, address_to_string(addr)) + strings.write_string(&b, "]:") + strings.write_int(&b, port) } } return strings.to_string(b) @@ -509,7 +514,13 @@ address_to_string :: proc(addr: Address, allocator := context.temp_allocator) -> b := strings.builder_make(allocator) switch v in addr { case IP4_Address: - fmt.sbprintf(&b, "%v.%v.%v.%v", v[0], v[1], v[2], v[3]) + strings.write_uint(&b, uint(v[0])) + strings.write_byte(&b, '.') + strings.write_uint(&b, uint(v[1])) + strings.write_byte(&b, '.') + strings.write_uint(&b, uint(v[2])) + strings.write_byte(&b, '.') + strings.write_uint(&b, uint(v[3])) case IP6_Address: // First find the longest run of zeroes. Zero_Run :: struct { @@ -563,25 +574,33 @@ address_to_string :: proc(addr: Address, allocator := context.temp_allocator) -> for val, i in v { if best.start == i || best.end == i { // For the left and right side of the best zero run, print a `:`. - fmt.sbprint(&b, ":") + strings.write_string(&b, ":") } else if i < best.start { /* If we haven't made it to the best run yet, print the digit. Make sure we only print a `:` after the digit if it's not immediately followed by the run's own leftmost `:`. */ - fmt.sbprintf(&b, "%x", val) + + buf: [32]byte + str := strconv.write_bits(buf[:], u64(val), 16, false, size_of(val), strconv.digits, {}) + strings.write_string(&b, str) + if i < best.start - 1 { - fmt.sbprintf(&b, ":") + strings.write_string(&b, ":") } } else if i > best.end { /* If there are any digits after the zero run, print them. But don't print the `:` at the end of the IP number. */ - fmt.sbprintf(&b, "%x", val) + + buf: [32]byte + str := strconv.write_bits(buf[:], u64(val), 16, false, size_of(val), strconv.digits, {}) + strings.write_string(&b, str) + if i != 7 { - fmt.sbprintf(&b, ":") + strings.write_string(&b, ":") } } } @@ -598,8 +617,14 @@ endpoint_to_string :: proc(ep: Endpoint, allocator := context.temp_allocator) -> s := address_to_string(ep.address, context.temp_allocator) b := strings.builder_make(allocator) switch a in ep.address { - case IP4_Address: fmt.sbprintf(&b, "%v:%v", s, ep.port) - case IP6_Address: fmt.sbprintf(&b, "[%v]:%v", s, ep.port) + case IP4_Address: + strings.write_string(&b, s) + strings.write_int(&b, ep.port) + case IP6_Address: + strings.write_string(&b, "[") + strings.write_string(&b, s) + strings.write_string(&b, "]:") + strings.write_int(&b, ep.port) } return strings.to_string(b) } diff --git a/core/net/common.odin b/core/net/common.odin index 70523050f..2758a7359 100644 --- a/core/net/common.odin +++ b/core/net/common.odin @@ -1,4 +1,3 @@ -#+build windows, linux, darwin, freebsd package net /* @@ -91,6 +90,7 @@ Parse_Endpoint_Error :: enum u32 { Resolve_Error :: enum u32 { None = 0, Unable_To_Resolve = 1, + Allocation_Failure, } DNS_Error :: enum u32 { @@ -144,11 +144,11 @@ Address :: union {IP4_Address, IP6_Address} IP4_Loopback :: IP4_Address{127, 0, 0, 1} IP6_Loopback :: IP6_Address{0, 0, 0, 0, 0, 0, 0, 1} -IP4_Any := IP4_Address{} -IP6_Any := IP6_Address{} +IP4_Any :: IP4_Address{} +IP6_Any :: IP6_Address{} -IP4_mDNS_Broadcast := Endpoint{address=IP4_Address{224, 0, 0, 251}, port=5353} -IP6_mDNS_Broadcast := Endpoint{address=IP6_Address{65282, 0, 0, 0, 0, 0, 0, 251}, port = 5353} +IP4_mDNS_Broadcast :: Endpoint{address=IP4_Address{224, 0, 0, 251}, port=5353} +IP6_mDNS_Broadcast :: Endpoint{address=IP6_Address{65282, 0, 0, 0, 0, 0, 0, 251}, port = 5353} Endpoint :: struct { address: Address, diff --git a/core/net/dns.odin b/core/net/dns.odin index 540991fe7..983f82681 100644 --- a/core/net/dns.odin +++ b/core/net/dns.odin @@ -1,4 +1,3 @@ -#+build windows, linux, darwin, freebsd package net /* @@ -22,13 +21,18 @@ package net Haesbaert: Security fixes */ -@(require) import "base:runtime" +@(require) +import "base:runtime" + +import "core:bufio" +import "core:io" +import "core:math/rand" import "core:mem" import "core:strings" import "core:time" -import "core:os" -import "core:math/rand" -@(require) import "core:sync" + +@(require) +import "core:sync" dns_config_initialized: sync.Once when ODIN_OS == .Windows { @@ -42,20 +46,12 @@ when ODIN_OS == .Windows { hosts_file = "/etc/hosts", } } else { - #panic("Please add a configuration for this OS.") + DEFAULT_DNS_CONFIGURATION :: DNS_Configuration{} } -/* - Replaces environment placeholders in `dns_configuration`. Only necessary on Windows. - Is automatically called, once, by `get_dns_records_*`. -*/ -@(private) init_dns_configuration :: proc() { when ODIN_OS == .Windows { - runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD() - val := os.replace_environment_placeholders(dns_configuration.hosts_file, context.temp_allocator) - copy(dns_configuration.hosts_file_buf[:], val) - dns_configuration.hosts_file = string(dns_configuration.hosts_file_buf[:len(val)]) + _init_dns_configuration() } } @@ -178,9 +174,7 @@ resolve_ip6 :: proc(hostname_and_maybe_port: string) -> (ep6: Endpoint, err: Net See `destroy_records`. */ get_dns_records_from_os :: proc(hostname: string, type: DNS_Record_Type, allocator := context.allocator) -> (records: []DNS_Record, err: DNS_Error) { - when ODIN_OS == .Windows { - sync.once_do(&dns_config_initialized, init_dns_configuration) - } + init_dns_configuration() return _get_dns_records_os(hostname, type, allocator) } @@ -196,51 +190,14 @@ get_dns_records_from_os :: proc(hostname: string, type: DNS_Record_Type, allocat See `destroy_records`. */ get_dns_records_from_nameservers :: proc(hostname: string, type: DNS_Record_Type, name_servers: []Endpoint, host_overrides: []DNS_Record, allocator := context.allocator) -> (records: []DNS_Record, err: DNS_Error) { - when ODIN_OS == .Windows { - sync.once_do(&dns_config_initialized, init_dns_configuration) - } + init_dns_configuration() context.allocator = allocator - if type != .SRV { - // NOTE(tetra): 'hostname' can contain underscores when querying SRV records - ok := validate_hostname(hostname) - if !ok { - return nil, .Invalid_Hostname_Error - } - } + id := u16be(rand.uint32()) + dns_packet_buf: [DNS_PACKET_MIN_LEN]byte = --- + dns_packet := make_dns_packet(dns_packet_buf[:], id, hostname, type) or_return - hdr := DNS_Header{ - id = u16be(rand.uint32()), - is_response = false, - opcode = 0, - is_authoritative = false, - is_truncated = false, - is_recursion_desired = true, - is_recursion_available = false, - response_code = DNS_Response_Code.No_Error, - } - - id, bits := pack_dns_header(hdr) - dns_hdr := [6]u16be{} - dns_hdr[0] = id - dns_hdr[1] = bits - dns_hdr[2] = 1 - - dns_query := [2]u16be{ u16be(type), 1 } - - output := [(size_of(u16be) * 6) + NAME_MAX + (size_of(u16be) * 2)]u8{} - b := strings.builder_from_slice(output[:]) - - strings.write_bytes(&b, mem.slice_data_cast([]u8, dns_hdr[:])) - ok := encode_hostname(&b, hostname) - if !ok { - return nil, .Invalid_Hostname_Error - } - strings.write_bytes(&b, mem.slice_data_cast([]u8, dns_query[:])) - - dns_packet := output[:strings.builder_len(b)] - - dns_response_buf := [4096]u8{} + dns_response_buf: [4096]u8 = --- dns_response: []u8 for name_server in name_servers { conn, sock_err := make_unbound_udp_socket(family_from_endpoint(name_server)) @@ -283,6 +240,42 @@ get_dns_records_from_nameservers :: proc(hostname: string, type: DNS_Record_Type return } +DNS_PACKET_MIN_LEN :: (size_of(u16be) * 6) + NAME_MAX + (size_of(u16be) * 2) + +make_dns_packet :: proc(buf: []byte, id: u16be, hostname: string, type: DNS_Record_Type) -> (packet: []byte, err: DNS_Error) { + assert(len(buf) >= DNS_PACKET_MIN_LEN) + + hdr := DNS_Header{ + id = id, + is_response = false, + opcode = 0, + is_authoritative = false, + is_truncated = false, + is_recursion_desired = true, + is_recursion_available = false, + response_code = DNS_Response_Code.No_Error, + } + + _, bits := pack_dns_header(hdr) + dns_hdr := [6]u16be{} + dns_hdr[0] = id + dns_hdr[1] = bits + dns_hdr[2] = 1 + + dns_query := [2]u16be{ u16be(type), 1 } + + b := strings.builder_from_slice(buf[:]) + + strings.write_bytes(&b, mem.slice_data_cast([]u8, dns_hdr[:])) + ok := encode_hostname(&b, hostname) + if !ok { + return nil, .Invalid_Hostname_Error + } + strings.write_bytes(&b, mem.slice_data_cast([]u8, dns_query[:])) + + return buf[:strings.builder_len(b)], nil +} + // `records` slice is also destroyed. destroy_dns_records :: proc(records: []DNS_Record, allocator := context.allocator) { context.allocator = allocator @@ -364,13 +357,8 @@ unpack_dns_header :: proc(id: u16be, bits: u16be) -> (hdr: DNS_Header) { return hdr } -load_resolv_conf :: proc(resolv_conf_path: string, allocator := context.allocator) -> (name_servers: []Endpoint, ok: bool) { - context.allocator = allocator - - res := os.read_entire_file_from_filename(resolv_conf_path) or_return - defer delete(res) - resolv_str := string(res) - +parse_resolv_conf :: proc(resolv_str: string, allocator := context.allocator) -> (name_servers: []Endpoint) { + resolv_str := resolv_str id_str := "nameserver" id_len := len(id_str) @@ -401,41 +389,51 @@ load_resolv_conf :: proc(resolv_conf_path: string, allocator := context.allocato append(&_name_servers, endpoint) } - return _name_servers[:], true + return _name_servers[:] } -load_hosts :: proc(hosts_file_path: string, allocator := context.allocator) -> (hosts: []DNS_Host_Entry, ok: bool) { - context.allocator = allocator +parse_hosts :: proc(stream: io.Stream, allocator := context.allocator) -> (hosts: []DNS_Host_Entry, ok: bool) { + s := bufio.scanner_init(&{}, stream, allocator) + defer bufio.scanner_destroy(s) - res := os.read_entire_file_from_filename(hosts_file_path, allocator) or_return - defer delete(res) + resize(&s.buf, 256) - _hosts := make([dynamic]DNS_Host_Entry, 0, allocator) - hosts_str := string(res) - for line in strings.split_lines_iterator(&hosts_str) { - if len(line) == 0 || line[0] == '#' { - continue + _hosts: [dynamic]DNS_Host_Entry + _hosts.allocator = allocator + defer if !ok { + for host in _hosts { + delete(host.name, allocator) } + delete(_hosts) + } - splits := strings.fields(line) - defer delete(splits) + for bufio.scanner_scan(s) { + line := bufio.scanner_text(s) - (len(splits) >= 2) or_continue + line, _, _ = strings.partition(line, "#") + (len(line) > 0) or_continue + + ip_str := strings.fields_iterator(&line) or_continue - ip_str := splits[0] addr := parse_address(ip_str) - if addr == nil { - continue - } + (addr != nil) or_continue - for hostname in splits[1:] { - if len(hostname) != 0 { - append(&_hosts, DNS_Host_Entry{hostname, addr}) - } + for hostname in strings.fields_iterator(&line) { + (len(hostname) > 0) or_continue + + clone, alloc_err := strings.clone(hostname, allocator) + if alloc_err != nil { return } + + _, alloc_err = append(&_hosts, DNS_Host_Entry{clone, addr}) + if alloc_err != nil { return } } } - return _hosts[:], true + if bufio.scanner_error(s) != nil { return } + + hosts = _hosts[:] + ok = true + return } // www.google.com -> 3www6google3com0 @@ -594,7 +592,7 @@ decode_hostname :: proc(packet: []u8, start_idx: int, allocator := context.alloc // Uses RFC 952 & RFC 1123 validate_hostname :: proc(hostname: string) -> (ok: bool) { - if len(hostname) > 255 || len(hostname) == 0 { + if len(hostname) > NAME_MAX || len(hostname) == 0 { return } @@ -604,7 +602,7 @@ validate_hostname :: proc(hostname: string) -> (ok: bool) { _hostname := hostname for label in strings.split_iterator(&_hostname, ".") { - if len(label) > 63 || len(label) == 0 { + if len(label) > LABEL_MAX || len(label) == 0 { return } @@ -868,4 +866,4 @@ parse_response :: proc(response: []u8, filter: DNS_Record_Type = nil, allocator xid = hdr.id return _records[:], xid, true -} \ No newline at end of file +} diff --git a/core/net/dns_os.odin b/core/net/dns_os.odin new file mode 100644 index 000000000..19db0097a --- /dev/null +++ b/core/net/dns_os.odin @@ -0,0 +1,24 @@ +#+build darwin, freebsd, openbsd, netbsd, linux, windows, wasi +#+private +package net + +import "core:os" + +load_resolv_conf :: proc(resolv_conf_path: string, allocator := context.allocator) -> (name_servers: []Endpoint, ok: bool) { + context.allocator = allocator + + res := os.read_entire_file_from_filename(resolv_conf_path) or_return + defer delete(res) + resolv_str := string(res) + + return parse_resolv_conf(resolv_str), true +} + +load_hosts :: proc(hosts_file_path: string, allocator := context.allocator) -> (hosts: []DNS_Host_Entry, ok: bool) { + hosts_file, err := os.open(hosts_file_path) + if err != nil { return } + defer os.close(hosts_file) + + return parse_hosts(os.stream_from_handle(hosts_file), allocator) +} + diff --git a/core/net/dns_others.odin b/core/net/dns_others.odin new file mode 100644 index 000000000..842e833aa --- /dev/null +++ b/core/net/dns_others.odin @@ -0,0 +1,12 @@ +#+build !windows +#+build !linux +#+build !darwin +#+build !freebsd +#+build !netbsd +#+build !openbsd +package net + +@(private) +_get_dns_records_os :: proc(hostname: string, type: DNS_Record_Type, allocator := context.allocator) -> (records: []DNS_Record, err: DNS_Error) { + return +} diff --git a/core/net/dns_unix.odin b/core/net/dns_unix.odin index fbc1909cd..be95b8341 100644 --- a/core/net/dns_unix.odin +++ b/core/net/dns_unix.odin @@ -1,4 +1,4 @@ -#+build linux, darwin, freebsd +#+build linux, darwin, freebsd, openbsd, netbsd package net /* Package net implements cross-platform Berkeley Sockets, DNS resolution and associated procedures. @@ -42,14 +42,19 @@ _get_dns_records_os :: proc(hostname: string, type: DNS_Record_Type, allocator : } hosts, hosts_ok := load_hosts(dns_configuration.hosts_file) - defer delete(hosts) if !hosts_ok { return nil, .Invalid_Hosts_Config_Error } + defer { + for h in hosts { + delete(h.name) + } + delete(hosts) + } host_overrides := make([dynamic]DNS_Record) for host in hosts { - if strings.compare(host.name, hostname) != 0 { + if host.name != hostname { continue } @@ -79,4 +84,4 @@ _get_dns_records_os :: proc(hostname: string, type: DNS_Record_Type, allocator : } return get_dns_records_from_nameservers(hostname, type, name_servers, host_overrides[:]) -} \ No newline at end of file +} diff --git a/core/net/dns_windows.odin b/core/net/dns_windows.odin index b1e7da97d..393df5fa7 100644 --- a/core/net/dns_windows.odin +++ b/core/net/dns_windows.odin @@ -20,11 +20,29 @@ package net Feoramund: FreeBSD platform code */ -import "core:strings" +import "base:runtime" + import "core:mem" +import "core:os" +import "core:strings" +import "core:sync" import win "core:sys/windows" +/* + Replaces environment placeholders in `dns_configuration`. Only necessary on Windows. + Is automatically called, once, by `get_dns_records_*`. +*/ +@(private) +_init_dns_configuration :: proc() { + sync.once_do(&dns_config_initialized, proc() { + runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD() + val := os.replace_environment_placeholders(dns_configuration.hosts_file, context.temp_allocator) + copy(dns_configuration.hosts_file_buf[:], val) + dns_configuration.hosts_file = string(dns_configuration.hosts_file_buf[:len(val)]) + }) +} + @(private) _get_dns_records_os :: proc(hostname: string, type: DNS_Record_Type, allocator := context.allocator) -> (records: []DNS_Record, err: DNS_Error) { context.allocator = allocator @@ -171,4 +189,4 @@ _get_dns_records_os :: proc(hostname: string, type: DNS_Record_Type, allocator : records = recs[:] return -} \ No newline at end of file +} diff --git a/core/net/errors.odin b/core/net/errors.odin index de53640fc..28153375c 100644 --- a/core/net/errors.odin +++ b/core/net/errors.odin @@ -139,6 +139,11 @@ Accept_Error :: enum i32 { Unknown, } +Recv_Error :: union #shared_nil { + TCP_Recv_Error, + UDP_Recv_Error, +} + TCP_Recv_Error :: enum i32 { None, // No network connection, or the network stack is not initialized. @@ -187,6 +192,11 @@ UDP_Recv_Error :: enum i32 { Unknown, } +Send_Error :: union #shared_nil { + TCP_Send_Error, + UDP_Send_Error, +} + TCP_Send_Error :: enum i32 { None, // No network connection, or the network stack is not initialized. diff --git a/core/net/errors_others.odin b/core/net/errors_others.odin index b80ead79c..3a752d58e 100644 --- a/core/net/errors_others.odin +++ b/core/net/errors_others.odin @@ -2,6 +2,8 @@ #+build !linux #+build !freebsd #+build !windows +#+build !netbsd +#+build !openbsd package net @(private="file", thread_local) @@ -18,10 +20,3 @@ _last_platform_error_string :: proc() -> string { _set_last_platform_error :: proc(err: i32) { _last_error = err } - -Parse_Endpoint_Error :: enum u32 { - None = 0, - Bad_Port = 1, - Bad_Address, - Bad_Hostname, -} \ No newline at end of file diff --git a/core/net/errors_darwin.odin b/core/net/errors_posix.odin similarity index 99% rename from core/net/errors_darwin.odin rename to core/net/errors_posix.odin index a35e96bc0..b59cbc30b 100644 --- a/core/net/errors_darwin.odin +++ b/core/net/errors_posix.odin @@ -1,4 +1,4 @@ -#+build darwin +#+build darwin, netbsd, openbsd package net /* diff --git a/core/net/errors_windows.odin b/core/net/errors_windows.odin index 83c45ee7f..6d3724c82 100644 --- a/core/net/errors_windows.odin +++ b/core/net/errors_windows.odin @@ -63,7 +63,7 @@ _dial_error :: proc() -> Dial_Error { return .Already_Connecting case .WSAEADDRNOTAVAIL, .WSAEAFNOSUPPORT, .WSAEFAULT, .WSAENOTSOCK, .WSAEINPROGRESS, .WSAEINVAL: return .Invalid_Argument - case .WSAECONNREFUSED: + case .WSAECONNREFUSED, .CONNECTION_REFUSED: return .Refused case .WSAEISCONN: return .Already_Connected @@ -122,7 +122,7 @@ _accept_error :: proc() -> Accept_Error { return .Aborted case .WSAEFAULT, .WSAEINPROGRESS, .WSAENOTSOCK: return .Invalid_Argument - case .WSAEINTR: + case .WSAEINTR, .OPERATION_ABORTED: return .Interrupted case .WSAEINVAL: return .Not_Listening diff --git a/core/net/interface_others.odin b/core/net/interface_others.odin new file mode 100644 index 000000000..9a8a141df --- /dev/null +++ b/core/net/interface_others.odin @@ -0,0 +1,11 @@ +#+build !darwin +#+build !linux +#+build !freebsd +#+build !windows +#+build !netbsd +#+build !openbsd +package net + +_enumerate_interfaces :: proc(allocator := context.allocator) -> (interfaces: []Network_Interface, err: Interfaces_Error) { + return +} diff --git a/core/net/interface_darwin.odin b/core/net/interface_posix.odin similarity index 79% rename from core/net/interface_darwin.odin rename to core/net/interface_posix.odin index f18cff995..202951b29 100644 --- a/core/net/interface_darwin.odin +++ b/core/net/interface_posix.odin @@ -1,4 +1,4 @@ -#+build darwin +#+build darwin, openbsd, netbsd package net /* @@ -117,32 +117,47 @@ IF_Flag :: enum u32 { BROADCAST, DEBUG, LOOPBACK, - POINTTOPOINT, - NOTRAILERS, - RUNNING, - NOARP, - PROMISC, - ALLMULTI, - OACTIVE, - SIMPLEX, - LINK0, - LINK1, - LINK2, - MULTICAST, + // NOTE: different order on other BSDs but we don't even need these. + // POINTTOPOINT, + // NOTRAILERS, + // RUNNING, + // NOARP, + // PROMISC, + // ALLMULTI, + // OACTIVE, + // SIMPLEX, + // LINK0, + // LINK1, + // LINK2, + // MULTICAST, } @(private) IF_Flags :: bit_set[IF_Flag; u32] -@(private) -ifaddrs :: struct { - next: ^ifaddrs, - name: cstring, - flags: IF_Flags, - addr: ^posix.sockaddr, - netmask: ^posix.sockaddr, - dstaddr: ^posix.sockaddr, - data: rawptr, +when ODIN_OS == .Darwin || ODIN_OS == .OpenBSD { + @(private) + ifaddrs :: struct { + next: ^ifaddrs, + name: cstring, + flags: IF_Flags, + addr: ^posix.sockaddr, + netmask: ^posix.sockaddr, + dstaddr: ^posix.sockaddr, + data: rawptr, + } +} else when ODIN_OS == .NetBSD { + @(private) + ifaddrs :: struct { + next: ^ifaddrs, + name: cstring, + flags: IF_Flags, + addr: ^posix.sockaddr, + netmask: ^posix.sockaddr, + dstaddr: ^posix.sockaddr, + data: rawptr, + addrflags: u32, + } } @(private) diff --git a/core/net/socket.odin b/core/net/socket.odin index edb47cd0b..e2f96e2f3 100644 --- a/core/net/socket.odin +++ b/core/net/socket.odin @@ -1,4 +1,3 @@ -#+build windows, linux, darwin, freebsd package net /* @@ -20,6 +19,35 @@ package net Feoramund: FreeBSD platform code */ +Socket_Option :: enum i32 { + Broadcast = i32(_SOCKET_OPTION_BROADCAST), + Reuse_Address = i32(_SOCKET_OPTION_REUSE_ADDRESS), + Keep_Alive = i32(_SOCKET_OPTION_KEEP_ALIVE), + Out_Of_Bounds_Data_Inline = i32(_SOCKET_OPTION_OUT_OF_BOUNDS_DATA_INLINE), + Linger = i32(_SOCKET_OPTION_LINGER), + Receive_Buffer_Size = i32(_SOCKET_OPTION_RECEIVE_BUFFER_SIZE), + Send_Buffer_Size = i32(_SOCKET_OPTION_SEND_BUFFER_SIZE), + Receive_Timeout = i32(_SOCKET_OPTION_RECEIVE_TIMEOUT), + Send_Timeout = i32(_SOCKET_OPTION_SEND_TIMEOUT), + + TCP_Nodelay = i32(_SOCKET_OPTION_TCP_NODELAY), + + Use_Loopback = i32(_SOCKET_OPTION_USE_LOOPBACK), + Reuse_Port = i32(_SOCKET_OPTION_REUSE_PORT), + No_SIGPIPE_From_EPIPE = i32(_SOCKET_OPTION_NO_SIGPIPE_FROM_EPIPE), + Reuse_Port_Load_Balancing = i32(_SOCKET_OPTION_REUSE_PORT_LOAD_BALANCING), + + Exclusive_Addr_Use = i32(_SOCKET_OPTION_EXCLUSIVE_ADDR_USE), + Conditional_Accept = i32(_SOCKET_OPTION_CONDITIONAL_ACCEPT), + Dont_Linger = i32(_SOCKET_OPTION_DONT_LINGER), +} + +Shutdown_Manner :: enum i32 { + Receive = i32(_SHUTDOWN_MANNER_RECEIVE), + Send = i32(_SHUTDOWN_MANNER_SEND), + Both = i32(_SHUTDOWN_MANNER_BOTH), +} + any_socket_to_socket :: proc "contextless" (socket: Any_Socket) -> Socket { switch s in socket { case TCP_Socket: return Socket(s) diff --git a/core/net/socket_freebsd.odin b/core/net/socket_freebsd.odin index fa20742cb..bd600fd99 100644 --- a/core/net/socket_freebsd.odin +++ b/core/net/socket_freebsd.odin @@ -20,45 +20,35 @@ package net Feoramund: FreeBSD platform code */ -import "core:c" import "core:sys/freebsd" import "core:time" Fd :: freebsd.Fd -Socket_Option :: enum c.int { - // TODO: Test and implement more socket options. - // DEBUG - Reuse_Address = cast(c.int)freebsd.Socket_Option.REUSEADDR, - Keep_Alive = cast(c.int)freebsd.Socket_Option.KEEPALIVE, - // DONTROUTE - Broadcast = cast(c.int)freebsd.Socket_Option.BROADCAST, - Use_Loopback = cast(c.int)freebsd.Socket_Option.USELOOPBACK, - Linger = cast(c.int)freebsd.Socket_Option.LINGER, - Out_Of_Bounds_Data_Inline = cast(c.int)freebsd.Socket_Option.OOBINLINE, - Reuse_Port = cast(c.int)freebsd.Socket_Option.REUSEPORT, - // TIMESTAMP - No_SIGPIPE_From_EPIPE = cast(c.int)freebsd.Socket_Option.NOSIGPIPE, - // ACCEPTFILTER - // BINTIME - // NO_OFFLOAD - // NO_DDP - Reuse_Port_Load_Balancing = cast(c.int)freebsd.Socket_Option.REUSEPORT_LB, - // RERROR +_SOCKET_OPTION_BROADCAST :: freebsd.Socket_Option.BROADCAST +_SOCKET_OPTION_REUSE_ADDRESS :: freebsd.Socket_Option.REUSEADDR +_SOCKET_OPTION_KEEP_ALIVE :: freebsd.Socket_Option.KEEPALIVE +_SOCKET_OPTION_OUT_OF_BOUNDS_DATA_INLINE :: freebsd.Socket_Option.OOBINLINE +_SOCKET_OPTION_LINGER :: freebsd.Socket_Option.LINGER +_SOCKET_OPTION_RECEIVE_BUFFER_SIZE :: freebsd.Socket_Option.RCVBUF +_SOCKET_OPTION_SEND_BUFFER_SIZE :: freebsd.Socket_Option.SNDBUF +_SOCKET_OPTION_RECEIVE_TIMEOUT :: freebsd.Socket_Option.RCVTIMEO +_SOCKET_OPTION_SEND_TIMEOUT :: freebsd.Socket_Option.SNDTIMEO - Send_Buffer_Size = cast(c.int)freebsd.Socket_Option.SNDBUF, - Receive_Buffer_Size = cast(c.int)freebsd.Socket_Option.RCVBUF, - // SNDLOWAT - // RCVLOWAT - Send_Timeout = cast(c.int)freebsd.Socket_Option.SNDTIMEO, - Receive_Timeout = cast(c.int)freebsd.Socket_Option.RCVTIMEO, -} +_SOCKET_OPTION_TCP_NODELAY :: -1 -Shutdown_Manner :: enum c.int { - Receive = cast(c.int)freebsd.Shutdown_Method.RD, - Send = cast(c.int)freebsd.Shutdown_Method.WR, - Both = cast(c.int)freebsd.Shutdown_Method.RDWR, -} +_SOCKET_OPTION_USE_LOOPBACK :: freebsd.Socket_Option.USELOOPBACK +_SOCKET_OPTION_REUSE_PORT :: freebsd.Socket_Option.REUSEPORT +_SOCKET_OPTION_NO_SIGPIPE_FROM_EPIPE :: freebsd.Socket_Option.NOSIGPIPE +_SOCKET_OPTION_REUSE_PORT_LOAD_BALANCING :: freebsd.Socket_Option.REUSEPORT_LB + +_SOCKET_OPTION_EXCLUSIVE_ADDR_USE :: -1 +_SOCKET_OPTION_CONDITIONAL_ACCEPT :: -1 +_SOCKET_OPTION_DONT_LINGER :: -1 + +_SHUTDOWN_MANNER_RECEIVE :: freebsd.Shutdown_Method.RD +_SHUTDOWN_MANNER_SEND :: freebsd.Shutdown_Method.WR +_SHUTDOWN_MANNER_BOTH :: freebsd.Shutdown_Method.RDWR @(private) _create_socket :: proc(family: Address_Family, protocol: Socket_Protocol) -> (socket: Any_Socket, err: Create_Socket_Error) { @@ -272,7 +262,7 @@ _set_option :: proc(socket: Any_Socket, option: Socket_Option, value: any, loc : ptr: rawptr len: freebsd.socklen_t - switch option { + #partial switch option { case .Reuse_Address, .Keep_Alive, @@ -344,7 +334,7 @@ _set_option :: proc(socket: Any_Socket, option: Socket_Option, value: any, loc : ptr = &int_value len = size_of(int_value) case: - unimplemented("set_option() option not yet implemented", loc) + return .Invalid_Option } real_socket := any_socket_to_socket(socket) diff --git a/core/net/socket_linux.odin b/core/net/socket_linux.odin index 9719ff61b..8348ce114 100644 --- a/core/net/socket_linux.odin +++ b/core/net/socket_linux.odin @@ -21,28 +21,33 @@ package net Feoramund: FreeBSD platform code */ -import "core:c" import "core:time" import "core:sys/linux" -Socket_Option :: enum c.int { - Reuse_Address = c.int(linux.Socket_Option.REUSEADDR), - Keep_Alive = c.int(linux.Socket_Option.KEEPALIVE), - Out_Of_Bounds_Data_Inline = c.int(linux.Socket_Option.OOBINLINE), - TCP_Nodelay = c.int(linux.Socket_TCP_Option.NODELAY), - Linger = c.int(linux.Socket_Option.LINGER), - Receive_Buffer_Size = c.int(linux.Socket_Option.RCVBUF), - Send_Buffer_Size = c.int(linux.Socket_Option.SNDBUF), - Receive_Timeout = c.int(linux.Socket_Option.RCVTIMEO), - Send_Timeout = c.int(linux.Socket_Option.SNDTIMEO), - Broadcast = c.int(linux.Socket_Option.BROADCAST), -} +_SOCKET_OPTION_BROADCAST :: linux.Socket_Option.BROADCAST +_SOCKET_OPTION_REUSE_ADDRESS :: linux.Socket_Option.REUSEADDR +_SOCKET_OPTION_KEEP_ALIVE :: linux.Socket_Option.KEEPALIVE +_SOCKET_OPTION_OUT_OF_BOUNDS_DATA_INLINE :: linux.Socket_Option.OOBINLINE +_SOCKET_OPTION_LINGER :: linux.Socket_Option.LINGER +_SOCKET_OPTION_RECEIVE_BUFFER_SIZE :: linux.Socket_Option.RCVBUF +_SOCKET_OPTION_SEND_BUFFER_SIZE :: linux.Socket_Option.SNDBUF +_SOCKET_OPTION_RECEIVE_TIMEOUT :: linux.Socket_Option.RCVTIMEO +_SOCKET_OPTION_SEND_TIMEOUT :: linux.Socket_Option.SNDTIMEO -Shutdown_Manner :: enum c.int { - Receive = c.int(linux.Shutdown_How.RD), - Send = c.int(linux.Shutdown_How.WR), - Both = c.int(linux.Shutdown_How.RDWR), -} +_SOCKET_OPTION_TCP_NODELAY :: linux.Socket_TCP_Option.NODELAY + +_SOCKET_OPTION_USE_LOOPBACK :: -1 +_SOCKET_OPTION_REUSE_PORT :: -1 +_SOCKET_OPTION_NO_SIGPIPE_FROM_EPIPE :: -1 +_SOCKET_OPTION_REUSE_PORT_LOAD_BALANCING :: -1 + +_SOCKET_OPTION_EXCLUSIVE_ADDR_USE :: -1 +_SOCKET_OPTION_CONDITIONAL_ACCEPT :: -1 +_SOCKET_OPTION_DONT_LINGER :: -1 + +_SHUTDOWN_MANNER_RECEIVE :: linux.Shutdown_How.RD +_SHUTDOWN_MANNER_SEND :: linux.Shutdown_How.WR +_SHUTDOWN_MANNER_BOTH :: linux.Shutdown_How.RDWR // Wrappers and unwrappers for system-native types @@ -347,7 +352,7 @@ _set_option :: proc(sock: Any_Socket, option: Socket_Option, value: any, loc := int_value: i32 timeval_value: linux.Time_Val errno: linux.Errno - switch option { + #partial switch option { case .Reuse_Address, .Keep_Alive, @@ -400,10 +405,14 @@ _set_option :: proc(sock: Any_Socket, option: Socket_Option, value: any, loc := panic("set_option() value must be an integer here", loc) } errno = linux.setsockopt(os_sock, level, int(option), &int_value) + case: + return .Invalid_Socket } + if errno != .NONE { return _socket_option_error(errno) } + return nil } diff --git a/core/net/socket_others.odin b/core/net/socket_others.odin new file mode 100644 index 000000000..61cf7240e --- /dev/null +++ b/core/net/socket_others.odin @@ -0,0 +1,105 @@ +#+build !darwin +#+build !linux +#+build !freebsd +#+build !windows +#+build !netbsd +#+build !openbsd +#+private +package net + +_SOCKET_OPTION_BROADCAST :: -1 +_SOCKET_OPTION_REUSE_ADDRESS :: -1 +_SOCKET_OPTION_KEEP_ALIVE :: -1 +_SOCKET_OPTION_OUT_OF_BOUNDS_DATA_INLINE :: -1 +_SOCKET_OPTION_LINGER :: -1 +_SOCKET_OPTION_RECEIVE_BUFFER_SIZE :: -1 +_SOCKET_OPTION_SEND_BUFFER_SIZE :: -1 +_SOCKET_OPTION_RECEIVE_TIMEOUT :: -1 +_SOCKET_OPTION_SEND_TIMEOUT :: -1 + +_SOCKET_OPTION_TCP_NODELAY :: -1 + +_SOCKET_OPTION_USE_LOOPBACK :: -1 +_SOCKET_OPTION_REUSE_PORT :: -1 +_SOCKET_OPTION_NO_SIGPIPE_FROM_EPIPE :: -1 +_SOCKET_OPTION_REUSE_PORT_LOAD_BALANCING :: -1 + +_SOCKET_OPTION_EXCLUSIVE_ADDR_USE :: -1 +_SOCKET_OPTION_CONDITIONAL_ACCEPT :: -1 +_SOCKET_OPTION_DONT_LINGER :: -1 + +_SHUTDOWN_MANNER_RECEIVE :: -1 +_SHUTDOWN_MANNER_SEND :: -1 +_SHUTDOWN_MANNER_BOTH :: -1 + +_dial_tcp_from_endpoint :: proc(endpoint: Endpoint, options := DEFAULT_TCP_OPTIONS) -> (sock: TCP_Socket, err: Network_Error) { + err = Create_Socket_Error.Network_Unreachable + return +} + +_create_socket :: proc(family: Address_Family, protocol: Socket_Protocol) -> (sock: Any_Socket, err: Create_Socket_Error) { + err = .Network_Unreachable + return +} + +_bind :: proc(skt: Any_Socket, ep: Endpoint) -> (err: Bind_Error) { + err = .Network_Unreachable + return +} + +_listen_tcp :: proc(interface_endpoint: Endpoint, backlog := 1000) -> (skt: TCP_Socket, err: Network_Error) { + err = Create_Socket_Error.Network_Unreachable + return +} + +_bound_endpoint :: proc(sock: Any_Socket) -> (ep: Endpoint, err: Socket_Info_Error) { + err = .Network_Unreachable + return +} + +_peer_endpoint :: proc(sock: Any_Socket) -> (ep: Endpoint, err: Socket_Info_Error) { + err = .Network_Unreachable + return +} + +_accept_tcp :: proc(sock: TCP_Socket, options := DEFAULT_TCP_OPTIONS) -> (client: TCP_Socket, source: Endpoint, err: Accept_Error) { + err = .Network_Unreachable + return +} + +_close :: proc(skt: Any_Socket) { +} + +_recv_tcp :: proc(skt: TCP_Socket, buf: []byte) -> (bytes_read: int, err: TCP_Recv_Error) { + err = .Network_Unreachable + return +} + +_recv_udp :: proc(skt: UDP_Socket, buf: []byte) -> (bytes_read: int, remote_endpoint: Endpoint, err: UDP_Recv_Error) { + err = .Network_Unreachable + return +} + +_send_tcp :: proc(skt: TCP_Socket, buf: []byte) -> (bytes_written: int, err: TCP_Send_Error) { + err = .Network_Unreachable + return +} + +_send_udp :: proc(skt: UDP_Socket, buf: []byte, to: Endpoint) -> (bytes_written: int, err: UDP_Send_Error) { + err = .Network_Unreachable + return +} + +_shutdown :: proc(skt: Any_Socket, manner: Shutdown_Manner) -> (err: Shutdown_Error) { + err = .Network_Unreachable + return +} + +_set_option :: proc(s: Any_Socket, option: Socket_Option, value: any, loc := #caller_location) -> Socket_Option_Error { + return .Network_Unreachable +} + +_set_blocking :: proc(socket: Any_Socket, should_block: bool) -> (err: Set_Blocking_Error) { + err = .Network_Unreachable + return +} diff --git a/core/net/socket_darwin.odin b/core/net/socket_posix.odin similarity index 90% rename from core/net/socket_darwin.odin rename to core/net/socket_posix.odin index 8e01eb4a8..243b2e06f 100644 --- a/core/net/socket_darwin.odin +++ b/core/net/socket_posix.odin @@ -1,4 +1,4 @@ -#+build darwin +#+build darwin, netbsd, openbsd package net /* @@ -20,28 +20,33 @@ package net Feoramund: FreeBSD platform code */ -import "core:c" import "core:sys/posix" import "core:time" -Socket_Option :: enum c.int { - Broadcast = c.int(posix.Sock_Option.BROADCAST), - Reuse_Address = c.int(posix.Sock_Option.REUSEADDR), - Keep_Alive = c.int(posix.Sock_Option.KEEPALIVE), - Out_Of_Bounds_Data_Inline = c.int(posix.Sock_Option.OOBINLINE), - TCP_Nodelay = c.int(posix.TCP_NODELAY), - Linger = c.int(posix.Sock_Option.LINGER), - Receive_Buffer_Size = c.int(posix.Sock_Option.RCVBUF), - Send_Buffer_Size = c.int(posix.Sock_Option.SNDBUF), - Receive_Timeout = c.int(posix.Sock_Option.RCVTIMEO), - Send_Timeout = c.int(posix.Sock_Option.SNDTIMEO), -} +_SOCKET_OPTION_BROADCAST :: posix.Sock_Option.BROADCAST +_SOCKET_OPTION_REUSE_ADDRESS :: posix.Sock_Option.REUSEADDR +_SOCKET_OPTION_KEEP_ALIVE :: posix.Sock_Option.KEEPALIVE +_SOCKET_OPTION_OUT_OF_BOUNDS_DATA_INLINE :: posix.Sock_Option.OOBINLINE +_SOCKET_OPTION_LINGER :: posix.Sock_Option.LINGER +_SOCKET_OPTION_RECEIVE_BUFFER_SIZE :: posix.Sock_Option.RCVBUF +_SOCKET_OPTION_SEND_BUFFER_SIZE :: posix.Sock_Option.SNDBUF +_SOCKET_OPTION_RECEIVE_TIMEOUT :: posix.Sock_Option.RCVTIMEO +_SOCKET_OPTION_SEND_TIMEOUT :: posix.Sock_Option.SNDTIMEO -Shutdown_Manner :: enum c.int { - Receive = c.int(posix.SHUT_RD), - Send = c.int(posix.SHUT_WR), - Both = c.int(posix.SHUT_RDWR), -} +_SOCKET_OPTION_TCP_NODELAY :: posix.TCP_NODELAY + +_SOCKET_OPTION_USE_LOOPBACK :: -1 +_SOCKET_OPTION_REUSE_PORT :: -1 +_SOCKET_OPTION_NO_SIGPIPE_FROM_EPIPE :: -1 +_SOCKET_OPTION_REUSE_PORT_LOAD_BALANCING :: -1 + +_SOCKET_OPTION_EXCLUSIVE_ADDR_USE :: -1 +_SOCKET_OPTION_CONDITIONAL_ACCEPT :: -1 +_SOCKET_OPTION_DONT_LINGER :: -1 + +_SHUTDOWN_MANNER_RECEIVE :: posix.SHUT_RD +_SHUTDOWN_MANNER_SEND :: posix.SHUT_WR +_SHUTDOWN_MANNER_BOTH :: posix.SHUT_RDWR @(private) _create_socket :: proc(family: Address_Family, protocol: Socket_Protocol) -> (socket: Any_Socket, err: Create_Socket_Error) { @@ -273,7 +278,7 @@ _set_option :: proc(s: Any_Socket, option: Socket_Option, value: any, loc := #ca ptr: rawptr len: posix.socklen_t - switch option { + #partial switch option { case .Broadcast, .Reuse_Address, @@ -327,6 +332,8 @@ _set_option :: proc(s: Any_Socket, option: Socket_Option, value: any, loc := #ca } ptr = &int_value len = size_of(int_value) + case: + return .Invalid_Option } skt := any_socket_to_socket(s) diff --git a/core/net/socket_windows.odin b/core/net/socket_windows.odin index 6dd2f0458..4eea0ea65 100644 --- a/core/net/socket_windows.odin +++ b/core/net/socket_windows.odin @@ -24,59 +24,30 @@ import "core:c" import win "core:sys/windows" import "core:time" -Socket_Option :: enum c.int { - // bool: Whether the address that this socket is bound to can be reused by other sockets. - // This allows you to bypass the cooldown period if a program dies while the socket is bound. - Reuse_Address = win.SO_REUSEADDR, +_SOCKET_OPTION_BROADCAST :: win.SO_BROADCAST +_SOCKET_OPTION_REUSE_ADDRESS :: win.SO_REUSEADDR +_SOCKET_OPTION_KEEP_ALIVE :: win.SO_KEEPALIVE +_SOCKET_OPTION_OUT_OF_BOUNDS_DATA_INLINE :: win.SO_OOBINLINE +_SOCKET_OPTION_LINGER :: win.SO_LINGER +_SOCKET_OPTION_RECEIVE_BUFFER_SIZE :: win.SO_RCVBUF +_SOCKET_OPTION_SEND_BUFFER_SIZE :: win.SO_SNDBUF +_SOCKET_OPTION_RECEIVE_TIMEOUT :: win.SO_RCVTIMEO +_SOCKET_OPTION_SEND_TIMEOUT :: win.SO_SNDTIMEO - // bool: Whether other programs will be inhibited from binding the same endpoint as this socket. - Exclusive_Addr_Use = win.SO_EXCLUSIVEADDRUSE, +_SOCKET_OPTION_TCP_NODELAY :: win.TCP_NODELAY - // bool: When true, keepalive packets will be automatically be sent for this connection. TODO: verify this understanding - Keep_Alive = win.SO_KEEPALIVE, +_SOCKET_OPTION_USE_LOOPBACK :: -1 +_SOCKET_OPTION_REUSE_PORT :: -1 +_SOCKET_OPTION_NO_SIGPIPE_FROM_EPIPE :: -1 +_SOCKET_OPTION_REUSE_PORT_LOAD_BALANCING :: -1 - // bool: When true, client connections will immediately be sent a TCP/IP RST response, rather than being accepted. - Conditional_Accept = win.SO_CONDITIONAL_ACCEPT, +_SOCKET_OPTION_EXCLUSIVE_ADDR_USE :: win.SO_EXCLUSIVEADDRUSE +_SOCKET_OPTION_CONDITIONAL_ACCEPT :: win.SO_CONDITIONAL_ACCEPT +_SOCKET_OPTION_DONT_LINGER :: win.SO_DONTLINGER - // bool: If true, when the socket is closed, but data is still waiting to be sent, discard that data. - Dont_Linger = win.SO_DONTLINGER, - - // bool: When true, 'out-of-band' data sent over the socket will be read by a normal net.recv() call, the same as normal 'in-band' data. - Out_Of_Bounds_Data_Inline = win.SO_OOBINLINE, - - // bool: When true, disables send-coalescing, therefore reducing latency. - TCP_Nodelay = win.TCP_NODELAY, - - // win.LINGER: Customizes how long (if at all) the socket will remain open when there - // is some remaining data waiting to be sent, and net.close() is called. - Linger = win.SO_LINGER, - - // win.DWORD: The size, in bytes, of the OS-managed receive-buffer for this socket. - Receive_Buffer_Size = win.SO_RCVBUF, - - // win.DWORD: The size, in bytes, of the OS-managed send-buffer for this socket. - Send_Buffer_Size = win.SO_SNDBUF, - - // win.DWORD: For blocking sockets, the time in milliseconds to wait for incoming data to be received, before giving up and returning .Timeout. - // For non-blocking sockets, ignored. - // Use a value of zero to potentially wait forever. - Receive_Timeout = win.SO_RCVTIMEO, - - // win.DWORD: For blocking sockets, the time in milliseconds to wait for outgoing data to be sent, before giving up and returning .Timeout. - // For non-blocking sockets, ignored. - // Use a value of zero to potentially wait forever. - Send_Timeout = win.SO_SNDTIMEO, - - // bool: Allow sending to, receiving from, and binding to, a broadcast address. - Broadcast = win.SO_BROADCAST, -} - - -Shutdown_Manner :: enum c.int { - Receive = win.SD_RECEIVE, - Send = win.SD_SEND, - Both = win.SD_BOTH, -} +_SHUTDOWN_MANNER_RECEIVE :: win.SD_RECEIVE +_SHUTDOWN_MANNER_SEND :: win.SD_SEND +_SHUTDOWN_MANNER_BOTH :: win.SD_BOTH @(init, private) ensure_winsock_initialized :: proc "contextless" () { @@ -322,7 +293,7 @@ _set_option :: proc(s: Any_Socket, option: Socket_Option, value: any, loc := #ca ptr: rawptr len: c.int - switch option { + #partial switch option { case .Reuse_Address, .Exclusive_Addr_Use, @@ -383,6 +354,8 @@ _set_option :: proc(s: Any_Socket, option: Socket_Option, value: any, loc := #ca } ptr = &int_value len = size_of(int_value) + case: + return .Invalid_Option } socket := any_socket_to_socket(s) diff --git a/tests/core/net/test_core_net.odin b/tests/core/net/test_core_net.odin index 9b3973a60..55fe6671d 100644 --- a/tests/core/net/test_core_net.odin +++ b/tests/core/net/test_core_net.odin @@ -10,8 +10,6 @@ A test suite for `core:net` */ -#+build !netbsd -#+build !openbsd #+feature dynamic-literals package test_core_net From d1fa640549c36c650f81b24f616db039aaf49ea4 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:07:54 +0100 Subject: [PATCH 088/212] runtime: use `alloc_non_zeroed` in `new_clone`; zeroing is not needed --- base/runtime/core_builtin.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index 6fecbaad9..42bf13478 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -360,7 +360,7 @@ new_aligned :: proc($T: typeid, alignment: int, allocator := context.allocator, @(builtin, require_results) new_clone :: proc(data: $T, allocator := context.allocator, loc := #caller_location) -> (t: ^T, err: Allocator_Error) #optional_allocator_error { - t = (^T)(raw_data(mem_alloc_bytes(size_of(T), align_of(T), allocator, loc) or_return)) + t = (^T)(raw_data(mem_alloc_non_zeroed(size_of(T), align_of(T), allocator, loc) or_return)) if t != nil { t^ = data } From ec040c1fcb373b5230215b618af08714d452350f Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:08:42 +0100 Subject: [PATCH 089/212] rbtree: fix pointer usages --- core/container/rbtree/rbtree.odin | 8 ++--- tests/core/container/test_core_rbtree.odin | 34 ++++++++-------------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/core/container/rbtree/rbtree.odin b/core/container/rbtree/rbtree.odin index 35ce21413..e892188d7 100644 --- a/core/container/rbtree/rbtree.odin +++ b/core/container/rbtree/rbtree.odin @@ -91,7 +91,7 @@ destroy :: proc(t: ^$T/Tree($Key, $Value), call_on_remove: bool = true) { } } -len :: proc "contextless" (t: ^$T/Tree($Key, $Value)) -> (node_count: int) { +len :: proc "contextless" (t: $T/Tree($Key, $Value)) -> (node_count: int) { return t._size } @@ -108,7 +108,7 @@ last :: proc "contextless" (t: ^$T/Tree($Key, $Value)) -> ^Node(Key, Value) { } // find finds the key in the tree, and returns the corresponding node, or nil iff the value is not present. -find :: proc(t: ^$T/Tree($Key, $Value), key: Key) -> (node: ^Node(Key, Value)) { +find :: proc(t: $T/Tree($Key, $Value), key: Key) -> (node: ^Node(Key, Value)) { node = t._root for node != nil { switch t._cmp_fn(key, node.key) { @@ -121,7 +121,7 @@ find :: proc(t: ^$T/Tree($Key, $Value), key: Key) -> (node: ^Node(Key, Value)) { } // find_value finds the key in the tree, and returns the corresponding value, or nil iff the value is not present. -find_value :: proc(t: ^$T/Tree($Key, $Value), key: Key) -> (value: Value, ok: bool) #optional_ok { +find_value :: proc(t: $T/Tree($Key, $Value), key: Key) -> (value: Value, ok: bool) #optional_ok { if n := find(t, key); n != nil { return n.value, true } @@ -166,7 +166,7 @@ remove :: proc { // removal was successful. While the node's key + value will be left intact, // the node itself will be freed via the tree's node allocator. remove_key :: proc(t: ^$T/Tree($Key, $Value), key: Key, call_on_remove := true) -> bool { - n := find(t, key) + n := find(t^, key) if n == nil { return false // Key not found, nothing to do } diff --git a/tests/core/container/test_core_rbtree.odin b/tests/core/container/test_core_rbtree.odin index d220b7ed6..78d710b7f 100644 --- a/tests/core/container/test_core_rbtree.odin +++ b/tests/core/container/test_core_rbtree.odin @@ -4,22 +4,15 @@ import rb "core:container/rbtree" import "core:math/rand" import "core:testing" import "base:intrinsics" -import "core:mem" import "core:slice" import "core:log" test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) { - track: mem.Tracking_Allocator - mem.tracking_allocator_init(&track, context.allocator) - track.bad_free_callback = mem.tracking_allocator_bad_free_callback_add_to_array - defer mem.tracking_allocator_destroy(&track) - context.allocator = mem.tracking_allocator(&track) - log.infof("Testing Red-Black Tree($Key=%v,$Value=%v) using random seed %v.", type_info_of(Key), type_info_of(Value), t.seed) tree: rb.Tree(Key, Value) rb.init(&tree) - testing.expect(t, rb.len(&tree) == 0, "empty: len should be 0") + testing.expect(t, rb.len(tree) == 0, "empty: len should be 0") testing.expect(t, rb.first(&tree) == nil, "empty: first should be nil") testing.expect(t, rb.last(&tree) == nil, "empty: last should be nil") iter := rb.iterator(&tree, .Forward) @@ -48,7 +41,7 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) { } entry_count := len(inserted_map) - testing.expect(t, rb.len(&tree) == entry_count, "insert: len after") + testing.expect(t, rb.len(tree) == entry_count, "insert: len after") validate_rbtree(t, &tree) first := rb.first(&tree) @@ -58,8 +51,8 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) { // Ensure that all entries can be found. for k, v in inserted_map { - testing.expect(t, v == rb.find(&tree, k), "Find(): Node") - testing.expect(t, k == v.key, "Find(): Node key") + testing.expect(t, v == rb.find(tree, k), "Find(): Node") + testing.expect(t, k == v.key, "Find(): Node key") } // Test the forward/backward iterators. @@ -97,17 +90,17 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) { (^int)(user_data)^ -= 1 } for k, i in inserted_keys { - node := rb.find(&tree, k) + node := rb.find(tree, k) testing.expect(t, node != nil, "remove: find (pre)") ok := rb.remove(&tree, k) testing.expect(t, ok, "remove: succeeds") - testing.expect(t, entry_count - (i + 1) == rb.len(&tree), "remove: len (post)") + testing.expect(t, entry_count - (i + 1) == rb.len(tree), "remove: len (post)") validate_rbtree(t, &tree) - testing.expect(t, nil == rb.find(&tree, k), "remove: find (post") + testing.expect(t, nil == rb.find(tree, k), "remove: find (post") } - testing.expect(t, rb.len(&tree) == 0, "remove: len should be 0") + testing.expect(t, rb.len(tree) == 0, "remove: len should be 0") testing.expectf(t, callback_count == 0, "remove: on_remove should've been called %v times, it was %v", entry_count, callback_count) testing.expect(t, rb.first(&tree) == nil, "remove: first should be nil") testing.expect(t, rb.last(&tree) == nil, "remove: last should be nil") @@ -129,28 +122,25 @@ test_rbtree_integer :: proc(t: ^testing.T, $Key: typeid, $Value: typeid) { ok = rb.iterator_remove(&iter) testing.expect(t, !ok, "iterator/remove: redundant removes should fail") - testing.expect(t, rb.find(&tree, k) == nil, "iterator/remove: node should be gone") + testing.expect(t, rb.find(tree, k) == nil, "iterator/remove: node should be gone") testing.expect(t, rb.iterator_get(&iter) == nil, "iterator/remove: get should return nil") // Ensure that iterator_next still works. node, ok = rb.iterator_next(&iter) - testing.expect(t, ok == (rb.len(&tree) > 0), "iterator/remove: next should return false") + testing.expect(t, ok == (rb.len(tree) > 0), "iterator/remove: next should return false") testing.expect(t, node == rb.first(&tree), "iterator/remove: next should return first") validate_rbtree(t, &tree) } - testing.expect(t, rb.len(&tree) == entry_count - 1, "iterator/remove: len should drop by 1") + testing.expect(t, rb.len(tree) == entry_count - 1, "iterator/remove: len should drop by 1") rb.destroy(&tree) - testing.expect(t, rb.len(&tree) == 0, "destroy: len should be 0") + testing.expect(t, rb.len(tree) == 0, "destroy: len should be 0") testing.expectf(t, callback_count == 0, "remove: on_remove should've been called %v times, it was %v", entry_count, callback_count) // print_tree_node(tree._root) delete(inserted_map) delete(inserted_keys) - testing.expectf(t, len(track.allocation_map) == 0, "Expected 0 leaks, have %v", len(track.allocation_map)) - testing.expectf(t, len(track.bad_free_array) == 0, "Expected 0 bad frees, have %v", len(track.bad_free_array)) - return } @(test) From 08c4503875eb77f35cbb1222744ddfcda6fd3090 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:08:59 +0100 Subject: [PATCH 090/212] xar: fix example --- core/container/xar/xar.odin | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/container/xar/xar.odin b/core/container/xar/xar.odin index 8ed5bc3e4..07fdf5a15 100644 --- a/core/container/xar/xar.odin +++ b/core/container/xar/xar.odin @@ -417,9 +417,10 @@ Create an iterator for traversing the exponential array. Example: - import "lib:xar" + import "core:container/xar" + import "core:fmt" - iteration_example :: proc() { + iterator_example :: proc() { x: xar.Array(int, 4) defer xar.destroy(&x) From f6b8e086283a63d49327f5b5eecaa3b32434030a Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:09:11 +0100 Subject: [PATCH 091/212] simd: fix typos --- core/simd/simd.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/simd/simd.odin b/core/simd/simd.odin index 14bf03f43..e2373d3e2 100644 --- a/core/simd/simd.odin +++ b/core/simd/simd.odin @@ -2207,7 +2207,7 @@ swizzle :: builtin.swizzle /* Extract the set of most-significant bits of a SIMD vector. -This procedure checks the the most-significant bit (MSB) for each lane of vector +This procedure checks the most-significant bit (MSB) for each lane of vector and returns the numbers of lanes with the most-significant bit set. This procedure can be used in conjuction with `lanes_eq` (and other similar procedures) to count the number of matched lanes by computing the cardinality of the resulting @@ -2253,7 +2253,7 @@ extract_msbs :: intrinsics.simd_extract_msbs /* Extract the set of least-significant bits of a SIMD vector. -This procedure checks the the least-significant bit (LSB) for each lane of vector +This procedure checks the least-significant bit (LSB) for each lane of vector and returns the numbers of lanes with the least-significant bit set. This procedure can be used in conjuction with `lanes_eq` (and other similar procedures) to count the number of matched lanes by computing the cardinality of the resulting From 6c663b7a71ddd1288b92cd47eb6876e96cb3ab34 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:09:40 +0100 Subject: [PATCH 092/212] slice: fix examples --- core/slice/sort.odin | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/core/slice/sort.odin b/core/slice/sort.odin index d438cfc1b..9f91a0f73 100644 --- a/core/slice/sort.odin +++ b/core/slice/sort.odin @@ -300,7 +300,9 @@ Example: import "core:slice" import "core:fmt" - main :: proc() { + stable_sort_by_example :: proc() { + Example :: struct { n: int, s: string } + arr := []Example { {2, "name"}, {3, "Bill"}, @@ -312,10 +314,9 @@ Example: }) for e in arr do fmt.printf("%s ", e.s) + fmt.println() } - Example :: struct { n: int, s: string } - Output: My name is Bill */ @@ -335,7 +336,9 @@ Example: import "core:slice" import "core:fmt" - main :: proc() { + stable_sort_by_cmp_example :: proc() { + Example :: struct { n: int, s: string } + arr := []Example { {2, "name"}, {3, "Bill"}, @@ -347,9 +350,9 @@ Example: }) for e in arr do fmt.printf("%s ", e.s) + fmt.println() } - Example :: struct { n: int, s: string } Output: My name is Bill */ From b9946aa67e01e6ec5716c15f608569dfda4ff521 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:10:02 +0100 Subject: [PATCH 093/212] chan: fix example and deadlock on closed channel --- core/sync/chan/chan.odin | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/core/sync/chan/chan.odin b/core/sync/chan/chan.odin index 05312e5a2..17618763f 100644 --- a/core/sync/chan/chan.odin +++ b/core/sync/chan/chan.odin @@ -1166,7 +1166,7 @@ Example: import "core:sync/chan" import "core:fmt" - select_raw_example :: proc() { + try_select_raw_example :: proc() { c, err := chan.create(chan.Chan(int), 1, context.allocator) assert(err == .None) defer chan.destroy(c) @@ -1198,11 +1198,11 @@ Example: Output: - SELECT: 0 true + SELECT: 0 Send RECEIVED VALUE 0 - SELECT: 0 true + SELECT: 0 Recv RECEIVED VALUE 1 - SELECT: 0 false + SELECT: -1 None */ @(require_results) @@ -1219,7 +1219,7 @@ try_select_raw :: proc "odin" (recvs: []^Raw_Chan, sends: []^Raw_Chan, send_msgs count := 0 for c, i in recvs { - if can_recv(c) { + if !c.closed && can_recv(c) { candidates[count] = { is_recv = true, idx = i, @@ -1232,7 +1232,7 @@ try_select_raw :: proc "odin" (recvs: []^Raw_Chan, sends: []^Raw_Chan, send_msgs if i > builtin.len(send_msgs)-1 || send_msgs[i] == nil { continue } - if can_send(c) { + if !c.closed && can_send(c) { candidates[count] = { is_recv = false, idx = i, From fa97aa4dc9745af233ea96997a1c8e4094993b7c Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:10:30 +0100 Subject: [PATCH 094/212] thread: fix aligned loading of unaligned addresses --- core/thread/thread.odin | 45 ++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/core/thread/thread.odin b/core/thread/thread.odin index 26c1a3e27..a07801b98 100644 --- a/core/thread/thread.odin +++ b/core/thread/thread.odin @@ -5,7 +5,10 @@ import "base:runtime" import "core:mem" import "base:intrinsics" -_ :: intrinsics +@(private) +unall :: intrinsics.unaligned_load +@(private) +unals :: intrinsics.unaligned_store /* Value, specifying whether `core:thread` functionality is available on the @@ -347,7 +350,9 @@ create_and_start_with_poly_data :: proc(data: $T, fn: proc(data: T), init_contex thread_proc :: proc(t: ^Thread) { fn := cast(proc(T))t.data assert(t.user_index >= 1) - data := (^T)(&t.user_args[0])^ + + data := unall((^T)(&t.user_args)) + fn(data) } if t = create(thread_proc, priority); t == nil { @@ -356,9 +361,7 @@ create_and_start_with_poly_data :: proc(data: $T, fn: proc(data: T), init_contex t.data = rawptr(fn) t.user_index = 1 - data := data - - mem.copy(&t.user_args[0], &data, size_of(T)) + unals((^T)(&t.user_args), data) if self_cleanup { intrinsics.atomic_or(&t.flags, {.Self_Cleanup}) @@ -393,9 +396,10 @@ create_and_start_with_poly_data2 :: proc(arg1: $T1, arg2: $T2, fn: proc(T1, T2), fn := cast(proc(T1, T2))t.data assert(t.user_index >= 2) - user_args := mem.slice_to_bytes(t.user_args[:]) - arg1 := (^T1)(raw_data(user_args))^ - arg2 := (^T2)(raw_data(user_args[size_of(T1):]))^ + ptr := uintptr(&t.user_args) + + arg1 := unall((^T1)(rawptr(ptr))) + arg2 := unall((^T2)(rawptr(ptr + size_of(T1)))) fn(arg1, arg2) } @@ -405,11 +409,10 @@ create_and_start_with_poly_data2 :: proc(arg1: $T1, arg2: $T2, fn: proc(T1, T2), t.data = rawptr(fn) t.user_index = 2 - arg1, arg2 := arg1, arg2 - user_args := mem.slice_to_bytes(t.user_args[:]) + ptr := uintptr(&t.user_args) - n := copy(user_args, mem.ptr_to_bytes(&arg1)) - _ = copy(user_args[n:], mem.ptr_to_bytes(&arg2)) + unals((^T1)(rawptr(ptr)), arg1) + unals((^T2)(rawptr(ptr + size_of(T1))), arg2) if self_cleanup { intrinsics.atomic_or(&t.flags, {.Self_Cleanup}) @@ -444,10 +447,11 @@ create_and_start_with_poly_data3 :: proc(arg1: $T1, arg2: $T2, arg3: $T3, fn: pr fn := cast(proc(T1, T2, T3))t.data assert(t.user_index >= 3) - user_args := mem.slice_to_bytes(t.user_args[:]) - arg1 := (^T1)(raw_data(user_args))^ - arg2 := (^T2)(raw_data(user_args[size_of(T1):]))^ - arg3 := (^T3)(raw_data(user_args[size_of(T1) + size_of(T2):]))^ + ptr := uintptr(&t.user_args) + + arg1 := unall((^T1)(rawptr(ptr))) + arg2 := unall((^T2)(rawptr(ptr + size_of(T1)))) + arg3 := unall((^T3)(rawptr(ptr + size_of(T1) + size_of(T2)))) fn(arg1, arg2, arg3) } @@ -457,12 +461,11 @@ create_and_start_with_poly_data3 :: proc(arg1: $T1, arg2: $T2, arg3: $T3, fn: pr t.data = rawptr(fn) t.user_index = 3 - arg1, arg2, arg3 := arg1, arg2, arg3 - user_args := mem.slice_to_bytes(t.user_args[:]) + ptr := uintptr(&t.user_args) - n := copy(user_args, mem.ptr_to_bytes(&arg1)) - n += copy(user_args[n:], mem.ptr_to_bytes(&arg2)) - _ = copy(user_args[n:], mem.ptr_to_bytes(&arg3)) + unals((^T1)(rawptr(ptr)), arg1) + unals((^T2)(rawptr(ptr + size_of(T1))), arg2) + unals((^T3)(rawptr(ptr + size_of(T1) + size_of(T2))), arg3) if self_cleanup { intrinsics.atomic_or(&t.flags, {.Self_Cleanup}) From bc7040209364f06817ceeff4d5effd599f70f5f5 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:11:07 +0100 Subject: [PATCH 095/212] os: add non blocking open flag --- core/os/os2/file.odin | 2 +- core/os/os2/file_linux.odin | 1 + core/os/os2/file_posix.odin | 13 +++++++------ core/os/os2/file_wasi.odin | 5 +++-- core/os/os2/file_windows.odin | 10 +++++++++- core/os/os2/temp_file.odin | 4 ++-- core/os/os_windows.odin | 10 ++++++++-- 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/core/os/os2/file.odin b/core/os/os2/file.odin index 9e7788c31..33446726e 100644 --- a/core/os/os2/file.odin +++ b/core/os/os2/file.odin @@ -67,7 +67,7 @@ File_Flag :: enum { Trunc, Sparse, Inheritable, - + Non_Blocking, Unbuffered_IO, } diff --git a/core/os/os2/file_linux.odin b/core/os/os2/file_linux.odin index fb25ca411..924251dfc 100644 --- a/core/os/os2/file_linux.odin +++ b/core/os/os2/file_linux.odin @@ -82,6 +82,7 @@ _open :: proc(name: string, flags: File_Flags, perm: Permissions) -> (f: ^File, if .Excl in flags { sys_flags += {.EXCL} } if .Sync in flags { sys_flags += {.DSYNC} } if .Trunc in flags { sys_flags += {.TRUNC} } + if .Non_Blocking in flags { sys_flags += {.NONBLOCK} } if .Inheritable in flags { sys_flags -= {.CLOEXEC} } fd, errno := linux.open(name_cstr, sys_flags, transmute(linux.Mode)transmute(u32)perm) diff --git a/core/os/os2/file_posix.odin b/core/os/os2/file_posix.odin index 874ec7c7d..cdc8e491a 100644 --- a/core/os/os2/file_posix.odin +++ b/core/os/os2/file_posix.odin @@ -61,12 +61,13 @@ _open :: proc(name: string, flags: File_Flags, perm: Permissions) -> (f: ^File, } } - if .Append in flags { sys_flags += {.APPEND} } - if .Create in flags { sys_flags += {.CREAT} } - if .Excl in flags { sys_flags += {.EXCL} } - if .Sync in flags { sys_flags += {.DSYNC} } - if .Trunc in flags { sys_flags += {.TRUNC} } - if .Inheritable in flags { sys_flags -= {.CLOEXEC} } + if .Append in flags { sys_flags += {.APPEND} } + if .Create in flags { sys_flags += {.CREAT} } + if .Excl in flags { sys_flags += {.EXCL} } + if .Sync in flags { sys_flags += {.DSYNC} } + if .Trunc in flags { sys_flags += {.TRUNC} } + if .Non_Blocking in flags { sys_flags += {.NONBLOCK} } + if .Inheritable in flags { sys_flags -= {.CLOEXEC} } temp_allocator := TEMP_ALLOCATOR_GUARD({}) cname := clone_to_cstring(name, temp_allocator) or_return diff --git a/core/os/os2/file_wasi.odin b/core/os/os2/file_wasi.odin index b60cce4be..fc37ef9f2 100644 --- a/core/os/os2/file_wasi.odin +++ b/core/os/os2/file_wasi.odin @@ -185,8 +185,9 @@ _open :: proc(name: string, flags: File_Flags, perm: Permissions) -> (f: ^File, if .Trunc in flags { oflags += {.TRUNC} } fdflags: wasi.fdflags_t - if .Append in flags { fdflags += {.APPEND} } - if .Sync in flags { fdflags += {.SYNC} } + if .Append in flags { fdflags += {.APPEND} } + if .Sync in flags { fdflags += {.SYNC} } + if .Non_Blocking in flags { fdflags += {.NONBLOCK} } // NOTE: rights are adjusted to what this package's functions might want to call. rights: wasi.rights_t diff --git a/core/os/os2/file_windows.odin b/core/os/os2/file_windows.odin index 9a969f07e..4df9398cc 100644 --- a/core/os/os2/file_windows.odin +++ b/core/os/os2/file_windows.odin @@ -126,7 +126,11 @@ _open_internal :: proc(name: string, flags: File_Flags, perm: Permissions) -> (h // NOTE(bill): Open has just asked to create a file in read-only mode. // If the file already exists, to make it akin to a *nix open call, // the call preserves the existing permissions. - h := win32.CreateFileW(path, access, share_mode, &sa, win32.TRUNCATE_EXISTING, win32.FILE_ATTRIBUTE_NORMAL, nil) + nix_attrs := win32.FILE_ATTRIBUTE_NORMAL + if .Non_Blocking in flags { + nix_attrs |= win32.FILE_FLAG_OVERLAPPED + } + h := win32.CreateFileW(path, access, share_mode, &sa, win32.TRUNCATE_EXISTING, nix_attrs, nil) if h == win32.INVALID_HANDLE { switch e := win32.GetLastError(); e { case win32.ERROR_FILE_NOT_FOUND, _ERROR_BAD_NETPATH, win32.ERROR_PATH_NOT_FOUND: @@ -140,6 +144,10 @@ _open_internal :: proc(name: string, flags: File_Flags, perm: Permissions) -> (h } } + if .Non_Blocking in flags { + attrs |= win32.FILE_FLAG_OVERLAPPED + } + h := win32.CreateFileW(path, access, share_mode, &sa, create_mode, attrs, nil) if h == win32.INVALID_HANDLE { return 0, _get_platform_error() diff --git a/core/os/os2/temp_file.odin b/core/os/os2/temp_file.odin index f0bc3788e..2c0236428 100644 --- a/core/os/os2/temp_file.odin +++ b/core/os/os2/temp_file.odin @@ -14,7 +14,7 @@ MAX_ATTEMPTS :: 1<<13 // Should be enough for everyone, right? // // The caller must `close` the file once finished with. @(require_results) -create_temp_file :: proc(dir, pattern: string) -> (f: ^File, err: Error) { +create_temp_file :: proc(dir, pattern: string, additional_flags: File_Flags = {}) -> (f: ^File, err: Error) { temp_allocator := TEMP_ALLOCATOR_GUARD({}) dir := dir if dir != "" else temp_directory(temp_allocator) or_return prefix, suffix := _prefix_and_suffix(pattern) or_return @@ -26,7 +26,7 @@ create_temp_file :: proc(dir, pattern: string) -> (f: ^File, err: Error) { attempts := 0 for { name := concatenate_strings_from_buffer(name_buf[:], prefix, random_string(rand_buf[:]), suffix) - f, err = open(name, {.Read, .Write, .Create, .Excl}, Permissions_Read_Write_All) + f, err = open(name, {.Read, .Write, .Create, .Excl} + additional_flags, Permissions_Read_Write_All) if err == .Exist { close(f) attempts += 1 diff --git a/core/os/os_windows.odin b/core/os/os_windows.odin index 03c194596..cb7e42f67 100644 --- a/core/os/os_windows.odin +++ b/core/os/os_windows.odin @@ -333,8 +333,14 @@ open :: proc(path: string, mode: int = O_RDONLY, perm: int = 0) -> (Handle, Erro case: create_mode = win32.OPEN_EXISTING } + + attrs := win32.FILE_ATTRIBUTE_NORMAL|win32.FILE_FLAG_BACKUP_SEMANTICS + if mode & (O_NONBLOCK) == O_NONBLOCK { + attrs |= win32.FILE_FLAG_OVERLAPPED + } + wide_path := win32.utf8_to_wstring(path) - handle := Handle(win32.CreateFileW(wide_path, access, share_mode, sa, create_mode, win32.FILE_ATTRIBUTE_NORMAL|win32.FILE_FLAG_BACKUP_SEMANTICS, nil)) + handle := Handle(win32.CreateFileW(wide_path, access, share_mode, sa, create_mode, attrs, nil)) if handle != INVALID_HANDLE { return handle, nil } @@ -862,4 +868,4 @@ pipe :: proc() -> (r, w: Handle, err: Error) { err = get_last_error() } return -} \ No newline at end of file +} From 872fe3ff73b4673ac3e393da6a69b98ae5c4dcf2 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:12:28 +0100 Subject: [PATCH 096/212] kqueue: fix bsds, add user filter, add struct tests --- core/sys/kqueue/kqueue.odin | 93 +++++++++++++++------- tests/core/normal.odin | 1 + tests/core/sys/kqueue/structs.odin | 56 +++++++++++++ tests/core/sys/kqueue/structs/structs.c | 63 +++++++++++++++ tests/core/sys/kqueue/structs/structs.odin | 58 ++++++++++++++ 5 files changed, 244 insertions(+), 27 deletions(-) create mode 100644 tests/core/sys/kqueue/structs.odin create mode 100644 tests/core/sys/kqueue/structs/structs.c create mode 100644 tests/core/sys/kqueue/structs/structs.odin diff --git a/core/sys/kqueue/kqueue.odin b/core/sys/kqueue/kqueue.odin index 25ee9bdce..b51f3426f 100644 --- a/core/sys/kqueue/kqueue.odin +++ b/core/sys/kqueue/kqueue.odin @@ -32,6 +32,7 @@ kevent :: proc(kq: KQ, change_list: []KEvent, event_list: []KEvent, timeout: ^po timeout, ) if n_events == -1 { + n_events = 0 err = posix.errno() } return @@ -60,6 +61,7 @@ Filter :: enum _Filter_Backing { Proc = _FILTER_PROC, // Check for changes to the subject process. Signal = _FILTER_SIGNAL, // Check for signals delivered to the process. Timer = _FILTER_TIMER, // Timers. + User = _FILTER_USER, // User events. } RW_Flag :: enum u32 { @@ -82,18 +84,30 @@ Proc_Flag :: enum u32 { Exit = log2(0x80000000), // Process exited. Fork = log2(0x40000000), // Process forked. Exec = log2(0x20000000), // Process exec'd. - Signal = log2(0x08000000), // Shared with `Filter.Signal`. } Proc_Flags :: bit_set[Proc_Flag; u32] Timer_Flag :: enum u32 { Seconds = log2(0x00000001), // Data is seconds. - USeconds = log2(0x00000002), // Data is microseconds. - NSeconds = log2(_NOTE_NSECONDS), // Data is nanoseconds. + USeconds = log2(_NOTE_USECONDS), // Data is microseconds. Absolute = log2(_NOTE_ABSOLUTE), // Absolute timeout. } Timer_Flags :: bit_set[Timer_Flag; u32] +User_Flag :: enum u32 { + Trigger = log2(0x01000000), + FFAnd = log2(0x40000000), + FFOr = log2(0x80000000), +} +User_Flags :: bit_set[User_Flag; u32] + +USER_FLAGS_COPY :: User_Flags{.FFOr, .FFAnd} +USER_FLAGS_CONTROL_MASK :: transmute(User_Flags)u32(0xc0000000) +USER_FLAGS_MASK :: transmute(User_Flags)u32(0x00FFFFFF) + +// Data is nanoseconds. +TIMER_FLAGS_NSECONDS :: _TIMER_FLAGS_NSECONDS + when ODIN_OS == .Darwin { _Filter_Backing :: distinct i16 @@ -106,10 +120,14 @@ when ODIN_OS == .Darwin { _FILTER_PROC :: -5 _FILTER_SIGNAL :: -6 _FILTER_TIMER :: -7 + _FILTER_USER :: -10 + _NOTE_USECONDS :: 0x00000002 _NOTE_NSECONDS :: 0x00000004 _NOTE_ABSOLUTE :: 0x00000008 + _TIMER_FLAGS_NSECONDS :: Timer_Flags{Timer_Flag(log2(_NOTE_NSECONDS))} + KEvent :: struct #align(4) { // Value used to identify this event. The exact interpretation is determined by the attached filter. ident: uintptr, @@ -119,11 +137,12 @@ when ODIN_OS == .Darwin { flags: Flags, // Filter specific flags. fflags: struct #raw_union { - rw: RW_Flags, - vnode: VNode_Flags, - fproc: Proc_Flags, + rw: RW_Flags `raw_union_tag:"filter=.Read, filter=.Write"`, + vnode: VNode_Flags `raw_union_tag:"filter=.VNode"`, + fproc: Proc_Flags `raw_union_tag:"filter=.Proc"`, // vm: VM_Flags, - timer: Timer_Flags, + timer: Timer_Flags `raw_union_tag:"filter=.Timer"`, + user: User_Flags `raw_union_tag:"filter=.User"`, }, // Filter specific data. data: c.long /* intptr_t */, @@ -143,9 +162,13 @@ when ODIN_OS == .Darwin { _FILTER_PROC :: -5 _FILTER_SIGNAL :: -6 _FILTER_TIMER :: -7 + _FILTER_USER :: -11 - _NOTE_NSECONDS :: 0x00000004 - _NOTE_ABSOLUTE :: 0x00000008 + _NOTE_USECONDS :: 0x00000004 + _NOTE_NSECONDS :: 0x00000008 + _NOTE_ABSOLUTE :: 0x00000010 + + _TIMER_FLAGS_NSECONDS :: Timer_Flags{Timer_Flag(log2(_NOTE_NSECONDS))} KEvent :: struct { // Value used to identify this event. The exact interpretation is determined by the attached filter. @@ -156,11 +179,12 @@ when ODIN_OS == .Darwin { flags: Flags, // Filter specific flags. fflags: struct #raw_union { - rw: RW_Flags, - vnode: VNode_Flags, - fproc: Proc_Flags, + rw: RW_Flags `raw_union_tag:"filter=.Read, filter=.Write"`, + vnode: VNode_Flags `raw_union_tag:"filter=.VNode"`, + fproc: Proc_Flags `raw_union_tag:"filter=.Proc"`, // vm: VM_Flags, - timer: Timer_Flags, + timer: Timer_Flags `raw_union_tag:"filter=.Timer"`, + user: User_Flags `raw_union_tag:"filter=.User"`, }, // Filter specific data. data: i64, @@ -181,11 +205,14 @@ when ODIN_OS == .Darwin { _FILTER_PROC :: 4 _FILTER_SIGNAL :: 5 _FILTER_TIMER :: 6 + _FILTER_USER :: 8 - _NOTE_NSECONDS :: 0x00000003 + _NOTE_USECONDS :: 0x00000002 _NOTE_ABSOLUTE :: 0x00000010 - KEvent :: struct #align(4) { + _TIMER_FLAGS_NSECONDS :: Timer_Flags{.Seconds, .USeconds} + + KEvent :: struct { // Value used to identify this event. The exact interpretation is determined by the attached filter. ident: uintptr, // Filter for event. @@ -194,18 +221,17 @@ when ODIN_OS == .Darwin { flags: Flags, // Filter specific flags. fflags: struct #raw_union { - rw: RW_Flags, - vnode: VNode_Flags, - fproc: Proc_Flags, + rw: RW_Flags `raw_union_tag:"filter=.Read, filter=.Write"`, + vnode: VNode_Flags `raw_union_tag:"filter=.VNode"`, + fproc: Proc_Flags `raw_union_tag:"filter=.Proc"`, // vm: VM_Flags, - timer: Timer_Flags, + timer: Timer_Flags `raw_union_tag:"filter=.Timer"`, + user: User_Flags `raw_union_tag:"filter=.User"`, }, // Filter specific data. data: i64, // Opaque user data passed through the kernel unchanged. udata: rawptr, - // Extensions. - ext: [4]u64, } } else when ODIN_OS == .OpenBSD { @@ -219,10 +245,14 @@ when ODIN_OS == .Darwin { _FILTER_PROC :: -5 _FILTER_SIGNAL :: -6 _FILTER_TIMER :: -7 + _FILTER_USER :: -10 - _NOTE_NSECONDS :: 0x00000003 + _NOTE_USECONDS :: 0x00000002 + _NOTE_NSECONDS :: 0x00000004 _NOTE_ABSOLUTE :: 0x00000010 + _TIMER_FLAGS_NSECONDS :: Timer_Flags{Timer_Flag(log2(_NOTE_NSECONDS))} + KEvent :: struct #align(4) { // Value used to identify this event. The exact interpretation is determined by the attached filter. ident: uintptr, @@ -232,11 +262,12 @@ when ODIN_OS == .Darwin { flags: Flags, // Filter specific flags. fflags: struct #raw_union { - rw: RW_Flags, - vnode: VNode_Flags, - fproc: Proc_Flags, + rw: RW_Flags `raw_union_tag:"filter=.Read, filter=.Write"`, + vnode: VNode_Flags `raw_union_tag:"filter=.VNode"`, + fproc: Proc_Flags `raw_union_tag:"filter=.Proc"`, // vm: VM_Flags, - timer: Timer_Flags, + timer: Timer_Flags `raw_union_tag:"filter=.Timer"`, + user: User_Flags `raw_union_tag:"filter=.User"`, }, // Filter specific data. data: i64, @@ -245,12 +276,20 @@ when ODIN_OS == .Darwin { } } +when ODIN_OS == .NetBSD { + @(private) + LKEVENT :: "__kevent50" +} else { + @(private) + LKEVENT :: "kevent" +} + @(private) log2 :: intrinsics.constant_log2 foreign lib { @(link_name="kqueue") _kqueue :: proc() -> KQ --- - @(link_name="kevent") + @(link_name=LKEVENT) _kevent :: proc(kq: KQ, change_list: [^]KEvent, n_changes: c.int, event_list: [^]KEvent, n_events: c.int, timeout: ^posix.timespec) -> c.int --- } diff --git a/tests/core/normal.odin b/tests/core/normal.odin index e8b61fee8..42da389d2 100644 --- a/tests/core/normal.odin +++ b/tests/core/normal.odin @@ -45,6 +45,7 @@ download_assets :: proc "contextless" () { @(require) import "sync" @(require) import "sync/chan" @(require) import "sys/posix" +@(require) import "sys/kqueue" @(require) import "sys/windows" @(require) import "text/i18n" @(require) import "text/match" diff --git a/tests/core/sys/kqueue/structs.odin b/tests/core/sys/kqueue/structs.odin new file mode 100644 index 000000000..edf1fdd1e --- /dev/null +++ b/tests/core/sys/kqueue/structs.odin @@ -0,0 +1,56 @@ +#+build darwin, freebsd, openbsd, netbsd +package tests_core_sys_kqueue + +import "core:strings" +import "core:testing" +import os "core:os/os2" + +@(test) +structs :: proc(t: ^testing.T) { + { + c_compiler := os.get_env("CC", context.temp_allocator) + if c_compiler == "" { + c_compiler = "clang" + } + + c_compilation, c_start_err := os.process_start({ + command = {c_compiler, #directory + "/structs/structs.c", "-o", #directory + "/structs/c_structs"}, + stdout = os.stdout, + stderr = os.stderr, + }) + testing.expect_value(t, c_start_err, nil) + + o_compilation, o_start_err := os.process_start({ + command = {ODIN_ROOT + "/odin", "build", #directory + "/structs", "-out:" + #directory + "/structs/odin_structs"}, + stdout = os.stdout, + stderr = os.stderr, + }) + testing.expect_value(t, o_start_err, nil) + + c_status, c_err := os.process_wait(c_compilation) + testing.expect_value(t, c_err, nil) + testing.expect_value(t, c_status.exit_code, 0) + + o_status, o_err := os.process_wait(o_compilation) + testing.expect_value(t, o_err, nil) + testing.expect_value(t, o_status.exit_code, 0) + } + + c_status, c_stdout, c_stderr, c_err := os.process_exec({command={#directory + "/structs/c_structs"}}, context.temp_allocator) + testing.expect_value(t, c_err, nil) + testing.expect_value(t, c_status.exit_code, 0) + testing.expect_value(t, string(c_stderr), "") + + o_status, o_stdout, o_stderr, o_err := os.process_exec({command={#directory + "/structs/odin_structs"}}, context.temp_allocator) + testing.expect_value(t, o_err, nil) + testing.expect_value(t, o_status.exit_code, 0) + testing.expect_value(t, string(o_stderr), "") + + testing.expect(t, strings.trim_space(string(c_stdout)) != "") + + testing.expect_value( + t, + strings.trim_space(string(o_stdout)), + strings.trim_space(string(c_stdout)), + ) +} diff --git a/tests/core/sys/kqueue/structs/structs.c b/tests/core/sys/kqueue/structs/structs.c new file mode 100644 index 000000000..e7620c994 --- /dev/null +++ b/tests/core/sys/kqueue/structs/structs.c @@ -0,0 +1,63 @@ +#include +#include +#include + +int main(int argc, char *argv[]) +{ + printf("kevent %zu %zu\n", sizeof(struct kevent), _Alignof(struct kevent)); + printf("kevent.ident %zu\n", offsetof(struct kevent, ident)); + printf("kevent.filter %zu\n", offsetof(struct kevent, filter)); + printf("kevent.flags %zu\n", offsetof(struct kevent, flags)); + printf("kevent.fflags %zu\n", offsetof(struct kevent, fflags)); + printf("kevent.data %zu\n", offsetof(struct kevent, data)); + printf("kevent.udata %zu\n", offsetof(struct kevent, udata)); + + printf("EV_ADD %d\n", EV_ADD); + printf("EV_DELETE %d\n", EV_DELETE); + printf("EV_ENABLE %d\n", EV_ENABLE); + printf("EV_DISABLE %d\n", EV_DISABLE); + printf("EV_ONESHOT %d\n", EV_ONESHOT); + printf("EV_CLEAR %d\n", EV_CLEAR); + printf("EV_RECEIPT %d\n", EV_RECEIPT); + printf("EV_DISPATCH %d\n", EV_DISPATCH); + printf("EV_ERROR %d\n", EV_ERROR); + printf("EV_EOF %d\n", EV_EOF); + + printf("EVFILT_READ %d\n", EVFILT_READ); + printf("EVFILT_WRITE %d\n", EVFILT_WRITE); + printf("EVFILT_AIO %d\n", EVFILT_AIO); + printf("EVFILT_VNODE %d\n", EVFILT_VNODE); + printf("EVFILT_PROC %d\n", EVFILT_PROC); + printf("EVFILT_SIGNAL %d\n", EVFILT_SIGNAL); + printf("EVFILT_TIMER %d\n", EVFILT_TIMER); + printf("EVFILT_USER %d\n", EVFILT_USER); + + printf("NOTE_SECONDS %u\n", NOTE_SECONDS); + printf("NOTE_USECONDS %u\n", NOTE_USECONDS); + printf("NOTE_NSECONDS %u\n", NOTE_NSECONDS); +#if defined(NOTE_ABSOLUTE) + printf("NOTE_ABSOLUTE %u\n", NOTE_ABSOLUTE); +#else + printf("NOTE_ABSOLUTE %u\n", NOTE_ABSTIME); +#endif + + printf("NOTE_LOWAT %u\n", NOTE_LOWAT); + + printf("NOTE_DELETE %u\n", NOTE_DELETE); + printf("NOTE_WRITE %u\n", NOTE_WRITE); + printf("NOTE_EXTEND %u\n", NOTE_EXTEND); + printf("NOTE_ATTRIB %u\n", NOTE_ATTRIB); + printf("NOTE_LINK %u\n", NOTE_LINK); + printf("NOTE_RENAME %u\n", NOTE_RENAME); + printf("NOTE_REVOKE %u\n", NOTE_REVOKE); + + printf("NOTE_EXIT %u\n", NOTE_EXIT); + printf("NOTE_FORK %u\n", NOTE_FORK); + printf("NOTE_EXEC %u\n", NOTE_EXEC); + + printf("NOTE_TRIGGER %u\n", NOTE_TRIGGER); + printf("NOTE_FFAND %u\n", NOTE_FFAND); + printf("NOTE_FFOR %u\n", NOTE_FFOR); + printf("NOTE_FFCOPY %u\n", NOTE_FFCOPY); + return 0; +} diff --git a/tests/core/sys/kqueue/structs/structs.odin b/tests/core/sys/kqueue/structs/structs.odin new file mode 100644 index 000000000..4886f63e4 --- /dev/null +++ b/tests/core/sys/kqueue/structs/structs.odin @@ -0,0 +1,58 @@ +package main + +import "core:fmt" +import "core:sys/kqueue" + +main :: proc() { + fmt.println("kevent", size_of(kqueue.KEvent), align_of(kqueue.KEvent)) + fmt.println("kevent.ident", offset_of(kqueue.KEvent, ident)) + fmt.println("kevent.filter", offset_of(kqueue.KEvent, filter)) + fmt.println("kevent.flags", offset_of(kqueue.KEvent, flags)) + fmt.println("kevent.fflags", offset_of(kqueue.KEvent, fflags)) + fmt.println("kevent.data", offset_of(kqueue.KEvent, data)) + fmt.println("kevent.udata", offset_of(kqueue.KEvent, udata)) + + fmt.println("EV_ADD", transmute(kqueue._Flags_Backing)kqueue.Flags{.Add}) + fmt.println("EV_DELETE", transmute(kqueue._Flags_Backing)kqueue.Flags{.Delete}) + fmt.println("EV_ENABLE", transmute(kqueue._Flags_Backing)kqueue.Flags{.Enable}) + fmt.println("EV_DISABLE", transmute(kqueue._Flags_Backing)kqueue.Flags{.Disable}) + fmt.println("EV_ONESHOT", transmute(kqueue._Flags_Backing)kqueue.Flags{.One_Shot}) + fmt.println("EV_CLEAR", transmute(kqueue._Flags_Backing)kqueue.Flags{.Clear}) + fmt.println("EV_RECEIPT", transmute(kqueue._Flags_Backing)kqueue.Flags{.Receipt}) + fmt.println("EV_DISPATCH", transmute(kqueue._Flags_Backing)kqueue.Flags{.Dispatch}) + fmt.println("EV_ERROR", transmute(kqueue._Flags_Backing)kqueue.Flags{.Error}) + fmt.println("EV_EOF", transmute(kqueue._Flags_Backing)kqueue.Flags{.EOF}) + + fmt.println("EVFILT_READ", int(kqueue.Filter.Read)) + fmt.println("EVFILT_WRITE", int(kqueue.Filter.Write)) + fmt.println("EVFILT_AIO", int(kqueue.Filter.AIO)) + fmt.println("EVFILT_VNODE", int(kqueue.Filter.VNode)) + fmt.println("EVFILT_PROC", int(kqueue.Filter.Proc)) + fmt.println("EVFILT_SIGNAL", int(kqueue.Filter.Signal)) + fmt.println("EVFILT_TIMER", int(kqueue.Filter.Timer)) + fmt.println("EVFILT_USER", int(kqueue.Filter.User)) + + fmt.println("NOTE_SECONDS", transmute(u32)kqueue.Timer_Flags{.Seconds}) + fmt.println("NOTE_USECONDS", transmute(u32)kqueue.Timer_Flags{.USeconds}) + fmt.println("NOTE_NSECONDS", transmute(u32)kqueue.TIMER_FLAGS_NSECONDS) + fmt.println("NOTE_ABSOLUTE", transmute(u32)kqueue.Timer_Flags{.Absolute}) + + fmt.println("NOTE_LOWAT", transmute(u32)kqueue.RW_Flags{.Low_Water_Mark}) + + fmt.println("NOTE_DELETE", transmute(u32)kqueue.VNode_Flags{.Delete}) + fmt.println("NOTE_WRITE", transmute(u32)kqueue.VNode_Flags{.Write}) + fmt.println("NOTE_EXTEND", transmute(u32)kqueue.VNode_Flags{.Extend}) + fmt.println("NOTE_ATTRIB", transmute(u32)kqueue.VNode_Flags{.Attrib}) + fmt.println("NOTE_LINK", transmute(u32)kqueue.VNode_Flags{.Link}) + fmt.println("NOTE_RENAME", transmute(u32)kqueue.VNode_Flags{.Rename}) + fmt.println("NOTE_REVOKE", transmute(u32)kqueue.VNode_Flags{.Revoke}) + + fmt.println("NOTE_EXIT", transmute(u32)kqueue.Proc_Flags{.Exit}) + fmt.println("NOTE_FORK", transmute(u32)kqueue.Proc_Flags{.Fork}) + fmt.println("NOTE_EXEC", transmute(u32)kqueue.Proc_Flags{.Exec}) + + fmt.println("NOTE_TRIGGER", transmute(u32)kqueue.User_Flags{.Trigger}) + fmt.println("NOTE_FFAND", transmute(u32)kqueue.User_Flags{.FFAnd}) + fmt.println("NOTE_FFOR", transmute(u32)kqueue.User_Flags{.FFOr}) + fmt.println("NOTE_FFCOPY", transmute(u32)kqueue.USER_FLAGS_COPY) +} From 26d47f23f71dbeec3c10c3e4c7ed6b5e0f462b5e Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:13:43 +0100 Subject: [PATCH 097/212] linux: implement eventfd syscall --- core/sys/linux/bits.odin | 6 ++++++ core/sys/linux/sys.odin | 5 ++++- core/sys/linux/types.odin | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/core/sys/linux/bits.odin b/core/sys/linux/bits.odin index 213d6c26f..59383638d 100644 --- a/core/sys/linux/bits.odin +++ b/core/sys/linux/bits.odin @@ -2269,3 +2269,9 @@ Swap_Flags_Bits :: enum { PREFER = log2(0x8000), DISCARD = log2(0x10000), } + +Eventfd_Flags_Bits :: enum { + SEMAPHORE, + CLOEXEC = auto_cast Open_Flags_Bits.CLOEXEC, + NONBLOCK = auto_cast Open_Flags_Bits.NONBLOCK, +} diff --git a/core/sys/linux/sys.odin b/core/sys/linux/sys.odin index faeda6f43..b10759595 100644 --- a/core/sys/linux/sys.odin +++ b/core/sys/linux/sys.odin @@ -3001,7 +3001,10 @@ timerfd_create :: proc "contextless" (clock_id: Clock_Id, flags: Open_Flags) -> return errno_unwrap2(ret, Fd) } -// TODO(flysand): eventfd +eventfd :: proc "contextless" (initval: u32, flags: Eventfd_Flags) -> (Fd, Errno) { + ret := syscall(SYS_eventfd2, initval, transmute(i32)flags) + return errno_unwrap2(ret, Fd) +} // TODO(flysand): fallocate diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index 0910f11ec..de4417beb 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -1748,3 +1748,5 @@ Mount_Flags :: bit_set[Mount_Flags_Bits; uint] Umount2_Flags :: bit_set[Umount2_Flags_Bits; u32] Swap_Flags :: bit_set[Swap_Flags_Bits; u32] + +Eventfd_Flags :: bit_set[Eventfd_Flags_Bits; i32] From b2af4f335d47a9e4424bd5393381a4b226afe998 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:14:17 +0100 Subject: [PATCH 098/212] posix: fix openat mode not being c_vararg --- core/sys/posix/fcntl.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/sys/posix/fcntl.odin b/core/sys/posix/fcntl.odin index db095c418..52d97f528 100644 --- a/core/sys/posix/fcntl.odin +++ b/core/sys/posix/fcntl.odin @@ -70,7 +70,7 @@ foreign lib { [[ More; https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html ]] */ - openat :: proc(fd: FD, path: cstring, flags: O_Flags, mode: mode_t = {}) -> FD --- + openat :: proc(fd: FD, path: cstring, flags: O_Flags, #c_vararg mode: ..mode_t) -> FD --- } FCNTL_Cmd :: enum c.int { From 24ee35af28a49a110861b49c8aa3a0c7b7c9d5d5 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sun, 11 Jan 2026 20:15:55 +0100 Subject: [PATCH 099/212] nbio: add package --- core/container/pool/pool.odin | 132 + core/container/pool/pool_arena_others.odin | 29 + core/container/pool/pool_arena_virtual.odin | 24 + core/nbio/doc.odin | 195 ++ core/nbio/errors.odin | 84 + core/nbio/errors_linux.odin | 16 + core/nbio/errors_others.odin | 20 + core/nbio/errors_posix.odin | 17 + core/nbio/errors_windows.odin | 17 + core/nbio/impl.odin | 256 ++ core/nbio/impl_linux.odin | 1421 +++++++++++ core/nbio/impl_others.odin | 217 ++ core/nbio/impl_posix.odin | 1403 +++++++++++ core/nbio/impl_posix_darwin.odin | 29 + core/nbio/impl_posix_freebsd.odin | 52 + core/nbio/impl_posix_netbsd.odin | 12 + core/nbio/impl_posix_openbsd.odin | 12 + core/nbio/impl_windows.odin | 1738 +++++++++++++ core/nbio/nbio.odin | 435 ++++ core/nbio/net.odin | 39 + core/nbio/ops.odin | 2473 +++++++++++++++++++ core/nbio/uring/doc.odin | 88 + core/nbio/uring/ops.odin | 847 +++++++ core/nbio/uring/uring.odin | 294 +++ core/slice/slice.odin | 36 + core/sys/linux/types.odin | 48 +- core/sys/windows/kernel32.odin | 23 +- core/sys/windows/mswsock.odin | 40 + core/sys/windows/ntdll.odin | 25 +- core/sys/windows/types.odin | 12 +- core/sys/windows/winerror.odin | 7 + core/sys/windows/ws2_32.odin | 8 +- examples/all/all_main.odin | 5 +- tests/core/nbio/fs.odin | 100 + tests/core/nbio/nbio.odin | 258 ++ tests/core/nbio/net.odin | 400 +++ tests/core/nbio/remove.odin | 247 ++ tests/core/normal.odin | 1 + 38 files changed, 11026 insertions(+), 34 deletions(-) create mode 100644 core/container/pool/pool.odin create mode 100644 core/container/pool/pool_arena_others.odin create mode 100644 core/container/pool/pool_arena_virtual.odin create mode 100644 core/nbio/doc.odin create mode 100644 core/nbio/errors.odin create mode 100644 core/nbio/errors_linux.odin create mode 100644 core/nbio/errors_others.odin create mode 100644 core/nbio/errors_posix.odin create mode 100644 core/nbio/errors_windows.odin create mode 100644 core/nbio/impl.odin create mode 100644 core/nbio/impl_linux.odin create mode 100644 core/nbio/impl_others.odin create mode 100644 core/nbio/impl_posix.odin create mode 100644 core/nbio/impl_posix_darwin.odin create mode 100644 core/nbio/impl_posix_freebsd.odin create mode 100644 core/nbio/impl_posix_netbsd.odin create mode 100644 core/nbio/impl_posix_openbsd.odin create mode 100644 core/nbio/impl_windows.odin create mode 100644 core/nbio/nbio.odin create mode 100644 core/nbio/net.odin create mode 100644 core/nbio/ops.odin create mode 100644 core/nbio/uring/doc.odin create mode 100644 core/nbio/uring/ops.odin create mode 100644 core/nbio/uring/uring.odin create mode 100644 core/sys/windows/mswsock.odin create mode 100644 tests/core/nbio/fs.odin create mode 100644 tests/core/nbio/nbio.odin create mode 100644 tests/core/nbio/net.odin create mode 100644 tests/core/nbio/remove.odin diff --git a/core/container/pool/pool.odin b/core/container/pool/pool.odin new file mode 100644 index 000000000..93eddb514 --- /dev/null +++ b/core/container/pool/pool.odin @@ -0,0 +1,132 @@ +package container_pool + +import "base:intrinsics" +import "base:sanitizer" + +import "core:mem" +import "core:sync" + +_ :: sanitizer + +DEFAULT_BLOCK_SIZE :: _DEFAULT_BLOCK_SIZE + +Pool_Arena :: _Pool_Arena + +/* +A thread-safe (between init and destroy) object pool backed by virtual growing arena returning stable pointers. +The element type requires an intrusive link node. + +Example: + Elem :: struct { + link: ^Elem, + } + + p: pool.Pool(Elem) + pool.init(&p, "link") +*/ +Pool :: struct($T: typeid) { + arena: Pool_Arena, + num_outstanding: int, + num_ready: int, + link_off: uintptr, + free_list: ^T, +} + +@(require_results) +init :: proc(p: ^Pool($T), $link_field: string, block_size: uint = DEFAULT_BLOCK_SIZE) -> (err: mem.Allocator_Error) + where intrinsics.type_has_field(T, link_field), + intrinsics.type_field_type(T, link_field) == ^T { + p.link_off = offset_of_by_string(T, link_field) + return _pool_arena_init(&p.arena, block_size) +} + +destroy :: proc(p: ^Pool($T)) { + for elem := p.free_list; elem != nil; elem = _get_next(p, elem) { + _unpoison_elem(p, elem) + free(elem, _pool_arena_allocator(&p.arena)) + } + + _pool_arena_destroy(&p.arena) +} + +@(require_results) +get :: proc(p: ^Pool($T)) -> (elem: ^T, err: mem.Allocator_Error) #optional_allocator_error { + sync.atomic_add_explicit(&p.num_outstanding, 1, .Relaxed) + + for { + elem = sync.atomic_load(&p.free_list) + if elem == nil { + // NOTE: pool arena has an internal lock. + return new(T, _pool_arena_allocator(&p.arena)) + } + + if _, ok := sync.atomic_compare_exchange_weak(&p.free_list, elem, _get_next(p, elem)); ok { + _set_next(p, elem, nil) + _unpoison_elem(p, elem) + sync.atomic_sub_explicit(&p.num_ready, 1, .Relaxed) + return + } + } +} + +put :: proc(p: ^Pool($T), elem: ^T) { + mem.zero_item(elem) + _poison_elem(p, elem) + + defer sync.atomic_sub_explicit(&p.num_outstanding, 1, .Relaxed) + defer sync.atomic_add_explicit(&p.num_ready, 1, .Relaxed) + + for { + head := sync.atomic_load(&p.free_list) + _set_next(p, elem, head) + if _, ok := sync.atomic_compare_exchange_weak(&p.free_list, head, elem); ok { + return + } + } +} + +num_outstanding :: proc(p: ^Pool($T)) -> int { + return sync.atomic_load(&p.num_outstanding) +} + +num_ready :: proc(p: ^Pool($T)) -> int { + return sync.atomic_load(&p.num_ready) +} + +cap :: proc(p: ^Pool($T)) -> int { + return sync.atomic_load(&p.num_ready) + sync.atomic_load(&p.num_outstanding) +} + +_get_next :: proc(p: ^Pool($T), elem: ^T) -> ^T { + return (^^T)(uintptr(elem) + p.link_off)^ +} + +_set_next :: proc(p: ^Pool($T), elem: ^T, next: ^T) { + (^^T)(uintptr(elem) + p.link_off)^ = next +} + +@(disabled=.Address not_in ODIN_SANITIZER_FLAGS) +_poison_elem :: proc(p: ^Pool($T), elem: ^T) { + if p.link_off > 0 { + sanitizer.address_poison_rawptr(elem, int(p.link_off)) + } + + len := size_of(T) - p.link_off - size_of(rawptr) + if len > 0 { + ptr := rawptr(uintptr(elem) + p.link_off + size_of(rawptr)) + sanitizer.address_poison_rawptr(ptr, int(len)) + } +} + +@(disabled=.Address not_in ODIN_SANITIZER_FLAGS) +_unpoison_elem :: proc(p: ^Pool($T), elem: ^T) { + if p.link_off > 0 { + sanitizer.address_unpoison_rawptr(elem, int(p.link_off)) + } + + len := size_of(T) - p.link_off - size_of(rawptr) + if len > 0 { + ptr := rawptr(uintptr(elem) + p.link_off + size_of(rawptr)) + sanitizer.address_unpoison_rawptr(ptr, int(len)) + } +} diff --git a/core/container/pool/pool_arena_others.odin b/core/container/pool/pool_arena_others.odin new file mode 100644 index 000000000..3069076f7 --- /dev/null +++ b/core/container/pool/pool_arena_others.odin @@ -0,0 +1,29 @@ +#+build !darwin +#+build !freebsd +#+build !openbsd +#+build !netbsd +#+build !linux +#+build !windows +#+private +package container_pool + +import "base:runtime" + +import "core:mem" + +_Pool_Arena :: runtime.Arena + +_DEFAULT_BLOCK_SIZE :: mem.Megabyte + +_pool_arena_init :: proc(arena: ^Pool_Arena, block_size: uint = DEFAULT_BLOCK_SIZE) -> (err: runtime.Allocator_Error) { + runtime.arena_init(arena, block_size, runtime.default_allocator()) or_return + return +} + +_pool_arena_allocator :: proc(arena: ^Pool_Arena) -> runtime.Allocator { + return runtime.arena_allocator(arena) +} + +_pool_arena_destroy :: proc(arena: ^Pool_Arena) { + runtime.arena_destroy(arena) +} diff --git a/core/container/pool/pool_arena_virtual.odin b/core/container/pool/pool_arena_virtual.odin new file mode 100644 index 000000000..192e60260 --- /dev/null +++ b/core/container/pool/pool_arena_virtual.odin @@ -0,0 +1,24 @@ +#+build darwin, freebsd, openbsd, netbsd, linux, windows +package container_pool + +import "base:runtime" + +import "core:mem" +import "core:mem/virtual" + +_Pool_Arena :: virtual.Arena + +_DEFAULT_BLOCK_SIZE :: mem.Gigabyte + +_pool_arena_init :: proc(arena: ^Pool_Arena, block_size: uint = DEFAULT_BLOCK_SIZE) -> (err: runtime.Allocator_Error) { + virtual.arena_init_growing(arena, block_size) or_return + return +} + +_pool_arena_allocator :: proc(arena: ^Pool_Arena) -> runtime.Allocator { + return virtual.arena_allocator(arena) +} + +_pool_arena_destroy :: proc(arena: ^Pool_Arena) { + virtual.arena_destroy(arena) +} diff --git a/core/nbio/doc.odin b/core/nbio/doc.odin new file mode 100644 index 000000000..c43196923 --- /dev/null +++ b/core/nbio/doc.odin @@ -0,0 +1,195 @@ +/* +package nbio implements a non-blocking I/O and event loop abstraction layer +over several platform-specific asynchronous I/O APIs. + +More examples can be found in Odin's examples repository +at [[ examples/nbio ; https://github.com/odin-lang/examples/nbio ]]. + +**Event Loop**: + +Each thread may have at most one event loop associated with it. +This is enforced by the package, as running multiple event loops on a single +thread does not make sense. + +Event loops are reference counted and managed by the package. + +`acquire_thread_event_loop` and `release_thread_event_loop` can be used +to acquire and release a reference. Acquiring must be done before any operation +is done. + +The event loop progresses in ticks. A tick checks if any work is to be done, +and based on the given timeout may block waiting for work. + +Ticks are typically done using the `tick`, `run`, and `run_until` procedures. + +Example: + package main + + import "core:nbio" + import "core:time" + import "core:fmt" + + main :: proc() { + err := nbio.acquire_thread_event_loop() + assert(err == nil) + defer nbio.release_thread_event_loop() + + nbio.timeout(time.Second, proc(_: ^nbio.Operation) { + fmt.println("Hellope after 1 second!") + }) + + err = nbio.run() + assert(err == nil) + } + + +**Time and timeouts**: + +Timeouts are intentionally *slightly inaccurate* by design. + +A timeout is not checked continuously, instead, it is evaluated only when +a tick occurs. This means if a tick took a long time, your timeout may be ready +for a bit of time already before the callback is called. + +The function `now` returns the current time as perceived by the event +loop. This value is cached at least once per tick so it is fast to retrieve. + +Most operations also take an optional timeout when executed. +If the timeout completes before the operation, the operation is cancelled and +called back with a `.Timeout` error. + + +**Threading**: + +The package has a concept of I/O threads (threads that are ticking) and worker +threads (any other thread). + +An I/O thread is mostly self contained, operations are executed on it, and +callbacks run on it. + +If you try to execute an operation on a thread that has no running event loop +a panic will be executed. Instead a worker thread can execute operations onto +a running event loop by taking it's reference and executing operations with +that reference. + +In this case: +- The operation is enqueued from the worker thread +- The I/O thread is optionally woken up from blocking for work with `wake_up` +- The next tick, the operation is executed by the I/O thread +- The callback is invoked on the I/O thread + +Example: + package main + + import "core:nbio" + import "core:net" + import "core:thread" + import "core:time" + + Connection :: struct { + loop: ^nbio.Event_Loop, + socket: net.TCP_Socket, + } + + main :: proc() { + workers: thread.Pool + thread.pool_init(&workers, context.allocator, 2) + thread.pool_start(&workers) + + err := nbio.acquire_thread_event_loop() + defer nbio.release_thread_event_loop() + assert(err == nil) + + server, listen_err := nbio.listen_tcp({nbio.IP4_Any, 1234}) + assert(listen_err == nil) + nbio.accept_poly(server, &workers, on_accept) + + err = nbio.run() + assert(err == nil) + + on_accept :: proc(op: ^nbio.Operation, workers: ^thread.Pool) { + assert(op.accept.err == nil) + + nbio.accept_poly(op.accept.socket, workers, on_accept) + + thread.pool_add_task(workers, context.allocator, do_work, new_clone(Connection{ + loop = op.l, + socket = op.accept.client, + })) + } + + do_work :: proc(t: thread.Task) { + connection := (^Connection)(t.data) + + // Imagine CPU intensive work that's been ofloaded to a worker thread. + time.sleep(time.Second * 1) + + nbio.send_poly(connection.socket, {transmute([]byte)string("Hellope!\n")}, connection, on_sent, l=connection.loop) + } + + on_sent :: proc(op: ^nbio.Operation, connection: ^Connection) { + assert(op.send.err == nil) + // Client got our message, clean up. + nbio.close(connection.socket) + free(connection) + } + } + + +**Handle and socket association**: + +Most platforms require handles (files, sockets, etc.) to be explicitly +associated with an event loop or configured for non-blocking/asynchronous +operation. + +On some platforms (notably Windows), this requires a specific flag at open +time (`.Non_Blocking` for `core:os`) and association may fail if the handle was not created +correctly. + +For this reason, prefer `open` and `create_socket` from this package instead. + +`associate_handle`, `associate_file`, and `associate_socket` can be used for externally opened +files/sockets. + + +**Offsets and positional I/O**: + +Operations do not implicitly use or modify a handle’s internal file +offset. + +Instead, operations such as `read` and `write` are *positional* and require +an explicit offset. + +This avoids ambiguity and subtle bugs when multiple asynchronous operations +are issued concurrently against the same handle. + + +**Contexts and callbacks**: + +The `context` inside a callback is *not* the context that submitted the +operation. + +Instead, the callback receives the context that was active when the event +loop function (`tick`, `run`, etc.) was called. + +This is because otherwise the context would have to be copied and held onto for each operation. + +If the submitting context is required inside the callback, it must be copied +into the operation’s user data explicitly. + +Example: + nbio.timeout_poly(time.Second, new_clone(context), proc(_: ^Operation, ctx: ^runtime.Context) { + context = ctx^ + free(ctx) + }) + + +**Callback scheduling guarantees**: + +Callbacks are guaranteed to be invoked in a later tick, never synchronously. +This means that the operation returned from a procedure is at least valid till the end of the +current tick, because an operation is freed after it's callback is called. +Thus you can set user data after an execution is queued, or call `remove`, removing subtle "race" +conditions and simplifying control flow. +*/ +package nbio diff --git a/core/nbio/errors.odin b/core/nbio/errors.odin new file mode 100644 index 000000000..f3bd381d5 --- /dev/null +++ b/core/nbio/errors.odin @@ -0,0 +1,84 @@ +package nbio + +import "base:intrinsics" + +import "core:reflect" + +Error :: intrinsics.type_merge( + Network_Error, + union #shared_nil { + General_Error, + FS_Error, + }, +) +#assert(size_of(Error) == 8) + +// Errors regarding general usage of the event loop. +General_Error :: enum i32 { + None, + + Allocation_Failed = i32(PLATFORM_ERR_ALLOCATION_FAILED), + Unsupported = i32(PLATFORM_ERR_UNSUPPORTED), +} + +// Errors gotten from file system operations. +FS_Error :: enum i32 { + None, + Unsupported = i32(PLATFORM_ERR_UNSUPPORTED), + Allocation_Failed = i32(PLATFORM_ERR_ALLOCATION_FAILED), + Timeout = i32(PLATFORM_ERR_TIMEOUT), + Invalid_Argument = i32(PLATFORM_ERR_INVALID_ARGUMENT), + Permission_Denied = i32(PLATFORM_ERR_PERMISSION_DENIED), + EOF = i32(PLATFORM_ERR_EOF), + Exists = i32(PLATFORM_ERR_EXISTS), + Not_Found = i32(PLATFORM_ERR_NOT_FOUND), +} + +Platform_Error :: _Platform_Error + +error_string :: proc(err: Error) -> string { + err := err + variant := any{ + id = reflect.union_variant_typeid(err), + data = &err, + } + str := reflect.enum_string(variant) + + if str == "" { + #partial switch uerr in err { + case FS_Error: + str, _ = reflect.enum_name_from_value(Platform_Error(uerr)) + case General_Error: + str, _ = reflect.enum_name_from_value(Platform_Error(uerr)) + } + } + if str == "" { + str = "Unknown" + } + + return str +} + +error_string_recv :: proc(recv_err: Recv_Error) -> string { + switch err in recv_err { + case TCP_Recv_Error: return error_string(err) + case UDP_Recv_Error: return error_string(err) + case: return "Unknown" + } +} + +error_string_send :: proc(send_err: Send_Error) -> string { + switch err in send_err { + case TCP_Send_Error: return error_string(err) + case UDP_Send_Error: return error_string(err) + case: return "Unknown" + } +} + +error_string_sendfile :: proc(send_err: Send_File_Error) -> string { + switch err in send_err { + case TCP_Send_Error: return error_string(err) + case FS_Error: return error_string(err) + case: return "Unknown" + } +} diff --git a/core/nbio/errors_linux.odin b/core/nbio/errors_linux.odin new file mode 100644 index 000000000..5c3472500 --- /dev/null +++ b/core/nbio/errors_linux.odin @@ -0,0 +1,16 @@ +#+private +package nbio + +import "core:sys/linux" + +PLATFORM_ERR_UNSUPPORTED :: linux.Errno.ENOSYS +PLATFORM_ERR_ALLOCATION_FAILED :: linux.Errno.ENOMEM +PLATFORM_ERR_TIMEOUT :: linux.Errno.ECANCELED +PLATFORM_ERR_INVALID_ARGUMENT :: linux.Errno.EINVAL +PLATFORM_ERR_OVERFLOW :: linux.Errno.E2BIG +PLATFORM_ERR_NOT_FOUND :: linux.Errno.ENOENT +PLATFORM_ERR_EXISTS :: linux.Errno.EEXIST +PLATFORM_ERR_PERMISSION_DENIED :: linux.Errno.EPERM +PLATFORM_ERR_EOF :: -100 // There is no EOF errno, we use negative for our own error codes. + +_Platform_Error :: linux.Errno diff --git a/core/nbio/errors_others.odin b/core/nbio/errors_others.odin new file mode 100644 index 000000000..f27c91178 --- /dev/null +++ b/core/nbio/errors_others.odin @@ -0,0 +1,20 @@ +#+build !darwin +#+build !freebsd +#+build !openbsd +#+build !netbsd +#+build !linux +#+build !windows +#+private +package nbio + +PLATFORM_ERR_UNSUPPORTED :: 1 +PLATFORM_ERR_ALLOCATION_FAILED :: 2 +PLATFORM_ERR_TIMEOUT :: 3 +PLATFORM_ERR_INVALID_ARGUMENT :: 4 +PLATFORM_ERR_OVERFLOW :: 5 +PLATFORM_ERR_NOT_FOUND :: 6 +PLATFORM_ERR_EXISTS :: 7 +PLATFORM_ERR_PERMISSION_DENIED :: 8 +PLATFORM_ERR_EOF :: 9 + +_Platform_Error :: enum i32 {} diff --git a/core/nbio/errors_posix.odin b/core/nbio/errors_posix.odin new file mode 100644 index 000000000..3dd8f781d --- /dev/null +++ b/core/nbio/errors_posix.odin @@ -0,0 +1,17 @@ +#+build darwin, freebsd, netbsd, openbsd +#+private +package nbio + +import "core:sys/posix" + +PLATFORM_ERR_UNSUPPORTED :: posix.Errno.ENOSYS +PLATFORM_ERR_ALLOCATION_FAILED :: posix.Errno.ENOMEM +PLATFORM_ERR_TIMEOUT :: posix.Errno.ECANCELED +PLATFORM_ERR_INVALID_ARGUMENT :: posix.Errno.EINVAL +PLATFORM_ERR_OVERFLOW :: posix.Errno.E2BIG +PLATFORM_ERR_NOT_FOUND :: posix.Errno.ENOENT +PLATFORM_ERR_EXISTS :: posix.Errno.EEXIST +PLATFORM_ERR_PERMISSION_DENIED :: posix.Errno.EPERM +PLATFORM_ERR_EOF :: -100 // There is no EOF errno, we use negative for our own error codes. + +_Platform_Error :: posix.Errno diff --git a/core/nbio/errors_windows.odin b/core/nbio/errors_windows.odin new file mode 100644 index 000000000..d9b3b7e4d --- /dev/null +++ b/core/nbio/errors_windows.odin @@ -0,0 +1,17 @@ +#+private +package nbio + +import win "core:sys/windows" + +PLATFORM_ERR_UNSUPPORTED :: win.System_Error.NOT_SUPPORTED + +PLATFORM_ERR_ALLOCATION_FAILED :: win.System_Error.OUTOFMEMORY +PLATFORM_ERR_TIMEOUT :: win.System_Error.WAIT_TIMEOUT +PLATFORM_ERR_INVALID_ARGUMENT :: win.System_Error.BAD_ARGUMENTS +PLATFORM_ERR_OVERFLOW :: win.System_Error.BUFFER_OVERFLOW +PLATFORM_ERR_NOT_FOUND :: win.System_Error.FILE_NOT_FOUND +PLATFORM_ERR_EXISTS :: win.System_Error.FILE_EXISTS +PLATFORM_ERR_PERMISSION_DENIED :: win.System_Error.ACCESS_DENIED +PLATFORM_ERR_EOF :: win.System_Error.HANDLE_EOF + +_Platform_Error :: win.System_Error diff --git a/core/nbio/impl.odin b/core/nbio/impl.odin new file mode 100644 index 000000000..3f5191c5e --- /dev/null +++ b/core/nbio/impl.odin @@ -0,0 +1,256 @@ +#+private +package nbio + +import "base:runtime" +import "base:intrinsics" + +import "core:container/pool" +import "core:container/queue" +import "core:net" +import "core:strings" +import "core:sync" +import "core:time" +import "core:reflect" + +@(init, private) +init_thread_local_cleaner :: proc "contextless" () { + runtime.add_thread_local_cleaner(proc() { + l := &_tls_event_loop + if l.refs > 0 { + l.refs = 1 + _release_thread_event_loop() + } + }) +} + +@(thread_local) +_tls_event_loop: Event_Loop + +_acquire_thread_event_loop :: proc() -> General_Error { + l := &_tls_event_loop + if l.err == nil && l.refs == 0 { + when ODIN_ARCH == .wasm32 || ODIN_ARCH == .wasm64p32 && ODIN_OS != .Orca { + allocator := runtime.default_wasm_allocator() + } else { + allocator := runtime.heap_allocator() + } + + l.queue.data.allocator = allocator + + if pool_err := pool.init(&l.operation_pool, "_pool_link"); pool_err != nil { + l.err = .Allocation_Failed + return l.err + } + defer if l.err != nil { pool.destroy(&l.operation_pool) } + + l.err = _init(l, allocator) + l.now = time.now() + } + + if l.err != nil { + return l.err + } + + l.refs += 1 + return nil +} + +_release_thread_event_loop :: proc() { + l := &_tls_event_loop + if l.err != nil { + assert(l.refs == 0) + return + } + + if l.refs > 0 { + l.refs -= 1 + if l.refs == 0 { + queue.destroy(&l.queue) + pool.destroy(&l.operation_pool) + _destroy(l) + l^ = {} + } + } +} + +_current_thread_event_loop :: #force_inline proc(loc := #caller_location) -> (^Event_Loop) { + l := &_tls_event_loop + + if intrinsics.expect(l.refs == 0, false) { + return nil + } + + return l +} + +_tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { + // Receive operations queued from other threads first. + { + sync.guard(&l.queue_mu) + for op in queue.pop_front_safe(&l.queue) { + _exec(op) + } + } + + return __tick(l, timeout) +} + +_listen_tcp :: proc( + l: ^Event_Loop, + endpoint: Endpoint, + backlog := 1000, + loc := #caller_location, +) -> ( + socket: TCP_Socket, + err: Network_Error, +) { + family := family_from_endpoint(endpoint) + socket = create_tcp_socket(family, l, loc) or_return + defer if err != nil { close(socket, l=l) } + + net.set_option(socket, .Reuse_Address, true) + + bind(socket, endpoint) or_return + + _listen(socket, backlog) or_return + return +} + +_read_entire_file :: proc(l: ^Event_Loop, path: string, user_data: rawptr, cb: Read_Entire_File_Callback, allocator := context.allocator, dir := CWD) { + open_poly3(path, user_data, cb, allocator, on_open, dir=dir, l=l) + + on_open :: proc(op: ^Operation, user_data: rawptr, cb: Read_Entire_File_Callback, allocator: runtime.Allocator) { + if op.open.err != nil { + cb(user_data, nil, {.Open, op.open.err}) + return + } + + stat_poly3(op.open.handle, user_data, cb, allocator, on_stat) + } + + on_stat :: proc(op: ^Operation, user_data: rawptr, cb: Read_Entire_File_Callback, allocator: runtime.Allocator) { + if op.stat.err != nil { + close(op.stat.handle) + cb(user_data, nil, {.Stat, op.stat.err}) + return + } + + if op.stat.type != .Regular { + close(op.stat.handle) + cb(user_data, nil, {.Stat, .Unsupported}) + return + } + + buf, err := make([]byte, op.stat.size, allocator) + if err != nil { + close(op.stat.handle) + cb(user_data, nil, {.Read, .Allocation_Failed}) + return + } + + read_poly3(op.stat.handle, 0, buf, user_data, cb, allocator, on_read, all=true) + } + + on_read :: proc(op: ^Operation, user_data: rawptr, cb: Read_Entire_File_Callback, allocator: runtime.Allocator) { + close(op.read.handle) + + if op.read.err != nil { + delete(op.read.buf, allocator) + cb(user_data, nil, {.Read, op.read.err}) + return + } + + assert(op.read.read == len(op.read.buf)) + cb(user_data, op.read.buf, {}) + } +} + +NBIO_DEBUG :: #config(NBIO_DEBUG, false) + +Debuggable :: union { + Operation_Type, + string, + int, + time.Time, + time.Duration, +} + +@(disabled=!NBIO_DEBUG) +debug :: proc(contents: ..Debuggable, location := #caller_location) { + if context.logger.procedure == nil || .Debug < context.logger.lowest_level { + return + } + + runtime.DEFAULT_TEMP_ALLOCATOR_TEMP_GUARD() + + b: strings.Builder + b.buf.allocator = context.temp_allocator + + strings.write_string(&b, "[nbio] ") + + for content, i in contents { + switch val in content { + case Operation_Type: + name, _ := reflect.enum_name_from_value(val) + strings.write_string(&b, name) + case string: + strings.write_string(&b, val) + case int: + strings.write_int(&b, val) + case time.Duration: + ms := time.duration_milliseconds(val) + strings.write_f64(&b, ms, 'f') + strings.write_string(&b, "ms") + + case time.Time: + buf: [time.MIN_HMS_LEN+1]byte + h, m, s, ns := time.precise_clock_from_time(val) + buf[8] = '.' + buf[7] = '0' + u8(s % 10); s /= 10 + buf[6] = '0' + u8(s) + buf[5] = ':' + buf[4] = '0' + u8(m % 10); m /= 10 + buf[3] = '0' + u8(m) + buf[2] = ':' + buf[1] = '0' + u8(h % 10); h /= 10 + buf[0] = '0' + u8(h) + + strings.write_string(&b, string(buf[:])) + strings.write_int(&b, ns) + } + + if i < len(contents)-1 { + strings.write_byte(&b, ' ') + } + } + + context.logger.procedure(context.logger.data, .Debug, strings.to_string(b), context.logger.options, location) +} + +warn :: proc(text: string, location := #caller_location) { + if context.logger.procedure == nil || .Warning < context.logger.lowest_level { + return + } + + context.logger.procedure(context.logger.data, .Warning, text, context.logger.options, location) +} + +@(require_results) +constraint_bufs_to_max_rw :: proc(bufs: [][]byte) -> (constrained: [][]byte, total: int) { + for buf in bufs { + total += len(buf) + } + + constrained = bufs + for n := total; n > MAX_RW; { + last := &constrained[len(constrained)-1] + take := min(len(last), n-MAX_RW) + last^ = last[:take] + if len(last) == 0 { + constrained = constrained[:len(constrained)-1] + } + n -= take + } + + return +} diff --git a/core/nbio/impl_linux.odin b/core/nbio/impl_linux.odin new file mode 100644 index 000000000..b48fe248c --- /dev/null +++ b/core/nbio/impl_linux.odin @@ -0,0 +1,1421 @@ +#+private file +package nbio + +import "base:intrinsics" + +import "core:container/pool" +import "core:container/queue" +import "core:mem" +import "core:nbio/uring" +import "core:net" +import "core:slice" +import "core:strings" +import "core:sys/linux" +import "core:time" + +@(private="package") +_FULLY_SUPPORTED :: true + +@(private="package") +_Event_Loop :: struct { + ring: uring.Ring, + // Ready to be submitted to kernel, if kernel is full. + unqueued: queue.Queue(^Operation), + // Ready to run callbacks, mainly next tick, some other ops that error outside the kernel. + completed: queue.Queue(^Operation), + allocator: mem.Allocator, + wake: ^Operation, +} + +@(private="package") +_Handle :: linux.Fd + +@(private="package") +_CWD :: linux.AT_FDCWD + +@(private="package") +MAX_RW :: mem.Gigabyte + +@(private="package") +_Operation :: struct { + removal: ^Operation, + sqe: ^linux.IO_Uring_SQE, + expires: linux.Time_Spec, +} + +@(private="package") +_Accept :: struct { + sockaddr: linux.Sock_Addr_Any, + sockaddr_len: i32, +} + +@(private="package") +_Close :: struct {} + +@(private="package") +_Dial :: struct { + sockaddr: linux.Sock_Addr_Any, +} + +@(private="package") +_Read :: struct {} + +@(private="package") +_Write :: struct {} + +@(private="package") +_Send :: struct { + endpoint: linux.Sock_Addr_Any, + msghdr: linux.Msg_Hdr, + small_bufs: [1][]byte, +} + +@(private="package") +_Recv :: struct { + addr_out: linux.Sock_Addr_Any, + msghdr: linux.Msg_Hdr, + small_bufs: [1][]byte, +} + +@(private="package") +_Timeout :: struct { + expires: linux.Time_Spec, +} + +@(private="package") +_Poll :: struct {} + +@(private="package") +_Remove :: struct { + target: ^Operation, +} + +@(private="package") +_Link_Timeout :: struct { + target: ^Operation, + expires: linux.Time_Spec, +} + +@(private="package") +_Send_File :: struct { + len: int, + pipe: Handle, + + splice: ^Operation, +} + +@(private="package") +_Splice :: struct { + off: int, + len: int, + file: Handle, + pipe: Handle, + + written: int, + + sendfile: ^Operation, +} + +@(private="package") +_Open :: struct { + cpath: cstring, +} + +@(private="package") +_Stat :: struct { + buf: linux.Statx, +} + +@(private="package") +_init :: proc(l: ^Event_Loop, alloc: mem.Allocator) -> (err: General_Error) { + l.allocator = alloc + + params := uring.DEFAULT_PARAMS + params.flags += {.SUBMIT_ALL, .COOP_TASKRUN, .SINGLE_ISSUER} + + uerr := uring.init(&l.ring, ¶ms, QUEUE_SIZE) + if uerr != nil { + err = General_Error(uerr) + return + } + defer if err != nil { uring.destroy(&l.ring) } + + if perr := queue.init(&l.unqueued, allocator = alloc); perr != nil { + err = .Allocation_Failed + return + } + defer if err != nil { queue.destroy(&l.unqueued) } + + if perr := queue.init(&l.completed, allocator = alloc); perr != nil { + err = .Allocation_Failed + return + } + defer if err != nil { queue.destroy(&l.completed) } + + set_up_wake_up(l) or_return + + return + + set_up_wake_up :: proc(l: ^Event_Loop) -> General_Error { + wakefd, wakefd_err := linux.eventfd(0, {.SEMAPHORE, .CLOEXEC, .NONBLOCK}) + if wakefd_err != nil { + return General_Error(wakefd_err) + } + + op, alloc_err := new(Operation, l.allocator) + if alloc_err != nil { + linux.close(wakefd) + return .Allocation_Failed + } + + l.wake = op + l.wake.detached = true + l.wake.l = l + l.wake.type = .Read + l.wake.cb = wake_up_callback + l.wake.read.handle = wakefd + l.wake.read.buf = ([^]byte)(&l.wake.user_data)[:8] + _exec(l.wake) + + return nil + } + + wake_up_callback :: proc(op: ^Operation) { + assert(op.type == .Read) + assert(op == op.l.wake) + assert(op.read.err == nil) + assert(op.read.read == 8) + value := intrinsics.unaligned_load((^u64)(&op.user_data)) + assert(value > 0) + debug(int(value), "wake_up calls handled") + + op.read.read = 0 + op.user_data = {} + _exec(op) + } +} + +@(private="package") +_destroy :: proc(l: ^Event_Loop) { + linux.close(l.wake.read.handle) + free(l.wake, l.allocator) + + queue.destroy(&l.unqueued) + queue.destroy(&l.completed) + uring.destroy(&l.ring) +} + +@(private="package") +__tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> General_Error { + debug("tick") + + // Execute completed operations, mostly next tick ops, also some other ops that may error before + // adding it to the Uring. + n := queue.len(l.completed) + if n > 0 { + l.now = time.now() + for _ in 0 ..< n { + completed := queue.pop_front(&l.completed) + if completed._impl.removal == nil { + completed.cb(completed) + } else if completed._impl.removal != (^Operation)(REMOVED) { + completed._impl.removal._remove.target = nil + } + if !completed.detached { + pool.put(&l.operation_pool, completed) + } + } + } + + err := _flush_submissions(l, timeout) + if err != nil { return General_Error(err) } + + l.now = time.now() + + err = _flush_completions(l, false) + if err != nil { return General_Error(err) } + + return nil + + _flush_completions :: proc(l: ^Event_Loop, wait: bool) -> linux.Errno { + wait := wait + cqes: [128]linux.IO_Uring_CQE = --- + for { + completed, err := uring.copy_cqes(&l.ring, cqes[:], 1 if wait else 0) + if err == .EINTR { + continue + } else if err != nil { + return err + } + + _flush_unqueued(l) + + if completed > 0 { + debug(int(completed), "operations returned from uring") + } + + for cqe in cqes[:completed] { + assert(cqe.user_data != 0) + op, is_timeout := unpack_operation(cqe.user_data) + if is_timeout { + link_timeout_callback(op, cqe.res) + } else { + handle_completed(op, cqe.res) + } + } + + if completed < len(cqes) { break } + + debug("more events ready than our results buffer handles, getting more") + wait = false + } + + return nil + } + + _flush_submissions :: proc(l: ^Event_Loop, timeout: time.Duration) -> linux.Errno { + for { + ts: linux.Time_Spec + ts.time_nsec = uint(timeout) + _, err := uring.submit(&l.ring, 0 if timeout == 0 else 1, nil if timeout < 0 else &ts) + #partial switch err { + case .NONE, .ETIME: + case .EINTR: + warn("uring interrupted") + continue + case .ENOMEM: + // It's full, wait for at least one operation to complete and try again. + warn("could not flush submissions, ENOMEM, waiting for operations to complete before continuing") + ferr := _flush_completions(l, true) + if ferr != nil { return ferr } + continue + case: + return err + } + + break + } + + return nil + } + + _flush_unqueued :: proc(l: ^Event_Loop) { + n := queue.len(l.unqueued) + for _ in 0.. (handle: Handle, err: FS_Error) { + if path == "" { + err = .Invalid_Argument + return + } + + cpath, cerr := strings.clone_to_cstring(path, l.allocator) + if cerr != nil { + err = .Allocation_Failed + return + } + defer delete(cpath, l.allocator) + + sys_flags := linux.Open_Flags{.NOCTTY, .CLOEXEC, .NONBLOCK} + + if .Write in mode { + if .Read in mode { + sys_flags += {.RDWR} + } else { + sys_flags += {.WRONLY} + } + } + + if .Append in mode { sys_flags += {.APPEND} } + if .Create in mode { sys_flags += {.CREAT} } + if .Excl in mode { sys_flags += {.EXCL} } + if .Sync in mode { sys_flags += {.DSYNC} } + if .Trunc in mode { sys_flags += {.TRUNC} } + // if .Inheritable in mode { sys_flags -= {.CLOEXEC} } + + errno: linux.Errno + handle, errno = linux.openat(dir, cpath, sys_flags, transmute(linux.Mode)perm) + if errno != nil { + err = FS_Error(errno) + } + + return +} + +@(private="package") +_create_socket :: proc( + _: ^Event_Loop, + family: Address_Family, + protocol: Socket_Protocol, +) -> ( + socket: Any_Socket, + err: Create_Socket_Error, +) { + socket = net.create_socket(family, protocol) or_return + // NOTE: this doesn't seem needed with io uring. + // defer if err != nil { net.close(socket) } + // net.set_blocking(socket, false) or_return + return +} + +@(private="package") +_listen :: proc(socket: TCP_Socket, backlog := 1000) -> Listen_Error { + err := linux.listen(linux.Fd(socket), i32(backlog)) + if err != nil { + return net._listen_error(err) + } + return nil +} + +@(private="package") +_remove :: proc(target: ^Operation) { + target := target + assert(target != nil) + + if target._impl.removal != nil { + return + } + + op := _prep(target.l, proc(_: ^Operation) {}, ._Remove) + op._remove.target = target + + target._impl.removal = op + + enqueue(op, uring.async_cancel( + &op.l.ring, + u64(uintptr(target)), + u64(uintptr(op)), + )) +} + +@(private="package") +_associate_handle :: proc(handle: uintptr, l: ^Event_Loop) -> (Handle, Association_Error) { + // Works by default. + return Handle(handle), nil +} + +@(private="package") +_associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Error { + // Works by default. + return nil +} + +@(private="package") +_wake_up :: proc(l: ^Event_Loop) { + assert(l != &_tls_event_loop) + one: u64 = 1 + // Called from another thread, in which we can't use the uring. + n, err := linux.write(l.wake.read.handle, ([^]byte)(&one)[:size_of(one)]) + // Shouldn't fail. + assert(err == nil) + assert(n == 8) +} + +// Start file private. + +// The size of the IO Uring queues. +QUEUE_SIZE :: #config(ODIN_NBIO_QUEUE_SIZE, 2048) +#assert(QUEUE_SIZE <= uring.MAX_ENTRIES) + +#assert(size_of(Operation) <= 384) // Just so we see when we make it bigger. +#assert(size_of(Specifics) <= 288) // Just so we see when we make it bigger. + +REMOVED :: rawptr(max(uintptr)-1) + +handle_completed :: proc(op: ^Operation, res: i32) { + debug("handling", op.type, "result", int(res)) + + switch op.type { + case .Accept: + accept_callback(op, res) + case .Dial: + dial_callback(op, res) + case .Timeout: + timeout_callback(op, res) + case .Write: + if !write_callback(op, res) { return } + case .Read: + if !read_callback(op, res) { return } + case .Close: + close_callback(op, res) + case .Poll: + poll_callback(op, res) + case .Send: + if !send_callback(op, res) { return } + maybe_callback(op) + if len(op.send.bufs) > 1 { delete(op.send.bufs, op.l.allocator) } + cleanup(op) + return + case .Recv: + if !recv_callback(op, res) { return } + maybe_callback(op) + if len(op.recv.bufs) > 1 { delete(op.recv.bufs, op.l.allocator) } + cleanup(op) + return + case .Open: + open_callback(op, res) + case .Stat: + stat_callback(op, res) + case .Send_File: + if !sendfile_callback(op, res) { return } + case ._Splice: + if !splice_callback(op, res) { return } + case ._Remove: + if !remove_callback(op, res) { return } + case ._Link_Timeout: + unreachable() + case .None: + fallthrough + case: + panic("corrupted operation") + } + + maybe_callback(op) + cleanup(op) + + maybe_callback :: proc(op: ^Operation) { + if op._impl.removal == nil { + debug("done, calling back", op.type) + op.cb(op) + } else if op._impl.removal == (^Operation)(REMOVED) { + debug("done but was cancelled by remove", op.type) + } else { + debug("done but has removal pending", op.type) + // If the remove callback sees their target is nil, they know it is done already. + op._impl.removal._remove.target = nil + } + } + + cleanup :: proc(op: ^Operation) { + if !op.detached { + pool.put(&op.l.operation_pool, op) + } + } +} + +enqueue :: proc(op: ^Operation, sqe: ^linux.IO_Uring_SQE, ok: bool) { + assert(uintptr(op) & LINK_TIMEOUT_MASK == 0) + debug("enqueue", op.type) + if !ok { + warn("queueing for next tick because the ring is full, queue size may need increasing") + pok, _ := queue.push_back(&op.l.unqueued, op) + ensure(pok, "unqueued queue allocation failure") + return + } + + op._impl.sqe = sqe +} + +LINK_TIMEOUT_MASK :: 1 + +link_timeout :: proc(target: ^Operation, expires: time.Time) { + if expires == {} { + return + } + + // If the last op was queued because kernel is full, return. + if target._impl.sqe == nil { + assert(queue.len(target.l.unqueued) > 0 && queue.back_ptr(&target.l.unqueued)^ == target) + return + } + + target._impl.sqe.flags += {.IO_LINK} + target._impl.expires = ns_to_time_spec(expires._nsec) + + // Tag the pointer as a timeout. + p := uintptr(target) + assert(p & LINK_TIMEOUT_MASK == 0) + p |= LINK_TIMEOUT_MASK + + _, ok := uring.link_timeout( + &target.l.ring, + u64(p), + &target._impl.expires, + {.ABS, .REALTIME}, + ) + // If the target wasn't queued, the link timeout should not need to be queued, because uring + // leaves one spot specifically for a link. + assert(ok) +} + +link_timeout_callback :: proc(op: ^Operation, res: i32) { + err := linux.Errno(-res) + if err != nil && err != .ETIME && err != .ECANCELED { + panic("unexpected nbio.link_timeout() error") + } +} + +unpack_operation :: #force_inline proc(user_data: u64) -> (op: ^Operation, timed_out: bool) { + p := uintptr(user_data) + return (^Operation)(p &~ LINK_TIMEOUT_MASK), bool(p & LINK_TIMEOUT_MASK) +} + +@(require_results) +remove_callback :: proc(op: ^Operation, res: i32) -> bool { + assert(op.type == ._Remove) + err := linux.Errno(-res) + + target := op._remove.target + if target == nil { + debug("remove target nil, already handled") + return true + } + + assert(target.type != .None) + assert(target._impl.removal == op) + + if err == .ENOENT { + debug("remove ENOENT, trying again") + + enqueue(op, uring.async_cancel( + &op.l.ring, + u64(uintptr(target)), + u64(uintptr(op)), + )) + + return false + } else if err == .EALREADY { + debug("remove is accepted and will be tried") + } else if err != nil { + assert(false, "unexpected nbio.remove() error") + } + + // Set to sentinel so nothing references the operation that will be reused. + target._impl.removal = (^Operation)(REMOVED) + return true +} + +accept_exec :: proc(op: ^Operation) { + assert(op.type == .Accept) + op.accept._impl.sockaddr_len = size_of(op.accept._impl.sockaddr) + enqueue(op, uring.accept( + &op.l.ring, + u64(uintptr(op)), + linux.Fd(op.accept.socket), + &op.accept._impl.sockaddr, + &op.accept._impl.sockaddr_len, + {}, + )) + link_timeout(op, op.accept.expires) +} + +accept_callback :: proc(op: ^Operation, res: i32) { + assert(op.type == .Accept) + if res < 0 { + errno := linux.Errno(-res) + #partial switch errno { + case .ECANCELED: + op.accept.err = .Timeout + case: + op.accept.err = net._accept_error(errno) + } + + return + } + + op.accept.client = TCP_Socket(res) + // net.set_blocking(net.TCP_Socket(op.accept.client), false) + op.accept.client_endpoint = sockaddr_storage_to_endpoint(&op.accept._impl.sockaddr) +} + +dial_exec :: proc(op: ^Operation) { + assert(op.type == .Dial) + if op.dial.socket == {} { + if op.dial.endpoint.port == 0 { + op.dial.err = .Port_Required + queue.push_back(&op.l.completed, op) + return + } + + sock, err := create_socket(net.family_from_endpoint(op.dial.endpoint), .TCP) + if err != nil { + op.dial.err = err + queue.push_back(&op.l.completed, op) + return + } + + op.dial.socket = sock.(TCP_Socket) + op.dial._impl.sockaddr = endpoint_to_sockaddr(op.dial.endpoint) + } + + enqueue(op, uring.connect( + &op.l.ring, + u64(uintptr(op)), + linux.Fd(op.dial.socket), + &op.dial._impl.sockaddr, + )) + link_timeout(op, op.dial.expires) +} + +dial_callback :: proc(op: ^Operation, res: i32) { + assert(op.type == .Dial) + errno := linux.Errno(-res) + if errno != nil { + #partial switch errno { + case .ECANCELED: + op.dial.err = Dial_Error.Timeout + case: + op.dial.err = net._dial_error(errno) + } + close(op.dial.socket) + } +} + +timeout_exec :: proc(op: ^Operation) { + assert(op.type == .Timeout) + if op.timeout.duration <= 0 { + queue.push_back(&op.l.completed, op) + return + } + + expires := time.time_add(op.l.now, op.timeout.duration) + op.timeout._impl.expires = ns_to_time_spec(expires._nsec) + + enqueue(op, uring.timeout( + &op.l.ring, + u64(uintptr(op)), + &op.timeout._impl.expires, + 0, + {.ABS, .REALTIME}, + )) +} + +timeout_callback :: proc(op: ^Operation, res: i32) { + if res < 0 { + errno := linux.Errno(-res) + #partial switch errno { + case .ETIME, .ECANCELED: // OK. + case: + debug("unexpected timeout error:", int(errno)) + panic("unexpected timeout error") + } + } +} + +close_exec :: proc(op: ^Operation) { + assert(op.type == .Close) + + fd: linux.Fd + switch closable in op.close.subject { + case Handle: fd = linux.Fd(closable) + case TCP_Socket: fd = linux.Fd(closable) + case UDP_Socket: fd = linux.Fd(closable) + case: op.close.err = .Invalid_Argument; return + } + + enqueue(op, uring.close( + &op.l.ring, + u64(uintptr(op)), + fd, + )) +} + +close_callback :: proc(op: ^Operation, res: i32) { + assert(op.type == .Close) + op.close.err = FS_Error(linux.Errno(-res)) +} + +recv_exec :: proc(op: ^Operation) { + assert(op.type == .Recv) + + if op.recv.err != nil { + queue.push_back(&op.l.completed, op) + return + } + + bufs := slice.advance_slices(op.recv.bufs, op.recv.received) + bufs, _ = constraint_bufs_to_max_rw(bufs) + op.recv._impl.msghdr.iov = transmute([]linux.IO_Vec)bufs + + sock: linux.Fd + switch socket in op.recv.socket { + case TCP_Socket: + sock = linux.Fd(socket) + case UDP_Socket: + sock = linux.Fd(socket) + op.recv._impl.msghdr.name = &op.recv._impl.addr_out + op.recv._impl.msghdr.namelen = size_of(op.recv._impl.addr_out) + } + + enqueue(op, uring.recvmsg( + &op.l.ring, + u64(uintptr(op)), + linux.Fd(sock), + &op.recv._impl.msghdr, + {.NOSIGNAL}, + )) + link_timeout(op, op.recv.expires) +} + +@(require_results) +recv_callback :: proc(op: ^Operation, res: i32) -> bool { + assert(op.type == .Recv) + + if res < 0 { + errno := linux.Errno(-res) + switch sock in op.recv.socket { + case TCP_Socket: + #partial switch errno { + case .ECANCELED: + op.recv.err = TCP_Recv_Error.Timeout + case: + op.recv.err = net._tcp_recv_error(errno) + } + case UDP_Socket: + #partial switch errno { + case .ECANCELED: + op.recv.err = UDP_Recv_Error.Timeout + case: + op.recv.err = net._udp_recv_error(errno) + } + } + + return true + } + + op.recv.received += int(res) + + switch sock in op.recv.socket { + case TCP_Socket: + if res == 0 { + // Connection closed. + return true + } + + if op.recv.all { + total: int + for buf in op.recv.bufs { + total += len(buf) + } + + if op.recv.received < total { + recv_exec(op) + return false + } + } + + case UDP_Socket: + op.recv.source = sockaddr_storage_to_endpoint(&op.recv._impl.addr_out) + } + + return true +} + +send_exec :: proc(op: ^Operation) { + assert(op.type == .Send) + + if op.send.err != nil { + queue.push_back(&op.l.completed, op) + return + } + + bufs := slice.advance_slices(op.send.bufs, op.send.sent) + bufs, _ = constraint_bufs_to_max_rw(bufs) + op.send._impl.msghdr.iov = transmute([]linux.IO_Vec)bufs + + sock: linux.Fd + switch socket in op.send.socket { + case TCP_Socket: + sock = linux.Fd(socket) + case UDP_Socket: + sock = linux.Fd(socket) + op.send._impl.endpoint = endpoint_to_sockaddr(op.send.endpoint) + op.send._impl.msghdr.name = &op.send._impl.endpoint + op.send._impl.msghdr.namelen = size_of(op.send._impl.endpoint) + } + + enqueue(op, uring.sendmsg( + &op.l.ring, + u64(uintptr(op)), + sock, + &op.send._impl.msghdr, + {.NOSIGNAL}, + )) + link_timeout(op, op.send.expires) +} + +@(require_results) +send_callback :: proc(op: ^Operation, res: i32) -> bool { + assert(op.type == .Send) + if res < 0 { + errno := linux.Errno(-res) + switch sock in op.send.socket { + case TCP_Socket: + #partial switch errno { + case .ECANCELED: + op.send.err = TCP_Send_Error.Timeout + case: + op.send.err = net._tcp_send_error(errno) + } + case UDP_Socket: + #partial switch errno { + case .ECANCELED: + op.send.err = UDP_Send_Error.Timeout + case: + op.send.err = net._udp_send_error(errno) + } + case: panic("corrupted socket") + } + + return true + } + + op.send.sent += int(res) + + if op.send.all { + total: int + for buf in op.send.bufs { + total += len(buf) + } + + if op.send.sent < total { + assert(res > 0) + send_exec(op) + return false + } + } + + return true +} + +write_exec :: proc(op: ^Operation) { + assert(op.type == .Write) + + buf := op.write.buf[op.write.written:] + buf = buf[:min(MAX_RW, len(buf))] + + enqueue(op, uring.write( + &op.l.ring, + u64(uintptr(op)), + op.write.handle, + buf, + u64(op.write.offset) + u64(op.write.written), + )) + link_timeout(op, op.write.expires) +} + +@(require_results) +write_callback :: proc(op: ^Operation, res: i32) -> bool { + if res < 0 { + errno := linux.Errno(-res) + op.write.err = FS_Error(errno) + return true + } + + op.write.written += int(res) + + if op.write.all && op.write.written < len(op.write.buf) { + write_exec(op) + return false + } + + return true +} + +read_exec :: proc(op: ^Operation) { + assert(op.type == .Read) + + buf := op.read.buf[op.read.read:] + buf = buf[:min(MAX_RW, len(buf))] + + enqueue(op, uring.read( + &op.l.ring, + u64(uintptr(op)), + op.read.handle, + buf, + u64(op.read.offset) + u64(op.read.read), + )) + link_timeout(op, op.read.expires) +} + +@(require_results) +read_callback :: proc(op: ^Operation, res: i32) -> bool { + if res < 0 { + errno := linux.Errno(-res) + op.read.err = FS_Error(errno) + return true + } else if res == 0 { + if op.read.read == 0 { + op.read.err = .EOF + } + return true + } + + op.read.read += int(res) + + if op.read.all && op.read.read < len(op.read.buf) { + read_exec(op) + return false + } + + return true +} + +poll_exec :: proc(op: ^Operation) { + assert(op.type == .Poll) + + events: linux.Fd_Poll_Events + switch op.poll.event { + case .Receive: events = { .IN } + case .Send: events = { .OUT } + } + + fd: linux.Fd + switch sock in op.poll.socket { + case TCP_Socket: fd = linux.Fd(sock) + case UDP_Socket: fd = linux.Fd(sock) + } + + enqueue(op, uring.poll_add( + &op.l.ring, + u64(uintptr(op)), + fd, + events, + {}, + )) + link_timeout(op, op.poll.expires) +} + +poll_callback :: proc(op: ^Operation, res: i32) { + if res < 0 { + errno := linux.Errno(-res) + #partial switch errno { + case .NONE: // no-op + case .ECANCELED: + op.poll.result = .Timeout + case .EINVAL, .EFAULT, .EBADF: + op.poll.result = .Invalid_Argument + case: + op.poll.result = .Error + } + + return + } + + op.poll.result = .Ready +} + +/* +`sendfile` is implemented with 2 splices over a pipe. + +Splice A: from file to pipe +Splice B: from pipe to socket (optionally linked to a timeout) + +The splices are hard-linked which means A completes before B. +B could get an `EWOULDBLOCK`, which is when the remote end has not read enough of the socket data yet. +In that case we enqueue a poll on the socket and continue when that completes. +A shouldn't get `EWOULDBLOCK`, but as a cautionary measure we handle it. + +The timeout is either linked to the splice B op, or the poll op, either of these is also always in progress in the kernel. +*/ +sendfile_exec :: proc(op: ^Operation, splice := true) { + assert(op.type == .Send_File) + + splice_done := !splice + if splice_op := op.sendfile._impl.splice; splice && splice_op != nil { + splice_done = splice_op._splice.written == splice_op._splice.len + } + + debug("sendfile_exec") + + if op.sendfile._impl.splice == nil { + // First stat for the file size. + if op.sendfile.nbytes == SEND_ENTIRE_FILE { + debug("sendfile SEND_ENTIRE_FILE, doing stat") + + stat_poly(op.sendfile.file, op, proc(stat_op: ^Operation, sendfile_op: ^Operation) { + if stat_op.stat.err != nil { + sendfile_op.sendfile.err = stat_op.stat.err + } else if stat_op.stat.type != .Regular { + sendfile_op.sendfile.err = FS_Error.Invalid_Argument + } else { + sendfile_op.sendfile.nbytes = int(i64(stat_op.stat.size) - i64(sendfile_op.sendfile.offset)) + if sendfile_op.sendfile.nbytes <= 0 { + sendfile_op.sendfile.err = FS_Error.Invalid_Argument + } + } + + if sendfile_op.sendfile.err != nil { + handle_completed(sendfile_op, 0) + return + } + + sendfile_exec(sendfile_op) + }) + return + } + + debug("sendfile setting up") + + rw: [2]linux.Fd + err := linux.pipe2(&rw, {.NONBLOCK, .CLOEXEC}) + if err != nil { + op.sendfile.err = FS_Error(err) + queue.push_back(&op.l.completed, op) + return + } + + splice_op := _prep(op.l, proc(_: ^Operation) { debug("sendfile splice helper callback") }, ._Splice) + splice_op._splice.sendfile = op + splice_op._splice.file = op.sendfile.file + splice_op._splice.pipe = rw[1] + splice_op._splice.off = op.sendfile.offset + splice_op._splice.len = op.sendfile.nbytes + + op.sendfile._impl.splice = splice_op + op.sendfile._impl.pipe = rw[0] + op.sendfile._impl.len = op.sendfile.nbytes + } + + splice_op: ^Operation + if !splice_done { + splice_op = op.sendfile._impl.splice + enqueue(splice_op, uring.splice( + &splice_op.l.ring, + u64(uintptr(splice_op)), + splice_op._splice.file, + i64(splice_op._splice.off) + i64(splice_op._splice.written), + splice_op._splice.pipe, + -1, + u32(min(splice_op._splice.len - splice_op._splice.written, MAX_RW)), + {.NONBLOCK}, + )) + } + + b, b_added := uring.splice( + &op.l.ring, + u64(uintptr(op)), + op.sendfile._impl.pipe, + -1, + linux.Fd(op.sendfile.socket), + -1, + u32(min(op.sendfile._impl.len - op.sendfile.sent, MAX_RW)), + {.NONBLOCK}, + ) + if !splice_done && b_added { + assert(splice_op._impl.sqe != nil) // if b was added successfully, a should've been too. + // Makes sure splice A (file to pipe) completes before splice B (pipe to socket). + splice_op._impl.sqe.flags += {.IO_HARDLINK} + } + enqueue(op, b, b_added) + + link_timeout(op, op.sendfile.expires) +} + +@(require_results) +splice_callback :: proc(op: ^Operation, res: i32) -> bool { + assert(op.type == ._Splice) + + if res < 0 { + errno := linux.Errno(-res) + #partial switch errno { + case .EAGAIN: + // Splice A (from file to pipe) would block, this means the buffer is full and it first needs + // to be sent over the socket by splice B (from pipe to socket). + // So we don't do anything here, once a splice B completes a new splice A will be created. + + case: + // Splice A (from file to pipe) error, we need to close the pipes, cancel the pending splice B, + // and call the callback with the error. + + debug("sendfile helper splice error, closing pipe") + + close(op._splice.pipe) + + // This is nil if this is a cancel originating from the sendfile. + // This is not nil if it is an actual error that happened on this splice. + sendfile_op := op._splice.sendfile + if sendfile_op != nil { + debug("sendfile helper splice error, cancelling main sendfile") + assert(sendfile_op.type == .Send_File) + + sendfile_op.sendfile._impl.splice = nil + sendfile_op.sendfile.err = FS_Error(errno) + } + } + + return true + } + + op._splice.written += int(res) + + sendfile_op := op._splice.sendfile + if sendfile_op != nil { + if op._splice.written < sendfile_op.sendfile.nbytes { + return false + } + + sendfile_op.sendfile._impl.splice = nil + } + + assert(op._splice.pipe > 0) + close(op._splice.pipe) + + debug("sendfile helper splice completely done") + return true +} + +@(require_results) +sendfile_callback :: proc(op: ^Operation, res: i32) -> bool { + assert(op.type == .Send_File) + + if op.sendfile.err == nil && res < 0 { + errno := linux.Errno(-res) + #partial switch errno { + case .EAGAIN: + // Splice B (from pipe to socket) would block. We are waiting on the remote to read more + // of our buffer before we can send more to it. + // We use a poll to find out when this is. + + debug("sendfile needs to poll") + + poll_op := poll_poly(op.sendfile.socket, .Send, op, proc(poll_op: ^Operation, sendfile_op: ^Operation) { + #partial switch poll_op.poll.result { + case .Ready: + // Do not enqueue a splice right away, we know there is at least one splice call worth of data in the kernel buffer. + sendfile_exec(sendfile_op, splice=false) + return + + case .Timeout: + sendfile_op.sendfile.err = TCP_Send_Error.Timeout + case: + sendfile_op.sendfile.err = TCP_Send_Error.Unknown + } + + debug("sendfile poll error") + handle_completed(sendfile_op, 0) + }) + + link_timeout(poll_op, op.sendfile.expires) + return false + + case .ECANCELED: + op.sendfile.err = TCP_Send_Error.Timeout + case: + op.sendfile.err = net._tcp_send_error(errno) + } + } + + if op.sendfile.err != nil { + debug("sendfile error") + + if op.sendfile._impl.pipe > 0 { + close(op.sendfile._impl.pipe) + } + + splice_op := op.sendfile._impl.splice + if splice_op != nil { + assert(splice_op.type == ._Splice) + splice_op._splice.sendfile = nil + _remove(splice_op) + } + + return true + } + + op.sendfile.sent += int(res) + if op.sendfile.sent < op.sendfile._impl.len { + debug("sendfile not completely done yet") + sendfile_exec(op) + if op.sendfile.progress_updates { op.cb(op) } + return false + } + + debug("sendfile completely done") + return true +} + +open_exec :: proc(op: ^Operation) { + assert(op.type == .Open) + + sys_flags := linux.Open_Flags{.NOCTTY, .CLOEXEC, .NONBLOCK} + + if .Write in op.open.mode { + if .Read in op.open.mode { + sys_flags += {.RDWR} + } else { + sys_flags += {.WRONLY} + } + } + + if .Append in op.open.mode { sys_flags += {.APPEND} } + if .Create in op.open.mode { sys_flags += {.CREAT} } + if .Excl in op.open.mode { sys_flags += {.EXCL} } + if .Sync in op.open.mode { sys_flags += {.DSYNC} } + if .Trunc in op.open.mode { sys_flags += {.TRUNC} } + // if .Inheritable in op.open.mode { sys_flags -= {.CLOEXEC} } + + cpath, err := strings.clone_to_cstring(op.open.path, op.l.allocator) + if err != nil { + op.open.err = .Allocation_Failed + queue.push_back(&op.l.completed, op) + return + } + op.open._impl.cpath = cpath + + enqueue(op, uring.openat( + &op.l.ring, + u64(uintptr(op)), + linux.Fd(op.open.dir), + op.open._impl.cpath, + transmute(linux.Mode)op.open.perm, + sys_flags, + )) +} + +open_callback :: proc(op: ^Operation, res: i32) { + assert(op.type == .Open) + + delete(op.open._impl.cpath, op.l.allocator) + + if res < 0 { + errno := linux.Errno(-res) + op.open.err = FS_Error(errno) + return + } + + op.open.handle = Handle(res) +} + +stat_exec :: proc(op: ^Operation) { + assert(op.type == .Stat) + + enqueue(op, uring.statx( + &op.l.ring, + u64(uintptr(op)), + op.stat.handle, + "", + {.EMPTY_PATH}, + {.TYPE, .SIZE}, + &op.stat._impl.buf, + )) +} + +stat_callback :: proc(op: ^Operation, res: i32) { + assert(op.type == .Stat) + + if res < 0 { + errno := linux.Errno(-res) + op.stat.err = FS_Error(errno) + return + } + + type := File_Type.Regular + switch op.stat._impl.buf.mode & linux.S_IFMT { + case linux.S_IFBLK, linux.S_IFCHR: type = .Device + case linux.S_IFDIR: type = .Directory + case linux.S_IFIFO: type = .Pipe_Or_Socket + case linux.S_IFLNK: type = .Symlink + case linux.S_IFREG: type = .Regular + case linux.S_IFSOCK: type = .Pipe_Or_Socket + } + + op.stat.type = type + op.stat.size = i64(op.stat._impl.buf.size) +} + +@(require_results) +sockaddr_storage_to_endpoint :: proc(addr: ^linux.Sock_Addr_Any) -> (ep: Endpoint) { + #partial switch addr.family { + case .INET: + return Endpoint { + address = IP4_Address(addr.sin_addr), + port = int(addr.sin_port), + } + case .INET6: + return Endpoint { + address = IP6_Address(transmute([8]u16be)addr.sin6_addr), + port = int(addr.sin6_port), + } + case: + return {} + } +} + +@(require_results) +endpoint_to_sockaddr :: proc(ep: Endpoint) -> (sockaddr: linux.Sock_Addr_Any) { + switch a in ep.address { + case IP4_Address: + sockaddr.sin_family = .INET + sockaddr.sin_port = u16be(ep.port) + sockaddr.sin_addr = cast([4]u8)a + return + case IP6_Address: + sockaddr.sin6_family = .INET6 + sockaddr.sin6_port = u16be(ep.port) + sockaddr.sin6_addr = transmute([16]u8)a + return + } + + unreachable() +} + +@(require_results) +ns_to_time_spec :: proc(nsec: i64) -> linux.Time_Spec { + NANOSECONDS_PER_SECOND :: 1e9 + return { + time_sec = uint(nsec / NANOSECONDS_PER_SECOND), + time_nsec = uint(nsec % NANOSECONDS_PER_SECOND), + } +} diff --git a/core/nbio/impl_others.odin b/core/nbio/impl_others.odin new file mode 100644 index 000000000..cac1f0c63 --- /dev/null +++ b/core/nbio/impl_others.odin @@ -0,0 +1,217 @@ +#+build !darwin +#+build !freebsd +#+build !openbsd +#+build !netbsd +#+build !linux +#+build !windows +#+private +package nbio + +import "core:container/avl" +import "core:container/pool" +import "core:container/queue" +import "core:mem" +import "core:slice" +import "core:time" + +_FULLY_SUPPORTED :: false + +_Event_Loop :: struct { + completed: queue.Queue(^Operation), + timeouts: avl.Tree(^Operation), + allocator: mem.Allocator, +} + +_Handle :: uintptr + +_CWD :: Handle(-100) + +MAX_RW :: mem.Gigabyte + +_Operation :: struct { + removed: bool, +} + +_Accept :: struct {} + +_Close :: struct {} + +_Dial :: struct {} + +_Recv :: struct { + small_bufs: [1][]byte, +} + +_Send :: struct { + small_bufs: [1][]byte, +} + +_Read :: struct {} + +_Write :: struct {} + +_Timeout :: struct { + expires: time.Time, +} + +_Poll :: struct {} + +_Send_File :: struct {} + +_Open :: struct {} + +_Stat :: struct {} + +_Splice :: struct {} + +_Remove :: struct {} + +_Link_Timeout :: struct {} + +_init :: proc(l: ^Event_Loop, allocator: mem.Allocator) -> (rerr: General_Error) { + l.allocator = allocator + l.completed.data.allocator = allocator + + avl.init_cmp(&l.timeouts, timeouts_cmp, allocator) + + return nil + + timeouts_cmp :: #force_inline proc(a, b: ^Operation) -> slice.Ordering { + switch { + case a.timeout._impl.expires._nsec < b.timeout._impl.expires._nsec: + return .Less + case a.timeout._impl.expires._nsec > b.timeout._impl.expires._nsec: + return .Greater + case uintptr(a) < uintptr(b): + return .Less + case uintptr(a) > uintptr(b): + return .Greater + case: + assert(a == b) + return .Equal + } + } +} + +_destroy :: proc(l: ^Event_Loop) { + queue.destroy(&l.completed) + avl.destroy(&l.timeouts, false) +} + +__tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> General_Error { + l.now = time.now() + + for op in queue.pop_front_safe(&l.completed) { + if !op._impl.removed { + op.cb(op) + } + if !op.detached { + pool.put(&l.operation_pool, op) + } + } + + iter := avl.iterator(&l.timeouts, .Forward) + for node in avl.iterator_next(&iter) { + op := node.value + cexpires := time.diff(l.now, op.timeout._impl.expires) + + done := cexpires <= 0 + if done { + op.cb(op) + avl.remove_node(&l.timeouts, node) + if !op.detached { + pool.put(&l.operation_pool, op) + } + continue + } + + break + } + + return nil +} + +_create_socket :: proc(l: ^Event_Loop, family: Address_Family, protocol: Socket_Protocol) -> (socket: Any_Socket, err: Create_Socket_Error) { + return nil, .Network_Unreachable +} + +_listen :: proc(socket: TCP_Socket, backlog := 1000) -> Listen_Error { + return .Network_Unreachable +} + +_exec :: proc(op: ^Operation) { + switch op.type { + case .Timeout: + _, _, err := avl.find_or_insert(&op.l.timeouts, op) + if err != nil { + panic("nbio: allocation failure") + } + return + case .Accept: + op.accept.err = .Network_Unreachable + case .Close: + op.close.err = .Unsupported + case .Dial: + op.dial.err = Dial_Error.Network_Unreachable + case .Recv: + switch _ in op.recv.socket { + case TCP_Socket: op.recv.err = TCP_Recv_Error.Network_Unreachable + case UDP_Socket: op.recv.err = UDP_Recv_Error.Network_Unreachable + case: op.recv.err = TCP_Recv_Error.Network_Unreachable + } + case .Send: + switch _ in op.send.socket { + case TCP_Socket: op.send.err = TCP_Send_Error.Network_Unreachable + case UDP_Socket: op.send.err = UDP_Send_Error.Network_Unreachable + case: op.send.err = TCP_Send_Error.Network_Unreachable + } + case .Send_File: + op.sendfile.err = .Network_Unreachable + case .Read: + op.read.err = .Unsupported + case .Write: + op.write.err = .Unsupported + case .Poll: + op.poll.result = .Error + case .Open: + op.open.err = .Unsupported + case .Stat: + op.stat.err = .Unsupported + case .None, ._Link_Timeout, ._Remove, ._Splice: + fallthrough + case: + unreachable() + } + + _, err := queue.push_back(&op.l.completed, op) + if err != nil { + panic("nbio: allocation failure") + } +} + +_remove :: proc(target: ^Operation) { + #partial switch target.type { + case .Timeout: + avl.remove_value(&target.l.timeouts, target) + if !target.detached { + pool.put(&target.l.operation_pool, target) + } + case: + target._impl.removed = true + } +} + +_open_sync :: proc(l: ^Event_Loop, path: string, dir: Handle, mode: File_Flags, perm: Permissions) -> (handle: Handle, err: FS_Error) { + return 0, FS_Error.Unsupported +} + +_associate_handle :: proc(handle: uintptr, l: ^Event_Loop) -> (Handle, Association_Error) { + return Handle(handle), nil +} + +_associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Error { + return nil +} + +_wake_up :: proc(l: ^Event_Loop) { +} diff --git a/core/nbio/impl_posix.odin b/core/nbio/impl_posix.odin new file mode 100644 index 000000000..e003f6ea3 --- /dev/null +++ b/core/nbio/impl_posix.odin @@ -0,0 +1,1403 @@ +#+build darwin, freebsd, openbsd, netbsd +#+private file +package nbio + +import "core:c" +import "core:container/pool" +import "core:container/queue" +import "core:mem" +import "core:net" +import "core:slice" +import "core:strings" +import "core:sys/posix" +import "core:time" +import kq "core:sys/kqueue" +import sa "core:container/small_array" + +@(private="package") +_FULLY_SUPPORTED :: true + +@(private="package") +_Event_Loop :: struct { + // kqueue does not permit multiple {ident, filter} pairs in the kqueue. + // We have to keep record of what we currently have in the kqueue, and if we get an operation + // that would be the same (ident, filter) pair we need to bundle the operations under one kevent. + submitted: map[Queue_Identifier]^Operation, + allocator: mem.Allocator, + // Holds all events we want to flush. Flushing is done each tick at which point this is emptied. + pending: sa.Small_Array(QUEUE_SIZE, kq.KEvent), + // Holds what should be in `pending` but didn't fit. + // When `pending`is flushed these are moved to `pending`. + overflow: queue.Queue(kq.KEvent), + // Contains all operations that were immediately completed in `exec`. + // These ops did not block so can call back next tick. + completed: queue.Queue(^Operation), + kqueue: kq.KQ, +} + +@(private="package") +_Handle :: posix.FD + +@(private="package") +_CWD :: posix.AT_FDCWD + +@(private="package") +MAX_RW :: mem.Gigabyte + +@(private="package") +_Operation :: struct { + // Linked list of operations that are bundled (same {ident, filter} pair) with this one. + next: ^Operation, + prev: ^Operation, + + flags: Operation_Flags, + result: i64, +} + +@(private="package") +_Accept :: struct {} + +@(private="package") +_Close :: struct {} + +@(private="package") +_Dial :: struct {} + +@(private="package") +_Recv :: struct { + small_bufs: [1][]byte, +} + +@(private="package") +_Send :: struct { + small_bufs: [1][]byte, +} + +@(private="package") +_Read :: struct {} + +@(private="package") +_Write :: struct {} + +@(private="package") +_Timeout :: struct {} + +@(private="package") +_Poll :: struct {} + +@(private="package") +_Send_File :: struct { + mapping: []byte, // `mmap`'d buffer (if native `sendfile` is not supported). +} + +@(private="package") +_Open :: struct {} + +@(private="package") +_Stat :: struct {} + +@(private="package") +_Splice :: struct {} + +@(private="package") +_Remove :: struct {} + +@(private="package") +_Link_Timeout :: struct {} + +@(private="package") +_init :: proc(l: ^Event_Loop, allocator: mem.Allocator) -> (rerr: General_Error) { + l.allocator = allocator + l.submitted.allocator = allocator + l.overflow.data.allocator = allocator + l.completed.data.allocator = allocator + + kqueue, err := kq.kqueue() + if err != nil { + return General_Error(posix.errno()) + } + + l.kqueue = kqueue + + sa.append(&l.pending, kq.KEvent{ + ident = IDENT_WAKE_UP, + filter = .User, + flags = {.Add, .Enable, .Clear}, + }) + + return nil +} + +@(private="package") +_destroy :: proc(l: ^Event_Loop) { + delete(l.submitted) + queue.destroy(&l.overflow) + queue.destroy(&l.completed) + posix.close(l.kqueue) +} + +@(private="package") +__tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> General_Error { + debug("tick") + + if n := queue.len(l.completed); n > 0 { + l.now = time.now() + debug("processing", n, "already completed") + + for _ in 0 ..< n { + op := queue.pop_front(&l.completed) + handle_completed(op) + } + + if pool.num_outstanding(&l.operation_pool) == 0 { return nil } + } + + if NBIO_DEBUG { + npending := sa.len(l.pending) + if npending > 0 { + debug("queueing", npending, "new events, there are", int(len(l.submitted)), "events pending") + } else { + debug("there are", int(len(l.submitted)), "events pending") + } + } + + ts_backing: posix.timespec + ts_pointer: ^posix.timespec // nil means forever. + if queue.len(l.completed) == 0 && len(l.submitted) > 0 { + if timeout >= 0 { + debug("timeout", timeout) + ts_backing = {tv_sec=posix.time_t(timeout/time.Second), tv_nsec=c.long(timeout%time.Second)} + ts_pointer = &ts_backing + } else { + debug("timeout forever") + } + } else { + debug("timeout 0, there is completed work pending") + ts_pointer = &ts_backing + } + + for { + results_buf: [128]kq.KEvent + results := kevent(l, results_buf[:], ts_pointer) or_return + + sa.clear(&l.pending) + for overflow in queue.pop_front_safe(&l.overflow) { + sa.append(&l.pending, overflow) or_break + } + + l.now = time.now() + + handle_results(l, results) + + if len(results) < len(results_buf) { + break + } + + debug("more events ready than our results buffer handles, getting more") + + // No timeout for the next call. + ts_backing = {} + ts_pointer = &ts_backing + } + + + return nil + + kevent :: proc(l: ^Event_Loop, buf: []kq.KEvent, ts: ^posix.timespec) -> ([]kq.KEvent, General_Error) { + for { + new_events, err := kq.kevent(l.kqueue, sa.slice(&l.pending), buf, ts) + #partial switch err { + case nil: + assert(new_events >= 0) + return buf[:new_events], nil + case .EINTR: + warn("kevent interrupted") + case: + warn("kevent error") + warn(string(posix.strerror(err))) + return nil, General_Error(err) + } + } + } + + is_internal_timeout :: proc(filter: kq.Filter, op: ^Operation) -> bool { + // A `.Timeout` that `.Has_Timeout` is a `remove()`'d timeout. + return filter == .Timer && (op.type != .Timeout || .Has_Timeout in op._impl.flags) + } + + handle_results :: proc(l: ^Event_Loop, results: []kq.KEvent) { + if len(results) > 0 { + debug(len(results), "events completed") + } + + // Mark all operations that have an event returned as not `.For_Kernel`. + // We have to do this right away, or we may process an operation as if we think the kernel is responsible. + for &event in results { + if ODIN_OS != .Darwin { + // On the BSDs, a `.Delete` that results in an `.Error` does not keep the `.Delete` flag in the result. + // We only have `udata == nil` when we do a delete, so we can add it back here to keep consistent. + if .Error in event.flags && event.udata == nil { + event.flags += {.Delete} + } + } + + if .Delete in event.flags { + continue + } + + if event.filter == .User && event.ident == IDENT_WAKE_UP { + continue + } + + op := cast(^Operation)event.udata + assert(op != nil) + assert(op.type != .None) + + if is_internal_timeout(event.filter, op) { + continue + } + + _, del := delete_key(&l.submitted, Queue_Identifier{ ident = event.ident, filter = event.filter }) + assert(del != nil) + + for next := op; next != nil; next = next._impl.next { + assert(.For_Kernel in next._impl.flags) + next._impl.flags -= {.For_Kernel} + } + } + + // If we get a timeout and an actual result, ignore the timeout. + // We have to do this after the previous loop so we know if the target op of a timeout was also completed. + // We have to do this before the next loop so we handle timeouts before their target ops. Otherwise the target could already be done. + for &event in results { + if .Delete in event.flags { + continue + } + + if event.filter == .User && event.ident == IDENT_WAKE_UP { + continue + } + + op := cast(^Operation)event.udata + if is_internal_timeout(event.filter, op) { + // If the actual event has also been returned this tick, we need to ignore the timeout to not get a uaf. + if .For_Kernel not_in op._impl.flags { + assert(.Has_Timeout in op._impl.flags) + op._impl.flags -= {.Has_Timeout} + + event.filter = kq.Filter(FILTER_IGNORE) + debug(op.type, "timed out but was also completed this tick, ignoring timeout") + } + + } + } + + for event in results { + if event.filter == kq.Filter(FILTER_IGNORE) { + // Previous loop told us to ignore. + continue + } + + if event.filter == .User && event.ident == IDENT_WAKE_UP { + debug("woken up") + continue + } + + if .Delete in event.flags { + assert(.Error in event.flags) + // Seems to happen when you delete at the same time or just after a close. + debug("delete error", int(event.data)) + if err := posix.Errno(event.data); err != .ENOENT && err != .EBADF { + warn("unexpected delete error") + warn(string(posix.strerror(err))) + } + continue + } + + op := cast(^Operation)event.udata + assert(op != nil) + assert(op.type != .None) + + // Timeout result that is a non-timeout op, meaning the operation timed out. + // Because of the previous loop we are sure that the target op is not also in this tick's results. + if is_internal_timeout(event.filter, op) { + debug("got timeout for", op.type) + + assert(.Error not_in event.flags) + + assert(.Has_Timeout in op._impl.flags) + op._impl.flags -= {.Has_Timeout} + + // Remove the actual operation. + timeout_and_delete(op) + handle_completed(op) + continue + } + + // Weird loop, but we need to get the next ptr before handle_completed(curr), curr is freed in handle_completed. + for curr, next := op, op._impl.next; curr != nil; curr, next = next, next == nil ? nil : next._impl.next { + if .Error in event.flags { curr._impl.flags += {.Error} } + if .EOF in event.flags { curr._impl.flags += {.EOF} } + curr._impl.result = event.data + handle_completed(curr) + } + } + } +} + +@(private="package") +_create_socket :: proc(l: ^Event_Loop, family: Address_Family, protocol: Socket_Protocol) -> (socket: Any_Socket, err: Create_Socket_Error) { + socket = net.create_socket(family, protocol) or_return + + berr := net.set_blocking(socket, false) + // This shouldn't be able to fail. + assert(berr == nil) + + return +} + +@(private="package") +_listen :: proc(socket: TCP_Socket, backlog := 1000) -> Listen_Error { + if res := posix.listen(posix.FD(socket), i32(backlog)); res != .OK { + return posix_listen_error() + } + return nil +} + +@(private="package") +_exec :: proc(op: ^Operation) { + assert(op.l == &_tls_event_loop) + + debug("exec", op.type) + + result: Op_Result + switch op.type { + case .Accept: + result = accept_exec(op) + case .Close: + // no-op + case .Timeout: + result = timeout_exec(op) + case .Dial: + result = dial_exec(op) + case .Recv: + result = recv_exec(op) + case .Send: + result = send_exec(op) + case .Send_File: + result = sendfile_exec(op) + case .Read: + result = read_exec(op) + case .Write: + result = write_exec(op) + case .Poll: + result = poll_exec(op) + assert(result == .Pending) + case .Open: + open_exec(op) + case .Stat: + stat_exec(op) + case .None, ._Link_Timeout, ._Remove, ._Splice: + fallthrough + case: + unreachable() + } + + switch result { + case .Pending: + // no-op, in kernel. + debug(op.type, "pending") + case .Done: + debug(op.type, "done immediately") + op._impl.flags += {.Done} + _, err := queue.push_back(&op.l.completed, op) // Got result, handle it next tick. + ensure(err == nil, "allocation failure") + } +} + +@(private="package") +_remove :: proc(target: ^Operation) { + assert(target != nil) + + debug("remove", target.type) + + if .Removed in target._impl.flags { + debug("already removed") + return + } + + target._impl.flags += {.Removed, .Has_Timeout} + link_timeout(target, target.l.now) +} + +@(private="package") +_open_sync :: proc(l: ^Event_Loop, path: string, dir: Handle, mode: File_Flags, perm: Permissions) -> (handle: Handle, err: FS_Error) { + if path == "" { + err = .Invalid_Argument + return + } + + cpath, cerr := strings.clone_to_cstring(path, l.allocator) + if cerr != nil { + err = .Allocation_Failed + return + } + defer delete(cpath, l.allocator) + + sys_flags := posix.O_Flags{.NOCTTY, .CLOEXEC, .NONBLOCK} + + if .Write in mode { + if .Read in mode { + sys_flags += {.RDWR} + } else { + sys_flags += {.WRONLY} + } + } + + if .Append in mode { sys_flags += {.APPEND} } + if .Create in mode { sys_flags += {.CREAT} } + if .Excl in mode { sys_flags += {.EXCL} } + if .Sync in mode { sys_flags += {.DSYNC} } + if .Trunc in mode { sys_flags += {.TRUNC} } + + handle = posix.openat(dir, cpath, sys_flags, transmute(posix.mode_t)posix._mode_t(transmute(u32)perm)) + if handle < 0 { + err = FS_Error(posix.errno()) + } + + return +} + +@(private="package") +_associate_handle :: proc(handle: uintptr, l: ^Event_Loop) -> (Handle, Association_Error) { + flags_ := posix.fcntl(posix.FD(handle), .GETFL) + if flags_ < 0 { + #partial switch errno := posix.errno(); errno { + case .EBADF: return -1, .Invalid_Handle + case: return -1, Association_Error(errno) + } + } + flags := transmute(posix.O_Flags)(flags_) + + if .NONBLOCK in flags { + return Handle(handle), nil + } + + if posix.fcntl(posix.FD(handle), .SETFL, flags) < 0 { + #partial switch errno := posix.errno(); errno { + case .EBADF: return -1, .Invalid_Handle + case: return -1, Association_Error(errno) + } + } + + return Handle(handle), nil +} + +@(private="package") +_associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Error { + if err := net.set_blocking(socket, false); err != nil { + switch err { + case .None: unreachable() + case .Network_Unreachable: return .Network_Unreachable + case .Invalid_Argument: return .Invalid_Handle + case .Unknown: fallthrough + case: return Association_Error(net.last_platform_error()) + } + } + + return nil +} + +@(private="package") +_wake_up :: proc(l: ^Event_Loop) { + ev := [1]kq.KEvent{ + { + ident = IDENT_WAKE_UP, + filter = .User, + flags = {}, + fflags = { + user = {.Trigger}, + }, + }, + } + t: posix.timespec + n, err := kq.kevent(l.kqueue, ev[:], nil, &t) + assert(err == nil) + assert(n == 0) +} + +// Start file private. + +// Max operations that can be enqueued per tick. +QUEUE_SIZE :: #config(ODIN_NBIO_QUEUE_SIZE, 256) + +FILTER_IGNORE :: kq.Filter(max(kq._Filter_Backing)) + +IDENT_WAKE_UP :: 69 + +Op_Result :: enum { + Done, + Pending, +} + +Operation_Flag :: enum { + Done, + Removed, + Has_Timeout, + For_Kernel, + EOF, + Error, +} +Operation_Flags :: bit_set[Operation_Flag] + +// Operations in the kqueue are uniquely identified using these 2 fields. You may not have more +// than one operation with the same identity submitted. +// So we need to keep track of the operations we have submitted, and if we add another, link it to a previously +// added operation. +Queue_Identifier :: struct { + filter: kq.Filter, + ident: uintptr, +} + +handle_completed :: proc(op: ^Operation) { + debug("handling", op.type) + + result: Op_Result + #partial switch op.type { + case .Accept: + result = accept_exec(op) + case .Dial: + result = dial_exec(op) + case .Send: + if send_exec(op) == .Done { + maybe_callback(op) + bufs_destroy(op.send.bufs, op.l.allocator) + cleanup(op) + } + return + case .Recv: + if recv_exec(op) == .Done { + maybe_callback(op) + bufs_destroy(op.recv.bufs, op.l.allocator) + cleanup(op) + } + return + case .Send_File: + result = sendfile_exec(op) + case .Read: + result = read_exec(op) + case .Write: + result = write_exec(op) + case .Poll: + result = poll_exec(op) + case .Open: + open_exec(op) + case .Close: + close_exec(op) + case .Timeout, .Stat: + // no-op + case: + unimplemented() + } + + if result == .Done { + maybe_callback(op) + cleanup(op) + } + + maybe_callback :: proc(op: ^Operation) { + if .Removed not_in op._impl.flags { + debug("done", op.type, "calling back") + op.cb(op) + } else { + debug("done but removed", op.type) + } + } + + bufs_destroy :: proc(bufs: [][]byte, allocator: mem.Allocator) { + if len(bufs) > 1 { + delete(bufs, allocator) + } + } + + cleanup :: proc(op: ^Operation) { + if .Has_Timeout in op._impl.flags { + remove_link_timeout(op) + } + if !op.detached { + pool.put(&op.l.operation_pool, op) + } + } +} + +@(require_results) +accept_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Accept) + + defer if op.accept.err != nil && op.accept.client > 0 { + posix.close(posix.FD(op.accept.client)) + } + + if op.accept.err != nil || .Done in op._impl.flags { + return .Done + } + + op.accept.client, op.accept.client_endpoint, op.accept.err = net.accept_tcp(op.accept.socket) + if op.accept.err != nil { + if op.accept.err == .Would_Block { + op.accept.err = nil + add_pending(op, .Read, uintptr(op.accept.socket)) + link_timeout(op, op.accept.expires) + return .Pending + } + + return .Done + } + + if err := net.set_blocking(op.accept.client, false); err != nil { + op.accept.err = posix_accept_error() + } + + return .Done +} + +@(require_results) +dial_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Dial) + + defer if op.dial.err != nil && op.dial.socket > 0 { + posix.close(posix.FD(op.dial.socket)) + } + + if op.dial.err != nil || .Done in op._impl.flags { + return .Done + } + + if op.dial.socket > 0 { + // We have already called connect, retrieve potential error number only. + err: posix.Errno + size := posix.socklen_t(size_of(err)) + posix.getsockopt(posix.FD(op.dial.socket), posix.SOL_SOCKET, .ERROR, &err, &size) + if err != nil { + posix.errno(err) + op.dial.err = posix_dial_error() + } + return .Done + } + + if op.dial.endpoint.port == 0 { + op.dial.err = .Port_Required + return .Done + } + + family := family_from_endpoint(op.dial.endpoint) + osocket, socket_err := _create_socket(op.l, family, .TCP) + if socket_err != nil { + op.dial.err = socket_err + return .Done + } + + op.dial.socket = osocket.(TCP_Socket) + + sockaddr := endpoint_to_sockaddr(op.dial.endpoint) + if posix.connect(posix.FD(op.dial.socket), (^posix.sockaddr)(&sockaddr), posix.socklen_t(sockaddr.ss_len)) != .OK { + if posix.errno() == .EINPROGRESS { + add_pending(op, .Write, uintptr(op.dial.socket)) + link_timeout(op, op.dial.expires) + return .Pending + } + + op.dial.err = posix_dial_error() + return .Done + } + + return .Done +} + +@(require_results) +poll_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Poll) + + if .Error in op._impl.flags { + #partial switch posix.Errno(op._impl.result) { + case .EBADF: op.poll.result = .Invalid_Argument + case: op.poll.result = .Error + } + return .Done + } + + if op._impl.result != 0 { + op.poll.result = .Ready + return .Done + } + + if op.poll.result != .Ready { + return .Done + } + + filter: kq.Filter + switch op.poll.event { + case .Receive: filter = .Read + case .Send: filter = .Write + } + + add_pending(op, filter, uintptr(net.any_socket_to_socket(op.poll.socket))) + link_timeout(op, op.poll.expires) + return .Pending +} + +close_exec :: proc(op: ^Operation) { + assert(op.type == .Close) + + if op.close.err != nil || op.close.subject == nil { + return + } + + fd: posix.FD + switch subject in op.close.subject { + case TCP_Socket: fd = posix.FD(subject) + case UDP_Socket: fd = posix.FD(subject) + case Handle: fd = posix.FD(subject) + case: op.close.err = .Invalid_Argument; return + } + + if posix.close(fd) != .OK { + op.close.err = FS_Error(posix.errno()) + } +} + +@(require_results) +send_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Send) + + if op.send.err != nil || .Done in op._impl.flags { + return .Done + } + + total: int + bufs := slice.advance_slices(op.send.bufs, op.send.sent) + bufs, total = constraint_bufs_to_max_rw(op.send.bufs) + + sock, n := sendv(op.send.socket, bufs, op.send.endpoint) + if n < 0 { + if posix.errno() == .EWOULDBLOCK { + if !op.send.all && op.send.sent > 0 { + return .Done + } + + add_pending(op, .Write, uintptr(sock)) + link_timeout(op, op.send.expires) + return .Pending + } + + switch _ in op.send.socket { + case TCP_Socket: op.send.err = posix_tcp_send_error() + case UDP_Socket: op.send.err = posix_udp_send_error() + } + return .Done + } + + op.send.sent += n + + if op.send.sent < total { + return send_exec(op) + } + + return .Done + + sendv :: proc(socket: Any_Socket, bufs: [][]byte, to: net.Endpoint) -> (posix.FD, int) { + assert(len(bufs) < int(max(i32))) + + msg: posix.msghdr + msg.msg_iov = cast([^]posix.iovec)raw_data(bufs) + msg.msg_iovlen = i32(len(bufs)) + + toaddr: posix.sockaddr_storage + fd: posix.FD + switch sock in socket { + case TCP_Socket: + fd = posix.FD(sock) + case UDP_Socket: + fd = posix.FD(sock) + toaddr = endpoint_to_sockaddr(to) + msg.msg_name = &toaddr + msg.msg_namelen = posix.socklen_t(toaddr.ss_len) + } + + return fd, posix.sendmsg(fd, &msg, {.NOSIGNAL}) + } +} + +@(require_results) +recv_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Recv) + + if op.recv.err != nil || .Done in op._impl.flags { + return .Done + } + + total: int + bufs := slice.advance_slices(op.recv.bufs, op.recv.received) + bufs, total = constraint_bufs_to_max_rw(op.recv.bufs) + + _, is_tcp := op.recv.socket.(net.TCP_Socket) + + sock, n := recvv(op.recv.socket, bufs, &op.recv.source) + if n < 0 { + if posix.errno() == .EWOULDBLOCK { + if is_tcp && !op.recv.all && op.recv.received > 0 { + return .Done + } + + add_pending(op, .Read, uintptr(sock)) + link_timeout(op, op.recv.expires) + return .Pending + } + + if is_tcp { + op.recv.err = posix_tcp_recv_error() + } else { + op.recv.err = posix_udp_recv_error() + } + + return .Done + } + + assert(is_tcp || op.recv.received == 0) + op.recv.received += n + + if is_tcp && n != 0 && op.recv.received < total { + return recv_exec(op) + } + + return .Done + + recvv :: proc(socket: Any_Socket, bufs: [][]byte, from: ^Endpoint) -> (fd: posix.FD, n: int) { + assert(len(bufs) < int(max(i32))) + + msg: posix.msghdr + msg.msg_iov = cast([^]posix.iovec)raw_data(bufs) + msg.msg_iovlen = i32(len(bufs)) + + udp: bool + fromaddr: posix.sockaddr_storage + switch sock in socket { + case TCP_Socket: + fd = posix.FD(sock) + case UDP_Socket: + fd = posix.FD(sock) + udp = true + msg.msg_name = &fromaddr + msg.msg_namelen = posix.socklen_t(size_of(fromaddr)) + } + + n = posix.recvmsg(fd, &msg, {.NOSIGNAL}) + if n >= 0 && udp { + from^ = sockaddr_to_endpoint(&fromaddr) + } + + return + } +} + +@(require_results) +sendfile_exec :: proc(op: ^Operation) -> (result: Op_Result) { + assert(op.type == .Send_File) + + defer if result == .Done && op.sendfile._impl.mapping != nil { + posix.munmap(raw_data(op.sendfile._impl.mapping), len(op.sendfile._impl.mapping)) + } + + if op.sendfile.err != nil || .Done in op._impl.flags { + return .Done + } + + when ODIN_OS == .NetBSD || ODIN_OS == .OpenBSD { + // Doesn't have `sendfile`, emulate it with `mmap` + normal `send`. + return sendfile_exec_emulated(op) + } else { + return sendfile_exec_native(op) + + @(require_results) + sendfile_exec_native :: proc(op: ^Operation) -> Op_Result { + nbytes := op.sendfile.nbytes + assert(nbytes != 0) + if nbytes == SEND_ENTIRE_FILE { + nbytes = 0 // special value for entire file. + + // If we want progress updates we need nbytes to be the actual size, or the user + // won't be able to check `sent < nbytes` to know if it's the final callback. + if op.sendfile.progress_updates { + stat: posix.stat_t + if posix.fstat(op.sendfile.file, &stat) != .OK { + op.sendfile.err = FS_Error(posix.errno()) + return .Done + } + op.sendfile.nbytes = int(stat.st_size - posix.off_t(op.sendfile.offset)) + } + } else { + nbytes -= op.sendfile.sent + } + + n, ok := posix_sendfile(op.sendfile.file, op.sendfile.socket, op.sendfile.offset + op.sendfile.sent, nbytes) + + assert(n >= 0) + op.sendfile.sent += n + + if !ok { + op.sendfile.err = posix_tcp_send_error() + if op.sendfile.err == .Would_Block { + op.sendfile.err = nil + if op.sendfile.progress_updates { op.cb(op) } + add_pending(op, .Write, uintptr(op.sendfile.socket)) + link_timeout(op, op.sendfile.expires) + return .Pending + } + + return .Done + } + + assert(op.sendfile.nbytes == SEND_ENTIRE_FILE || op.sendfile.sent == op.sendfile.nbytes) + return .Done + } + } + + @(require_results) + sendfile_exec_emulated :: proc(op: ^Operation) -> Op_Result { + if op.sendfile.nbytes == SEND_ENTIRE_FILE { + stat: posix.stat_t + if posix.fstat(op.sendfile.file, &stat) != .OK { + op.sendfile.err = FS_Error(posix.errno()) + return .Done + } + op.sendfile.nbytes = int(stat.st_size - posix.off_t(op.sendfile.offset)) + } + + if op.sendfile._impl.mapping == nil { + addr := posix.mmap(nil, uint(op.sendfile.nbytes), {.READ}, {}, op.sendfile.file, posix.off_t(op.sendfile.offset)) + if addr == posix.MAP_FAILED { + op.sendfile.err = FS_Error(posix.errno()) + return .Done + } + op.sendfile._impl.mapping = ([^]byte)(addr)[:op.sendfile.nbytes] + } + + n := posix.send( + posix.FD(op.sendfile.socket), + raw_data(op.sendfile._impl.mapping)[op.sendfile.sent:], + uint(min(MAX_RW, op.sendfile.nbytes - op.sendfile.sent)), + {.NOSIGNAL}, + ) + if n < 0 { + op.sendfile.err = posix_tcp_send_error() + if op.sendfile.err == .Would_Block { + op.sendfile.err = nil + add_pending(op, .Write, uintptr(op.sendfile.socket)) + link_timeout(op, op.sendfile.expires) + return .Pending + } + + return .Done + } + + op.sendfile.sent += n + + if op.sendfile.sent < op.sendfile.nbytes { + if op.sendfile.progress_updates { op.cb(op) } + return sendfile_exec_emulated(op) + } + + return .Done + } +} + +@(require_results) +read_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Read) + + if op.read.err != nil || .Done in op._impl.flags { + return .Done + } + + to_read := op.read.buf[op.read.read:] + to_read = to_read[:min(MAX_RW, len(to_read))] + + res := posix.pread(op.read.handle, raw_data(to_read), len(to_read), posix.off_t(op.read.offset) + posix.off_t(op.read.read)) + if res < 0 { + errno := posix.errno() + if errno == .EWOULDBLOCK { + if !op.read.all && op.read.read > 0 { + return .Done + } + + add_pending(op, .Read, uintptr(op.read.handle)) + link_timeout(op, op.read.expires) + return .Pending + } + + op.read.err = FS_Error(errno) + return .Done + } else if res == 0 { + if op.read.read == 0 { + op.read.err = .EOF + } + return .Done + } + + op.read.read += res + + if op.read.read < len(op.read.buf) { + return read_exec(op) + } + + return .Done +} + +@(require_results) +write_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Write) + + if op.write.err != nil || .Done in op._impl.flags { + return .Done + } + + to_write := op.write.buf[op.write.written:] + to_write = to_write[:min(MAX_RW, len(to_write))] + + res := posix.pwrite(op.write.handle, raw_data(to_write), len(to_write), posix.off_t(op.write.offset) + posix.off_t(op.write.written)) + if res < 0 { + errno := posix.errno() + if errno == .EWOULDBLOCK { + if !op.write.all && op.write.written > 0 { + return .Done + } + + add_pending(op, .Write, uintptr(op.write.handle)) + link_timeout(op, op.write.expires) + return .Pending + } + + op.write.err = FS_Error(errno) + return .Done + } + + op.write.written += res + + if op.write.written < len(op.write.buf) { + return write_exec(op) + } + + return .Done +} + +timeout_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Timeout) + + if op.timeout.duration <= 0 { + return .Done + } + + op.l.submitted[Queue_Identifier{ ident = uintptr(op), filter = .Timer }] = op + + op._impl.flags += {.For_Kernel} + + append_pending(op.l, kq.KEvent { + ident = uintptr(op), + filter = .Timer, + flags = {.Add, .Enable, .One_Shot}, + fflags = { + timer = kq.TIMER_FLAGS_NSECONDS + {.Absolute}, + }, + data = op.l.now._nsec + i64(op.timeout.duration), + udata = op, + }) + return .Pending +} + +open_exec :: proc(op: ^Operation) { + assert(op.type == .Open) + + if op.open.err != nil && op.open.handle > 0 { + posix.close(op.open.handle) + return + } + + if .Done in op._impl.flags { + return + } + + op.open.handle, op.open.err = _open_sync(op.l, op.open.path, op.open.dir, op.open.mode, op.open.perm) +} + +stat_exec :: proc(op: ^Operation) { + assert(op.type == .Stat) + + stat: posix.stat_t + if posix.fstat(op.stat.handle, &stat) != .OK { + op.stat.err = FS_Error(posix.errno()) + return + } + + op.stat.type = .Undetermined + switch { + case posix.S_ISBLK(stat.st_mode) || posix.S_ISCHR(stat.st_mode): + op.stat.type = .Device + case posix.S_ISDIR(stat.st_mode): + op.stat.type = .Directory + case posix.S_ISFIFO(stat.st_mode) || posix.S_ISSOCK(stat.st_mode): + op.stat.type = .Pipe_Or_Socket + case posix.S_ISLNK(stat.st_mode): + op.stat.type = .Symlink + case posix.S_ISREG(stat.st_mode): + op.stat.type = .Regular + } + + op.stat.size = i64(stat.st_size) +} + +add_pending :: proc(op: ^Operation, filter: kq.Filter, ident: uintptr) { + debug("adding pending", op.type) + op._impl.flags += {.For_Kernel} + + _, val, just_inserted, err := map_entry(&op.l.submitted, Queue_Identifier{ ident = ident, filter = filter }) + ensure(err == nil, "allocation failure") + if just_inserted { + val^ = op + + append_pending(op.l, kq.KEvent { + filter = filter, + ident = ident, + flags = {.Add, .Enable, .One_Shot}, + udata = op, + }) + } else { + debug("already have this operation on the kqueue, bundling it") + + last := val^ + for last._impl.next != nil { + last = last._impl.next + } + last._impl.next = op + op._impl.prev = last + } +} + +append_pending :: #force_inline proc(l: ^Event_Loop, ev: kq.KEvent) { + if !sa.append(&l.pending, ev) { + warn("queue is full, adding to overflow, should QUEUE_SIZE be increased?") + _, err := queue.append(&l.overflow, ev) + ensure(err == nil, "allocation failure") + } +} + +link_timeout :: proc(op: ^Operation, expires: time.Time) { + if expires == {} { + return + } + + debug(op.type, "times out at", expires) + + op._impl.flags += {.Has_Timeout} + + append_pending(op.l, kq.KEvent { + ident = uintptr(op), + filter = .Timer, + flags = {.Add, .Enable, .One_Shot}, + fflags = { + timer = kq.TIMER_FLAGS_NSECONDS + {.Absolute}, + }, + data = expires._nsec, + udata = op, + }) +} + +remove_link_timeout :: proc(op: ^Operation) { + debug("removing timeout of", op.type) + assert(.Has_Timeout in op._impl.flags) + + append_pending(op.l, kq.KEvent { + ident = uintptr(op), + filter = .Timer, + flags = {.Delete, .Disable, .One_Shot}, + }) +} + +timeout_and_delete :: proc(target: ^Operation) { + filter: kq.Filter + ident: uintptr + switch target.type { + case .Accept: + target.accept.err = .Timeout + filter = .Read + ident = uintptr(target.accept.socket) + case .Dial: + target.dial.err = Dial_Error.Timeout + filter = .Write + ident = uintptr(target.dial.socket) + case .Read: + target.read.err = .Timeout + filter = .Read + ident = uintptr(target.read.handle) + case .Write: + target.write.err = .Timeout + filter = .Write + ident = uintptr(target.write.handle) + case .Recv: + switch sock in target.recv.socket { + case TCP_Socket: + target.recv.err = TCP_Recv_Error.Timeout + ident = uintptr(sock) + case UDP_Socket: + target.recv.err = UDP_Recv_Error.Timeout + ident = uintptr(sock) + } + filter = .Read + case .Send: + switch sock in target.send.socket { + case TCP_Socket: + target.send.err = TCP_Send_Error.Timeout + ident = uintptr(sock) + case UDP_Socket: + target.send.err = UDP_Send_Error.Timeout + ident = uintptr(sock) + } + filter = .Write + case .Send_File: + target.send.err = TCP_Send_Error.Timeout + filter = .Write + ident = uintptr(target.sendfile.socket) + case .Poll: + target.poll.result = .Timeout + ident = uintptr(net.any_socket_to_socket(target.poll.socket)) + + switch target.poll.event { + case .Receive: filter = .Read + case .Send: filter = .Write + } + + case .Timeout: + ident = uintptr(target) + filter = .Timer + + case .Close: + target.close.err = .Timeout + return + + case .Open: + target.open.err = .Timeout + return + + case .Stat: + target.stat.err = .Timeout + return + + case .None, ._Link_Timeout, ._Remove, ._Splice: + return + } + + // If there are other ops linked to this kevent, don't remove it. + if target._impl.next != nil || target._impl.prev != nil { + debug("removing target by pulling it out of the linked list, other ops depend on the kevent") + assert(filter != .Timer) + + if target._impl.next != nil { + target._impl.next._impl.prev = target._impl.prev + } + + if target._impl.prev != nil { + target._impl.prev._impl.next = target._impl.next + } else { + debug("target was the head of the list, updating map to point at new head") + + _, vp, _, err := map_entry(&target.l.submitted, Queue_Identifier{ ident = ident, filter = filter }) + ensure(err == nil, "allocation failure") + assert(vp^ == target) + vp^ = target._impl.next + + ev := kq.KEvent{ + filter = filter, + ident = ident, + flags = {.Add, .Enable, .One_Shot}, + udata = target._impl.next, + } + if !sa.append(&target.l.pending, ev) { + warn("just removed the head operation of a list of multiple, and the queue is full, have to force this update through inefficiently") + // This has to happen the next time we submit or we could have udata pointing wrong. + // Very inefficient but probably never hit. + + // Makes kevent return a receipt for our addition, so we don't take any new events from it. + // This forces .Error to be added and data being 0 means it's added. + ev.flags += {.Receipt} + + timeout: posix.timespec + n, err := kq.kevent(target.l.kqueue, ([^]kq.KEvent)(&ev)[:1], ([^]kq.KEvent)(&ev)[:1], &timeout) + assert(n == 1) + assert(err == nil) + + // The receipt flag makes this occur on the event. + assert(.Error in ev.flags) + assert(ev.data == 0) + } + } + + } else if .For_Kernel in target._impl.flags { + debug("adding delete event") + + _, dval := delete_key(&target.l.submitted, Queue_Identifier{ ident = ident, filter = filter }) + assert(dval != nil) + + append_pending(target.l, kq.KEvent{ + ident = ident, + filter = filter, + flags = {.Delete, .Disable, .One_Shot}, + }) + } else { + debug("remove without delete event, because target is not in kernel") + } +} + +@(require_results) +endpoint_to_sockaddr :: proc(ep: Endpoint) -> (sockaddr: posix.sockaddr_storage) { + switch a in ep.address { + case IP4_Address: + (^posix.sockaddr_in)(&sockaddr)^ = posix.sockaddr_in { + sin_port = u16be(ep.port), + sin_addr = transmute(posix.in_addr)a, + sin_family = .INET, + sin_len = size_of(posix.sockaddr_in), + } + return + case IP6_Address: + (^posix.sockaddr_in6)(&sockaddr)^ = posix.sockaddr_in6 { + sin6_port = u16be(ep.port), + sin6_addr = transmute(posix.in6_addr)a, + sin6_family = .INET6, + sin6_len = size_of(posix.sockaddr_in6), + } + return + } + unreachable() +} + +@(require_results) +sockaddr_to_endpoint :: proc(native_addr: ^posix.sockaddr_storage) -> (ep: Endpoint) { + #partial switch native_addr.ss_family { + case .INET: + addr := cast(^posix.sockaddr_in)native_addr + port := int(addr.sin_port) + ep = Endpoint { + address = IP4_Address(transmute([4]byte)addr.sin_addr), + port = port, + } + case .INET6: + addr := cast(^posix.sockaddr_in6)native_addr + port := int(addr.sin6_port) + ep = Endpoint { + address = IP6_Address(transmute([8]u16be)addr.sin6_addr), + port = port, + } + case: + panic("native_addr is neither IP4 or IP6 address") + } + return +} diff --git a/core/nbio/impl_posix_darwin.odin b/core/nbio/impl_posix_darwin.odin new file mode 100644 index 000000000..7ec64c2df --- /dev/null +++ b/core/nbio/impl_posix_darwin.odin @@ -0,0 +1,29 @@ +#+private +package nbio + +import "core:net" +import "core:sys/posix" + +foreign import lib "system:System" + +posix_sendfile :: proc(fd: Handle, s: TCP_Socket, offset, nbytes: int) -> (sent: int, ok := true) { + foreign lib { + @(link_name="sendfile") + _posix_sendfile :: proc (fd, s: posix.FD, offset: posix.off_t, len: ^posix.off_t, hdtr: rawptr, flags: i32) -> posix.result --- + } + + len := posix.off_t(nbytes) + if _posix_sendfile(posix.FD(fd), posix.FD(s), posix.off_t(offset), &len, nil, 0) != .OK { + ok = false + } + sent = int(len) + return +} + +posix_listen_error :: net._listen_error +posix_accept_error :: net._accept_error +posix_dial_error :: net._dial_error +posix_tcp_send_error :: net._tcp_send_error +posix_udp_send_error :: net._udp_send_error +posix_tcp_recv_error :: net._tcp_recv_error +posix_udp_recv_error :: net._udp_recv_error diff --git a/core/nbio/impl_posix_freebsd.odin b/core/nbio/impl_posix_freebsd.odin new file mode 100644 index 000000000..50089510b --- /dev/null +++ b/core/nbio/impl_posix_freebsd.odin @@ -0,0 +1,52 @@ +#+private +package nbio + +import "core:net" +import "core:sys/posix" +import "core:sys/freebsd" + +foreign import lib "system:c" + +// TODO: rewrite freebsd implementation to use `sys/freebsd` instead of `sys/posix`. + +posix_sendfile :: proc(fd: Handle, s: TCP_Socket, offset, nbytes: int) -> (sent: int, ok := true) { + foreign lib { + @(link_name="sendfile") + _posix_sendfile :: proc (fd, s: posix.FD, offset: posix.off_t, nbytes: uint, hdtr: rawptr, sbytes: ^posix.off_t, flags: i32) -> posix.result --- + } + + len: posix.off_t + if _posix_sendfile(posix.FD(fd), posix.FD(s), posix.off_t(offset), uint(nbytes), nil, &len, 0) != .OK { + ok = false + } + sent = int(len) + return +} + +posix_listen_error :: proc() -> Listen_Error { + return net._listen_error(freebsd.Errno(posix.errno())) +} + +posix_accept_error :: proc() -> Accept_Error { + return net._accept_error(freebsd.Errno(posix.errno())) +} + +posix_dial_error :: proc() -> Dial_Error { + return net._dial_error(freebsd.Errno(posix.errno())) +} + +posix_tcp_send_error :: proc() -> TCP_Send_Error { + return net._tcp_send_error(freebsd.Errno(posix.errno())) +} + +posix_udp_send_error :: proc() -> UDP_Send_Error { + return net._udp_send_error(freebsd.Errno(posix.errno())) +} + +posix_tcp_recv_error :: proc() -> TCP_Recv_Error { + return net._tcp_recv_error(freebsd.Errno(posix.errno())) +} + +posix_udp_recv_error :: proc() -> UDP_Recv_Error { + return net._udp_recv_error(freebsd.Errno(posix.errno())) +} diff --git a/core/nbio/impl_posix_netbsd.odin b/core/nbio/impl_posix_netbsd.odin new file mode 100644 index 000000000..a0e2652f4 --- /dev/null +++ b/core/nbio/impl_posix_netbsd.odin @@ -0,0 +1,12 @@ +#+private +package nbio + +import "core:net" + +posix_listen_error :: net._listen_error +posix_accept_error :: net._accept_error +posix_dial_error :: net._dial_error +posix_tcp_send_error :: net._tcp_send_error +posix_udp_send_error :: net._udp_send_error +posix_tcp_recv_error :: net._tcp_recv_error +posix_udp_recv_error :: net._udp_recv_error diff --git a/core/nbio/impl_posix_openbsd.odin b/core/nbio/impl_posix_openbsd.odin new file mode 100644 index 000000000..a0e2652f4 --- /dev/null +++ b/core/nbio/impl_posix_openbsd.odin @@ -0,0 +1,12 @@ +#+private +package nbio + +import "core:net" + +posix_listen_error :: net._listen_error +posix_accept_error :: net._accept_error +posix_dial_error :: net._dial_error +posix_tcp_send_error :: net._tcp_send_error +posix_udp_send_error :: net._udp_send_error +posix_tcp_recv_error :: net._tcp_recv_error +posix_udp_recv_error :: net._udp_recv_error diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin new file mode 100644 index 000000000..7f98c7490 --- /dev/null +++ b/core/nbio/impl_windows.odin @@ -0,0 +1,1738 @@ +#+private file +package nbio + +import "base:intrinsics" + +import "core:container/avl" +import "core:container/pool" +import "core:container/queue" +import "core:mem" +import "core:net" +import "core:slice" +import "core:strings" +import "core:time" +import "core:path/filepath" + +import win "core:sys/windows" + +@(private="package") +_FULLY_SUPPORTED :: true + +@(private="package") +_Event_Loop :: struct { + iocp: win.HANDLE, + allocator: mem.Allocator, + timeouts: avl.Tree(^Operation), + completed: queue.Queue(^Operation), +} + +@(private="package") +_Handle :: distinct uintptr + +@(private="package") +_CWD :: ~_Handle(99) + +@(private="package") +MAX_RW :: mem.Gigabyte + +@(private="package") +_Operation :: struct { + over: win.OVERLAPPED, + timeout: ^Operation, +} +#assert(offset_of(Operation, _impl) == 0, "needs to be the first field to work") +#assert(offset_of(_Operation, over) == 0, "needs to be the first field to work") + +@(private="package") +_Accept :: struct { + // Space that gets the local and remote address written into it. + addrs: [(size_of(win.sockaddr_in6)+16)*2]byte, +} + +@(private="package") +_Close :: struct {} + +@(private="package") +_Dial :: struct { + addr: win.SOCKADDR_STORAGE_LH, +} + +@(private="package") +_Read :: struct {} + +@(private="package") +_Write :: struct {} + +@(private="package") +_Send :: struct { + small_bufs: [1][]byte, +} + +@(private="package") +_Recv :: struct { + source: win.SOCKADDR_STORAGE_LH, + source_len: win.INT, + small_bufs: [1][]byte, + flags: win.DWORD, +} + +@(private="package") +_Timeout :: struct { + expires: time.Time, + target: ^Operation, +} + +@(private="package") +_Poll :: struct { + wait_handle: win.HANDLE, +} + +@(private="package") +_Send_File :: struct {} + +@(private="package") +_Remove :: struct {} + +@(private="package") +_Link_Timeout :: struct {} + +@(private="package") +_Splice :: struct {} + +@(private="package") +_Open :: struct {} + +@(private="package") +_Stat :: struct {} + +@(private="package") +_init :: proc(l: ^Event_Loop, alloc: mem.Allocator) -> (err: General_Error) { + l.allocator = alloc + + mem_err: mem.Allocator_Error + if mem_err = queue.init(&l.completed, allocator = alloc); mem_err != nil { + err = .Allocation_Failed + return + } + defer if err != nil { queue.destroy(&l.completed) } + + avl.init(&l.timeouts, timeouts_cmp, alloc) + + win.ensure_winsock_initialized() + + l.iocp = win.CreateIoCompletionPort(win.INVALID_HANDLE_VALUE, nil, 0, 1) + if l.iocp == nil { + err = General_Error(win.GetLastError()) + return + } + + return + + timeouts_cmp :: #force_inline proc(a, b: ^Operation) -> slice.Ordering { + switch { + case a.timeout._impl.expires._nsec < b.timeout._impl.expires._nsec: + return .Less + case a.timeout._impl.expires._nsec > b.timeout._impl.expires._nsec: + return .Greater + case uintptr(a) < uintptr(b): + return .Less + case uintptr(a) > uintptr(b): + return .Greater + case: + assert(a == b) + return .Equal + } + } +} + +@(private="package") +_destroy :: proc(l: ^Event_Loop) { + queue.destroy(&l.completed) + avl.destroy(&l.timeouts) + win.CloseHandle(l.iocp) +} + +@(private="package") +__tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { + debug("tick") + + l.now = time.now() + next_timeout := check_timeouts(l) + + // Prevent infinite loop when callback adds to completed by storing length. + n := queue.len(l.completed) + if n > 0 { + for _ in 0 ..< n { + op := queue.pop_front(&l.completed) + handle_completed(op) + } + } + + if pool.num_outstanding(&l.operation_pool) == 0 { return nil } + + actual_timeout := win.INFINITE + if queue.len(l.completed) > 0 { + actual_timeout = 0 + } else if timeout >= 0 { + actual_timeout = win.DWORD(timeout / time.Millisecond) + } + if nt, ok := next_timeout.?; ok { + actual_timeout = min(actual_timeout, win.DWORD(nt / time.Millisecond)) + } + + for { + QUEUE_SIZE :: 256 + events: [QUEUE_SIZE]win.OVERLAPPED_ENTRY + entries_removed: win.ULONG + if !win.GetQueuedCompletionStatusEx(l.iocp, &events[0], len(events), &entries_removed, actual_timeout, false) { + if terr := win.GetLastError(); terr != win.WAIT_TIMEOUT { + err = General_Error(terr) + return + } + } + + if actual_timeout > 0 { + // We may have just waited some time, lets update the current time. + l.now = time.now() + } + + if entries_removed > 0 { + debug(int(entries_removed), "operations were completed") + } + + for event in events[:entries_removed] { + if event.lpCompletionKey == COMPLETION_KEY_WAKE_UP { continue } + assert(event.lpOverlapped != nil) + + // This is actually pointing at the Completion.over field, but because it is the first field + // It is also a valid pointer to the Completion struct. + op := (^Operation)(event.lpOverlapped) + handle_completed(op) + } + + if entries_removed < QUEUE_SIZE { + break + } + + // `events` was filled up, get more. + debug("GetQueuedCompletionStatusEx filled entire events buffer, getting more") + actual_timeout = 0 + } + + return nil + + check_timeouts :: proc(l: ^Event_Loop) -> (expires: Maybe(time.Duration)) { + curr := l.now + + if avl.len(&l.timeouts) == 0 { + return + } + + debug(avl.len(&l.timeouts), "timeouts", "threshold", curr) + + iter := avl.iterator(&l.timeouts, .Forward) + for node in avl.iterator_next(&iter) { + op := node.value + cexpires := time.diff(curr, op.timeout._impl.expires) + + debug("expires after", cexpires) + + removed := op._impl.timeout == (^Operation)(REMOVED) + done := cexpires <= 0 + if removed { + debug("timeout removed!") + } else if done { + debug("timeout done!") + handle_completed(op) + } + if removed || done { + avl.remove_node(&l.timeouts, node) + continue + } + + expires = cexpires + debug("first timeout in the future is at", op.timeout._impl.expires, "after", cexpires) + return + } + + return + } + + handle_completed :: proc(op: ^Operation) { + debug("handling", op.type) + + if op._impl.timeout == (^Operation)(REMOVED) { + debug(op.type, "was removed") + + // Set an error, and call the internal callback. + // This way resources are cleaned up properly, for example the result socket for dial. + // If we just do nothing it will be leaked. + + if op._impl.over.Internal == nil { + // There is no error from the kernel, set one ourselves. + // This needs to be an NTSTATUS code, not a win32 error number. + STATUS_REQUEST_ABORTED :: 0xC023000C + op._impl.over.Internal = (^win.c_ulong)(uintptr(STATUS_REQUEST_ABORTED)) + } + } + + result := Op_Result.Done + switch op.type { + case .Read: + result = read_callback(op) + case .Recv: + result = recv_callback(op) + if result == .Done { + maybe_callback(op) + if len(op.recv.bufs) > 1 { + delete(op.recv.bufs, op.l.allocator) + } + cleanup(op) + return + } + case .Write: + result = write_callback(op) + case .Send: + result = send_callback(op) + if result == .Done { + maybe_callback(op) + if len(op.send.bufs) > 1 { + delete(op.send.bufs, op.l.allocator) + } + cleanup(op) + return + } + case .Send_File: + result = sendfile_callback(op) + case .Accept: + accept_callback(op) + case .Dial: + dial_callback(op) + case .Poll: + poll_callback(op) + case .Timeout, .Open, .Stat, .Close: + // no-op. + case .None, ._Link_Timeout, ._Remove, ._Splice: + fallthrough + case: + unreachable() + } + + if result == .Pending { + assert(op._impl.timeout != (^Operation)(REMOVED)) + debug(op.type, "pending") + return + } + + maybe_callback(op) + cleanup(op) + + maybe_callback :: proc(op: ^Operation) { + if op._impl.timeout == (^Operation)(REMOVED) { + debug(op.type, "done but removed") + } else { + debug(op.type, "done") + op.cb(op) + + if op._impl.timeout != nil { + debug("cancelling timeout of", op.type) + op._impl.timeout.timeout._impl.target = nil + _remove(op._impl.timeout) + } + } + } + + cleanup :: proc(op: ^Operation) { + if !op.detached { + pool.put(&op.l.operation_pool, op) + } + } + } + +} + +@(private="package") +_exec :: proc(op: ^Operation) { + assert(op.l == &_tls_event_loop) + + result: Op_Result + switch op.type { + case .Accept: result = accept_exec(op) + case .Close: close_exec(op); result = .Done + case .Dial: result = dial_exec(op) + case .Recv: result = recv_exec(op) + case .Send: result = send_exec(op) + case .Send_File: result = sendfile_exec(op) + case .Read: result = read_exec(op) + case .Write: result = write_exec(op) + case .Timeout: result = timeout_exec(op) + case .Poll: result = poll_exec(op) + case .Open: open_exec(op); result = .Done + case .Stat: stat_exec(op); result = .Done + case .None, ._Link_Timeout, ._Remove, ._Splice: + unreachable() + } + + switch result { + case .Pending: + // no-op, in kernel. + debug("exec", op.type, "pending") + case .Done: + debug("exec", op.type, "done immediately") + _, err := queue.append(&op.l.completed, op) // Got result, handle it next tick. + ensure(err == nil, "allocation failure") + } +} + +@(private="package") +_open_sync :: proc(l: ^Event_Loop, name: string, dir: Handle, mode: File_Flags, perm: Permissions) -> (handle: Handle, err: FS_Error) { + if len(name) == 0 { + err = .Invalid_Argument + return + } + + dir := dir + + is_abs := filepath.is_abs(name) + is_cwd: bool + cwd_path: win.wstring + if !is_abs && dir == CWD { + is_cwd = true + + cwd_len := win.GetCurrentDirectoryW(0, nil) + assert(cwd_len > 0) + cwd_buf, cwd_err := make([]u16, cwd_len, l.allocator) + if cwd_err != nil { return INVALID_HANDLE, .Allocation_Failed } + cwd_len = win.GetCurrentDirectoryW(cwd_len, raw_data(cwd_buf)) + assert(int(cwd_len) == len(cwd_buf)-1) + cwd_path = win.wstring(raw_data(cwd_buf)) + + dir = Handle(win.CreateFileW( + cwd_path, + win.GENERIC_READ, + win.FILE_SHARE_READ|win.FILE_SHARE_WRITE, + nil, + win.OPEN_EXISTING, + win.FILE_FLAG_BACKUP_SEMANTICS, + nil, + )) + if dir == INVALID_HANDLE { + err = FS_Error(win.GetLastError()) + return + } + } + defer if is_cwd { + delete(cwd_path, l.allocator) + win.CloseHandle(win.HANDLE(dir)) + } + + path, was_alloc := _normalize_path(name, l.allocator) + defer if was_alloc { delete(path, l.allocator) } + + wpath := win.utf8_to_utf16(path, l.allocator) + defer delete(wpath, l.allocator) + + if path == "" || wpath == nil { + return INVALID_HANDLE, .Allocation_Failed + } + + path_len := len(wpath) * 2 + if path_len > int(max(u16)) { + err = .Invalid_Argument + return + } + + access: u32 + switch mode & {.Read, .Write} { + case {.Read}: access = win.FILE_GENERIC_READ + case {.Write}: access = win.FILE_GENERIC_WRITE + case {.Read, .Write}: access = win.FILE_GENERIC_READ | win.FILE_GENERIC_WRITE + } + + if .Create in mode { + access |= win.FILE_GENERIC_WRITE + } + if .Append in mode { + access &~= win.FILE_GENERIC_WRITE + access |= win.FILE_APPEND_DATA + } + share_mode := u32(win.FILE_SHARE_READ | win.FILE_SHARE_WRITE) + + create_mode: u32 = win.FILE_OPEN + switch { + case mode & {.Create, .Excl} == {.Create, .Excl}: + create_mode = win.FILE_CREATE + case mode & {.Create, .Trunc} == {.Create, .Trunc}: + create_mode = win.FILE_OVERWRITE_IF + case mode & {.Create} == {.Create}: + create_mode = win.FILE_OPEN_IF + case mode & {.Trunc} == {.Trunc}: + create_mode = win.FILE_OVERWRITE + } + + attrs: u32 = win.FILE_ATTRIBUTE_NORMAL + + if .Write_User not_in perm { + attrs = win.FILE_ATTRIBUTE_READONLY + if create_mode == win.FILE_OVERWRITE_IF { + // NOTE(bill): Open has just asked to create a file in read-only mode. + // If the file already exists, to make it akin to a *nix open call, + // the call preserves the existing permissions. + + h: win.HANDLE + io_status: win.IO_STATUS_BLOCK + status := win.NtCreateFile( + &h, + access, + &{ + Length = size_of(win.OBJECT_ATTRIBUTES), + RootDirectory = is_abs ? nil : win.HANDLE(dir), + ObjectName = &{ + Length = u16(path_len), + MaximumLength = u16(path_len), + Buffer = raw_data(wpath), + }, + }, + &io_status, + nil, + win.FILE_ATTRIBUTE_NORMAL, + share_mode, + win.FILE_OVERWRITE, + 0, + nil, + 0, + ) + syserr := win.System_Error(win.RtlNtStatusToDosError(status)) + #partial switch syserr { + case .FILE_NOT_FOUND, .BAD_NETPATH, .PATH_NOT_FOUND: + // File does not exists, create the file + case .SUCCESS: + association_err: Association_Error + handle, association_err = _associate_handle(uintptr(h), l) + // This shouldn't fail, we just created this file, with correct flags. + assert(association_err != nil) + return + case: + err = FS_Error(syserr) + return + } + } + } + + h: win.HANDLE + io_status: win.IO_STATUS_BLOCK + status := win.NtCreateFile( + &h, + access, + &{ + Length = size_of(win.OBJECT_ATTRIBUTES), + RootDirectory = is_abs ? nil : win.HANDLE(dir), + ObjectName = &{ + Length = u16(path_len), + MaximumLength = u16(path_len), + Buffer = raw_data(wpath), + }, + }, + &io_status, + nil, + attrs, + share_mode, + create_mode, + 0, + nil, + 0, + ) + syserr := win.System_Error(win.RtlNtStatusToDosError(status)) + #partial switch syserr { + case .SUCCESS: + association_err: Association_Error + handle, association_err = _associate_handle(uintptr(h), l) + // This shouldn't fail, we just created this file, with correct flags. + assert(association_err == nil) + return + case: + err = FS_Error(syserr) + return + } + + @(require_results) + _normalize_path :: proc(path: string, allocator := context.allocator) -> (fixed: string, allocated: bool) { + // An UNC path or relative, just replace slashes. + if strings.has_prefix(path, `\\`) || !filepath.is_abs(path) { + return strings.replace_all(path, `/`, `\`) + } + + path_buf, err := make([]byte, len(PREFIX)+len(path)+1, allocator) + if err != nil { return } + defer if !allocated { delete(path_buf, allocator) } + + PREFIX :: `\??` + copy(path_buf, PREFIX) + n := len(path) + r, w := 0, len(PREFIX) + for r < n { + switch { + case filepath.is_separator(path[r]): + r += 1 + case path[r] == '.' && (r+1 == n || filepath.is_separator(path[r+1])): + // \.\ + r += 1 + case r+1 < n && path[r] == '.' && path[r+1] == '.' && (r+2 == n || filepath.is_separator(path[r+2])): + // Skip \..\ paths + return path, false + case: + path_buf[w] = '\\' + w += 1 + for r < n && !filepath.is_separator(path[r]) { + path_buf[w] = path[r] + r += 1 + w += 1 + } + } + } + + // Root directories require a trailing \ + if w == len(`\\?\c:`) { + path_buf[w] = '\\' + w += 1 + } + + allocated = true + fixed = string(path_buf[:w]) + return + } +} + +@(private="package") +_listen :: proc(socket: TCP_Socket, backlog := 1000) -> (err: Listen_Error) { + if res := win.listen(win.SOCKET(socket), i32(backlog)); res == win.SOCKET_ERROR { + err = net._listen_error() + } + return +} + +@(private="package") +_create_socket :: proc( + l: ^Event_Loop, + family: Address_Family, + protocol: Socket_Protocol, +) -> ( + socket: Any_Socket, + err: Create_Socket_Error, +) { + socket = net.create_socket(family, protocol) or_return + + association_err := _associate_socket(socket, l) + // Network unreachable would've happened on creation too. + // Not possible to associate or invalid handle can't happen because we controlled creation. + assert(association_err == nil) + + return +} + +@(private="package") +_remove :: proc(target: ^Operation) { + debug("remove", target.type) + + if target._impl.timeout == (^Operation)(REMOVED) { + return + } + + if target._impl.timeout != nil { + _remove(target._impl.timeout) + } + + target._impl.timeout = (^Operation)(REMOVED) + + switch target.type { + case .Poll: + win.UnregisterWaitEx(target.poll._impl.wait_handle, nil) + target.poll._impl.wait_handle = nil + + ok := win.PostQueuedCompletionStatus( + target.l.iocp, + 0, + 0, + &target._impl.over, + ) + ensure(ok == true, "unexpected PostQueuedCompletionStatus error") + return + + case .Timeout: + if avl.remove_value(&target.l.timeouts, target) { + debug("removed timeout directly") + if !target.detached { + pool.put(&target.l.operation_pool, target) + } + } else { + debug("timeout is in completed queue, will be picked up there") + } + return + + case .Close, .Open, .Stat: + // Synchronous ops, picked up in handler. + return + + case .Accept, .Dial, .Read, .Recv, .Send, .Write, .Send_File: + if is_pending(target._impl.over) { + handle := operation_handle(target) + assert(handle != win.INVALID_HANDLE) + ok := win.CancelIoEx(handle, &target._impl.over) + if !ok { + err := win.System_Error(win.GetLastError()) + #partial switch err { + case .NOT_FOUND: + debug("Remove: Cancel", target.type, "NOT_FOUND") + case .INVALID_HANDLE: + debug("Remove: Cancel", target.type, "INVALID_HANDLE") // Likely closed already. + case: + assert(false, "unexpected CancelIoEx error") + } + } + } + + case ._Remove: + panic("can't remove a removal") + + case .None, ._Splice, ._Link_Timeout: + fallthrough + case: + unreachable() + } +} + +@(private="package") +_associate_handle :: proc(handle: uintptr, l: ^Event_Loop) -> (Handle, Association_Error) { + handle_iocp := win.CreateIoCompletionPort(win.HANDLE(handle), l.iocp, 0, 0) + if handle_iocp != l.iocp { + return INVALID_HANDLE, .Not_Possible_To_Associate + } + + cmode: byte + cmode |= win.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS + cmode |= win.FILE_SKIP_SET_EVENT_ON_HANDLE + ok := win.SetFileCompletionNotificationModes(win.HANDLE(handle), cmode) + + // This is an assertion because I don't believe this can happen when we just successfully + // called `CreateIoCompletionPort`. + assert(ok == true, "unexpected SetFileCompletionNotificationModes error") + + return Handle(handle), nil +} + +@(private="package") +_associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Error { + if err := net.set_blocking(socket, false); err != nil { + switch err { + case .None: unreachable() + case .Network_Unreachable: return .Network_Unreachable + case .Invalid_Argument: return .Invalid_Handle + case .Unknown: fallthrough + case: return Association_Error(net.last_platform_error()) + } + } + + _, err := _associate_handle(uintptr(net.any_socket_to_socket(socket)), l) + return err +} + +@(private="package") +_wake_up :: proc(l: ^Event_Loop) { + win.PostQueuedCompletionStatus( + l.iocp, + 0, + COMPLETION_KEY_WAKE_UP, + nil, + ) +} + +// Start file private. + +REMOVED :: rawptr(max(uintptr)-1) + +INVALID_HANDLE :: Handle(win.INVALID_HANDLE) + +COMPLETION_KEY_WAKE_UP :: 69 + +Op_Result :: enum { + Done, + Pending, +} + +operation_handle :: proc(op: ^Operation) -> win.HANDLE { + switch op.type { + case .Accept: return win.HANDLE(uintptr(op.accept.socket)) + case .Close: + switch fd in op.close.subject { + case TCP_Socket: return win.HANDLE(uintptr(fd)) + case UDP_Socket: return win.HANDLE(uintptr(fd)) + case Handle: return win.HANDLE(uintptr(fd)) + case: + unreachable() + } + case .Dial: return win.HANDLE(uintptr(op.dial.socket)) + case .Read: return win.HANDLE(op.read.handle) + case .Write: return win.HANDLE(op.write.handle) + case .Recv: return win.HANDLE(uintptr(net.any_socket_to_socket(op.recv.socket))) + case .Send: return win.HANDLE(uintptr(net.any_socket_to_socket(op.send.socket))) + case .Send_File: return win.HANDLE(uintptr(net.any_socket_to_socket(op.sendfile.socket))) + case .Poll: return win.HANDLE(uintptr(net.any_socket_to_socket(op.poll.socket))) + case .Stat: return win.HANDLE(uintptr(op.stat.handle)) + + case .Timeout, .Open, ._Splice, ._Link_Timeout, ._Remove, .None: + return win.INVALID_HANDLE + case: + unreachable() + } +} + +close_exec :: proc(op: ^Operation) { + assert(op.type == .Close) + + switch h in op.close.subject { + case Handle: + if !win.CloseHandle(win.HANDLE(h)) { + op.close.err = FS_Error(win.GetLastError()) + } + case TCP_Socket: + if win.closesocket(win.SOCKET(h)) != win.NO_ERROR { + op.close.err = FS_Error(win.WSAGetLastError()) + } + case UDP_Socket: + if win.closesocket(win.SOCKET(h)) != win.NO_ERROR { + op.close.err = FS_Error(win.WSAGetLastError()) + } + case: + op.close.err = .Invalid_Argument + return + } +} + +@(require_results) +accept_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Accept) + assert(is_fresh(op._impl.over)) + + family := Address_Family.IP4 + { + ep, err := bound_endpoint(op.accept.socket) + if err != nil { + op.accept.err = net._accept_error() + return .Done + } + + if _, is_ip6 := ep.address.(IP6_Address); is_ip6 { + family = .IP6 + } + } + + client, err := _create_socket(op.l, family, .TCP) + if err != nil { + op.accept.err = net._accept_error() + return .Done + } + + + op.accept.client = client.(TCP_Socket) + + received: win.DWORD + if !win.AcceptEx( + win.SOCKET(op.accept.socket), + win.SOCKET(op.accept.client), + &op.accept._impl.addrs, + 0, + size_of(win.sockaddr_in6) + 16, + size_of(win.sockaddr_in6) + 16, + &received, + &op._impl.over, + ) { + if op._impl.over.Internal == nil { + op.accept.err = net._accept_error() + } else if is_pending(op._impl.over) { + link_timeout(op, op.accept.expires) + return .Pending + } + } + + return .Done +} + +accept_callback :: proc(op: ^Operation) { + assert(op.type == .Accept) + + defer if op.accept.err != nil { + win.closesocket(win.SOCKET(op.accept.client)) + } + + if op.accept.err != nil { + return + } + + _, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + local_addr: ^win.sockaddr + local_addr_len: win.INT + remote_addr: ^win.sockaddr + remote_addr_len: win.INT + win.GetAcceptExSockaddrs( + &op.accept._impl.addrs, + 0, + size_of(win.sockaddr_in6) + 16, + size_of(win.sockaddr_in6) + 16, + &local_addr, + &local_addr_len, + &remote_addr, + &remote_addr_len, + ) + + assert(remote_addr_len <= size_of(win.SOCKADDR_STORAGE_LH)) + op.accept.client_endpoint = sockaddr_to_endpoint((^win.SOCKADDR_STORAGE_LH)(remote_addr)) + + // enables getsockopt, setsockopt, getsockname, getpeername, etc. + win.setsockopt(win.SOCKET(op.accept.client), win.SOL_SOCKET, win.SO_UPDATE_ACCEPT_CONTEXT, nil, 0) + + case .OPERATION_ABORTED: + // This error could also happen when the user calls close on the socket. + if check_timed_out(op, op.accept.expires) { + op.accept.err = Accept_Error.Timeout + return + } + fallthrough + + case: + win.SetLastError(win.DWORD(err)) + op.accept.err = net._accept_error() + } +} + +@(require_results) +dial_exec :: proc(op: ^Operation) -> (result: Op_Result) { + assert(op.type == .Dial) + assert(is_fresh(op._impl.over)) + + if op.dial.endpoint.port == 0 { + op.dial.err = .Port_Required + return .Done + } + + family := family_from_endpoint(op.dial.endpoint) + osocket, socket_err := _create_socket(op.l, family, .TCP) + if socket_err != nil { + op.dial.err = socket_err + return .Done + } + + op.dial.socket = osocket.(TCP_Socket) + + sockaddr := endpoint_to_sockaddr({IP6_Any if family == .IP6 else net.IP4_Any, 0}) + res := win.bind(win.SOCKET(op.dial.socket), &sockaddr, size_of(sockaddr)) + if res < 0 { + op.dial.err = net._bind_error() + win.closesocket(win.SOCKET(op.dial.socket)) + return .Done + } + + op.dial._impl.addr = endpoint_to_sockaddr(op.dial.endpoint) + + connect_ex: win.LPFN_CONNECTEX + load_socket_fn(win.SOCKET(op.dial.socket), win.WSAID_CONNECTEX, &connect_ex) + + transferred: win.DWORD + if !connect_ex( + win.SOCKET(op.dial.socket), + &op.dial._impl.addr, + size_of(op.dial._impl.addr), + nil, + 0, + &transferred, + &op._impl.over, + ) { + if op._impl.over.Internal == nil { + op.dial.err = net._dial_error() + } else if is_pending(op._impl.over) { + link_timeout(op, op.dial.expires) + return .Pending + } + + return .Done + } + + return .Done +} + +dial_callback :: proc(op: ^Operation) { + assert(op.type == .Dial) + + defer if op.dial.err != nil { + win.closesocket(win.SOCKET(op.dial.socket)) + } + + if op.dial.err != nil { + return + } + + _, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + // enables getsockopt, setsockopt, getsockname, getpeername, etc. + win.setsockopt(win.SOCKET(op.dial.socket), win.SOL_SOCKET, win.SO_UPDATE_CONNECT_CONTEXT, nil, 0) + + case .OPERATION_ABORTED: + op.dial.err = Dial_Error.Timeout + + case: + win.SetLastError(win.DWORD(err)) + op.dial.err = net._dial_error() + } +} + +@(require_results) +read_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Read) + op._impl.over = {} // Can be called multiple times. + + op._impl.over.OffsetFull = u64(op.read.offset) + u64(op.read.read) + + to_read := op.read.buf[op.read.read:] + + read: win.DWORD + if !win.ReadFile( + win.HANDLE(op.read.handle), + raw_data(to_read), + win.DWORD(min(len(to_read), MAX_RW)), + &read, + &op._impl.over, + ) { + assert(read == 0) + if op._impl.over.Internal == nil { + op.read.err = FS_Error(win.GetLastError()) + } else if is_pending(op._impl.over) { + link_timeout(op, op.read.expires) + return .Pending + } + } + + assert(uintptr(read) == uintptr(op._impl.over.InternalHigh)) + return .Done +} + +@(require_results) +read_callback :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Read) + + if op.read.err != nil { + return .Done + } + + n, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + case .OPERATION_ABORTED: + // This error could also happen when the user calls close on the handle. + if check_timed_out(op, op.read.expires) { + op.read.err = .Timeout + return .Done + } + fallthrough + case .HANDLE_EOF: + if op.read.read == 0 { + op.read.err = .EOF + return .Done + } + case: + op.read.err = FS_Error(err) + return .Done + } + + op.read.read += n + if op.read.all && op.read.read < len(op.read.buf) { + switch read_exec(op) { + case .Done: return read_callback(op) + case .Pending: return .Pending + } + } + + return .Done +} + +@(require_results) +write_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Write) + op._impl.over = {} // Can be called multiple times. + + op._impl.over.OffsetFull = u64(op.write.offset) + u64(op.write.written) + + to_write := op.write.buf[op.write.written:] + + written: win.DWORD + if !win.WriteFile( + win.HANDLE(op.write.handle), + raw_data(to_write), + win.DWORD(min(len(to_write), MAX_RW)), + &written, + &op._impl.over, + ) { + assert(written == 0) + if op._impl.over.Internal == nil { + op.write.err = FS_Error(win.GetLastError()) + } else if is_pending(op._impl.over) { + link_timeout(op, op.write.expires) + return .Pending + } + } + + assert(uintptr(written) == uintptr(op._impl.over.InternalHigh)) + return .Done +} + +@(require_results) +write_callback :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Write) + + if op.write.err != nil { + return .Done + } + + n, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + case .OPERATION_ABORTED: + // This error could also happen when the user calls close on the handle. + if check_timed_out(op, op.write.expires) { + op.write.err = .Timeout + return .Done + } + fallthrough + case: + op.write.err = FS_Error(err) + return .Done + } + + op.write.written += n + if op.write.all && op.write.written < len(op.write.buf) { + switch write_exec(op) { + case .Done: return write_callback(op) + case .Pending: return .Pending + } + } + + return .Done +} + +@(require_results) +recv_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Recv) + op._impl.over = {} // Can be called multiple times. + + if op.recv.err != nil { + return .Done + } + + bufs := slice.advance_slices(op.recv.bufs, op.recv.received) + bufs, _ = constraint_bufs_to_max_rw(op.recv.bufs) + + win_bufs := ([^]win.WSABUF)(intrinsics.alloca(size_of(win.WSABUF) * len(bufs), align_of(win.WSABUF))) + for buf, i in bufs { + assert(i64(len(buf)) < i64(max(u32))) + win_bufs[i] = {len=u32(len(buf)), buf=raw_data(buf)} + } + + status: win.c_int + switch sock in op.recv.socket { + case TCP_Socket: + status = win.WSARecv( + win.SOCKET(sock), + win_bufs, + u32(len(bufs)), + nil, + &op.recv._impl.flags, + win.LPWSAOVERLAPPED(&op._impl.over), + nil, + ) + case UDP_Socket: + op.recv._impl.source_len = size_of(op.recv._impl.source) + status = win.WSARecvFrom( + win.SOCKET(sock), + win_bufs, + u32(len(bufs)), + nil, + &op.recv._impl.flags, + (^win.sockaddr)(&op.recv._impl.source), + &op.recv._impl.source_len, + win.LPWSAOVERLAPPED(&op._impl.over), + nil, + ) + } + + if status == win.SOCKET_ERROR { + if op._impl.over.Internal == nil { + switch _ in op.recv.socket { + case TCP_Socket: op.recv.err = net._tcp_recv_error() + case UDP_Socket: op.recv.err = net._udp_recv_error() + } + } else if is_pending(op._impl.over) { + link_timeout(op, op.recv.expires) + return .Pending + } + } + + return .Done +} + +@(require_results) +recv_callback :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Recv) + + if op.recv.err != nil { + return .Done + } + + n, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + case .OPERATION_ABORTED: + // This error could also happen when the user calls close on the socket. + if check_timed_out(op, op.recv.expires) { + switch _ in op.recv.socket { + case TCP_Socket: op.recv.err = net.TCP_Recv_Error.Timeout + case UDP_Socket: op.recv.err = net.UDP_Recv_Error.Timeout + } + return .Done + } + fallthrough + case: + win.SetLastError(win.DWORD(err)) + switch _ in op.recv.socket { + case TCP_Socket: op.recv.err = net._tcp_recv_error() + case UDP_Socket: op.recv.err = net._udp_recv_error() + } + return .Done + } + + op.recv.received += n + + switch sock in op.recv.socket { + case TCP_Socket: + if n == 0 { + // Connection closed. + return .Done + } + + if op.recv.all { + total: int + for buf in op.recv.bufs { + total += len(buf) + } + + if op.recv.received < total { + switch recv_exec(op) { + case .Done: return recv_callback(op) + case .Pending: return .Pending + } + } + } + + case UDP_Socket: + assert(op.recv._impl.source_len > 0) + op.recv.source = sockaddr_to_endpoint(&op.recv._impl.source) + } + + return .Done +} + +@(require_results) +send_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Send) + op._impl.over = {} // Can be called multiple times. + + if op.send.err != nil { + return .Done + } + + bufs := slice.advance_slices(op.send.bufs, op.send.sent) + bufs, _ = constraint_bufs_to_max_rw(op.send.bufs) + + win_bufs := ([^]win.WSABUF)(intrinsics.alloca(size_of(win.WSABUF) * len(bufs), align_of(win.WSABUF))) + for buf, i in bufs { + assert(i64(len(buf)) < i64(max(u32))) + win_bufs[i] = {len=u32(len(buf)), buf=raw_data(buf)} + } + + status: win.c_int + switch sock in op.send.socket { + case TCP_Socket: + status = win.WSASend( + win.SOCKET(sock), + win_bufs, + u32(len(bufs)), + nil, + 0, + win.LPWSAOVERLAPPED(&op._impl.over), + nil, + ) + case UDP_Socket: + addr := endpoint_to_sockaddr(op.send.endpoint) + status = win.WSASendTo( + win.SOCKET(sock), + win_bufs, + u32(len(bufs)), + nil, + 0, + (^win.sockaddr)(&addr), + size_of(addr), + win.LPWSAOVERLAPPED(&op._impl.over), + nil, + ) + } + + if status == win.SOCKET_ERROR { + if op._impl.over.Internal == nil { + switch _ in op.send.socket { + case TCP_Socket: op.send.err = net._tcp_send_error() + case UDP_Socket: op.send.err = net._udp_send_error() + } + } else if is_pending(op._impl.over) { + link_timeout(op, op.send.expires) + return .Pending + } + } + + return .Done +} + +@(require_results) +send_callback :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Send) + + if op.send.err != nil { + return .Done + } + + n, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + case .OPERATION_ABORTED: + // This error could also happen when the user calls close on the socket. + if check_timed_out(op, op.send.expires) { + switch _ in op.send.socket { + case TCP_Socket: op.send.err = net.TCP_Send_Error.Timeout + case UDP_Socket: op.send.err = net.UDP_Send_Error.Timeout + } + return .Done + } + fallthrough + case: + win.SetLastError(win.DWORD(err)) + switch _ in op.send.socket { + case TCP_Socket: op.send.err = net._tcp_send_error() + case UDP_Socket: op.send.err = net._udp_send_error() + } + return .Done + } + + op.send.sent += n + + if op.send.all { + total: int + for buf in op.send.bufs { + total += len(buf) + } + + if op.send.sent < total { + switch send_exec(op) { + case .Done: return send_callback(op) + case .Pending: return .Pending + } + } + } + + return .Done +} + +@(require_results) +sendfile_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Send_File) + op._impl.over = {} // Can be called multiple times. + + if op.sendfile.nbytes == SEND_ENTIRE_FILE { + type, size, stat_err := stat(op.sendfile.file) + if stat_err != nil { + op.sendfile.err = stat_err + return .Done + } + + op.sendfile.nbytes = int(size - i64(op.sendfile.offset)) + if type != .Regular || op.sendfile.nbytes <= 0 { + op.sendfile.err = FS_Error.Invalid_Argument + return .Done + } + } + + op._impl.over.OffsetFull = u64(op.sendfile.offset) + u64(op.sendfile.sent) + + if !win.TransmitFile( + win.SOCKET(op.sendfile.socket), + win.HANDLE(op.sendfile.file), + u32(min(op.sendfile.nbytes - op.sendfile.sent, MAX_RW)), + 0, + &op._impl.over, + nil, + 0, + ) { + if op._impl.over.Internal == nil { + op.sendfile.err = net._tcp_send_error() + } else if is_pending(op._impl.over) { + link_timeout(op, op.sendfile.expires) + return .Pending + } + } + + return .Done +} + +@(require_results) +sendfile_callback :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Send_File) + + if op.sendfile.err != nil { + return .Done + } + + n, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + case .OPERATION_ABORTED: + // This error could also happen when the user calls close on the socket. + if check_timed_out(op, op.sendfile.expires) { + op.sendfile.err = TCP_Send_Error.Timeout + return .Done + } + fallthrough + case: + win.SetLastError(win.DWORD(err)) + op.sendfile.err = net._tcp_send_error() + return .Done + } + + op.sendfile.sent += n + if op.sendfile.sent < op.sendfile.nbytes { + switch sendfile_exec(op) { + case .Done: + return sendfile_callback(op) + case .Pending: + if op.sendfile.progress_updates { op.cb(op) } + return .Pending + } + } + + return .Done +} + +@(require_results) +poll_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Poll) + + events: i32 = win.FD_CLOSE + switch op.poll.event { + case .Send: events |= win.FD_WRITE|win.FD_CONNECT + case .Receive: events |= win.FD_READ|win.FD_ACCEPT + case: + op.poll.result = .Invalid_Argument + return .Done + } + + op._impl.over.hEvent = win.WSACreateEvent() + if win.WSAEventSelect( + win.SOCKET(net.any_socket_to_socket(op.poll.socket)), + op._impl.over.hEvent, + events, + ) != 0 { + #partial switch win.System_Error(win.GetLastError()) { + case .WSAEINVAL, .WSAENOTSOCK: op.poll.result = .Invalid_Argument + case: op.poll.result = .Error + } + return .Done + } + + timeout := win.INFINITE + if op.poll.expires != {} { + diff := max(0, time.diff(op.l.now, op.poll.expires)) + timeout = win.DWORD(diff / time.Millisecond) + } + + ok := win.RegisterWaitForSingleObject( + &op.poll._impl.wait_handle, + op._impl.over.hEvent, + wait_callback, + op, + timeout, + win.WT_EXECUTEINWAITTHREAD|win.WT_EXECUTEONLYONCE, + ) + ensure(ok == true, "unexpected RegisterWaitForSingleObject error") + + return .Pending + + wait_callback :: proc "system" (lpParameter: win.PVOID, TimerOrWaitFired: win.BOOLEAN) { + op := (^Operation)(lpParameter) + assert_contextless(op.type == .Poll) + + if TimerOrWaitFired { + op.poll.result = .Timeout + } + + ok := win.PostQueuedCompletionStatus( + op.l.iocp, + 0, + 0, + &op._impl.over, + ) + ensure_contextless(ok == true, "unexpected PostQueuedCompletionStatus error") + } +} + +poll_callback :: proc(op: ^Operation) { + assert(op.type == .Poll) + + if op._impl.over.hEvent != nil { + win.WSACloseEvent(op._impl.over.hEvent) + } + + if op.poll._impl.wait_handle != nil { + win.UnregisterWaitEx(op.poll._impl.wait_handle, nil) + } + + if op.poll.result != nil { + return + } + + _, err := get_result(op._impl.over) + #partial switch err { + case .SUCCESS: + case: + op.poll.result = .Error + } +} + +open_exec :: proc(op: ^Operation) { + assert(op.type == .Open) + // No async way of doing this. + op.open.handle, op.open.err = _open_sync(op.l, op.open.path, op.open.dir, op.open.mode, op.open.perm) +} + +stat_exec :: proc(op: ^Operation) { + assert(op.type == .Stat) + // No async way of doing this. + op.stat.type, op.stat.size, op.stat.err = stat(op.stat.handle) +} + +@(require_results) +timeout_exec :: proc(op: ^Operation) -> Op_Result { + assert(op.type == .Timeout) + + if op.timeout.duration <= 0 { + return .Done + } else { + op.timeout._impl.expires = time.time_add(now(), op.timeout.duration) + node, inserted, alloc_err := avl.find_or_insert(&op.l.timeouts, op) + assert(alloc_err == nil) + assert(inserted) + assert(node != nil) + return .Pending + } +} + +link_timeout :: proc(op: ^Operation, expires: time.Time) { + if expires == {} { + return + } + + timeout_op := _prep(op.l, internal_timeout_callback, .Timeout) + timeout_op.timeout._impl.expires = expires + timeout_op.timeout._impl.target = op + op._impl.timeout = timeout_op + + node, inserted, alloc_err := avl.find_or_insert(&op.l.timeouts, timeout_op) + assert(alloc_err == nil) + assert(inserted) + assert(node != nil) +} + +internal_timeout_callback :: proc(op: ^Operation) { + assert(op.type == .Timeout) + + target := op.timeout._impl.target + assert(target != nil) + assert(target._impl.timeout == op) + target._impl.timeout = nil + + #partial switch target.type { + case .Poll: + target.poll.result = .Timeout + target.cb(target) + _remove(target) + return + } + + if is_pending(target._impl.over) { + handle := operation_handle(target) + assert(handle != win.INVALID_HANDLE) + ok := win.CancelIoEx(handle, &target._impl.over) + if !ok { + err := win.System_Error(win.GetLastError()) + #partial switch err { + case .NOT_FOUND: + debug("Timeout: Cancel", target.type, "NOT_FOUND") + case .INVALID_HANDLE: + debug("Timeout: Cancel", target.type, "INVALID_HANDLE") + case: + assert(false, "unexpected CancelIoEx error") + } + } + } +} + +stat :: proc(handle: Handle) -> (type: File_Type, size: i64, err: FS_Error) { + info: win.FILE_STANDARD_INFO + if !win.GetFileInformationByHandleEx(win.HANDLE(handle), .FileStandardInfo, &info, size_of(info)) { + err = FS_Error(win.GetLastError()) + return + } + + size = i64(info.EndOfFile) + + if info.Directory { + type = .Directory + return + } + + switch win.GetFileType(win.HANDLE(handle)) { + case win.FILE_TYPE_PIPE: + type = .Pipe_Or_Socket + return + case win.FILE_TYPE_CHAR: + type = .Device + return + case win.FILE_TYPE_DISK: + type = .Regular + // Don't return, might be a symlink. + case: + type = .Undetermined + return + } + + + tag_info: win.FILE_ATTRIBUTE_TAG_INFO + if !win.GetFileInformationByHandleEx(win.HANDLE(handle), .FileAttributeTagInfo, &tag_info, size_of(tag_info)) { + return + } + + if ( + (tag_info.FileAttributes & win.FILE_ATTRIBUTE_REPARSE_POINT != 0) && + ( + (tag_info.ReparseTag == win.IO_REPARSE_TAG_SYMLINK) || + (tag_info.ReparseTag == win.IO_REPARSE_TAG_MOUNT_POINT) + ) + ) { + type = .Symlink + } + + return +} + +STATUS_PENDING :: rawptr(uintptr(0x103)) + +is_pending :: proc(over: win.OVERLAPPED) -> bool { + return over.Internal == STATUS_PENDING +} + +is_fresh :: proc(over: win.OVERLAPPED) -> bool { + return over.Internal == nil && over.InternalHigh == nil +} + +get_result :: proc(over: win.OVERLAPPED) -> (n: int, err: win.System_Error) { + assert(!is_pending(over)) + + n = int(uintptr(over.InternalHigh)) + + if over.Internal != nil { + err = win.System_Error(win.RtlNtStatusToDosError(win.NTSTATUS(uintptr(over.Internal)))) + assert(!is_incomplete(err)) + } + return +} + +is_incomplete :: proc(err: win.System_Error) -> bool { + #partial switch err { + case .WSAEWOULDBLOCK, .IO_PENDING, .IO_INCOMPLETE, .WSAEALREADY: return true + case: return false + } +} + +endpoint_to_sockaddr :: proc(ep: Endpoint) -> (sockaddr: win.SOCKADDR_STORAGE_LH) { + switch a in ep.address { + case IP4_Address: + (^win.sockaddr_in)(&sockaddr)^ = win.sockaddr_in { + sin_port = u16be(win.USHORT(ep.port)), + sin_addr = transmute(win.in_addr)a, + sin_family = u16(win.AF_INET), + } + return + case IP6_Address: + (^win.sockaddr_in6)(&sockaddr)^ = win.sockaddr_in6 { + sin6_port = u16be(win.USHORT(ep.port)), + sin6_addr = transmute(win.in6_addr)a, + sin6_family = u16(win.AF_INET6), + } + return + } + unreachable() +} + +sockaddr_to_endpoint :: proc(native_addr: ^win.SOCKADDR_STORAGE_LH) -> (ep: Endpoint) { + switch native_addr.ss_family { + case u16(win.AF_INET): + addr := cast(^win.sockaddr_in)native_addr + port := int(addr.sin_port) + ep = Endpoint { + address = IP4_Address(transmute([4]byte)addr.sin_addr), + port = port, + } + case u16(win.AF_INET6): + addr := cast(^win.sockaddr_in6)native_addr + port := int(addr.sin6_port) + ep = Endpoint { + address = IP6_Address(transmute([8]u16be)addr.sin6_addr), + port = port, + } + case: + panic("native_addr is neither IP4 or IP6 address") + } + return +} + +load_socket_fn :: proc(subject: win.SOCKET, guid: win.GUID, fn: ^$T) { + over: win.OVERLAPPED + + guid := guid + bytes: u32 + rc := win.WSAIoctl( + subject, + win.SIO_GET_EXTENSION_FUNCTION_POINTER, + &guid, + size_of(guid), + fn, + size_of(fn), + &bytes, + // NOTE: I don't think loading a socket fn ever blocks, + // but I would like to hit an assert if it does, so we do pass it. + &over, + nil, + ) + assert(rc != win.SOCKET_ERROR) + assert(bytes == size_of(fn^)) +} + +check_timed_out :: proc(op: ^Operation, expires: time.Time) -> bool { + return expires != {} && time.diff(op.l.now, expires) <= 0 +} diff --git a/core/nbio/nbio.odin b/core/nbio/nbio.odin new file mode 100644 index 000000000..16664ea9f --- /dev/null +++ b/core/nbio/nbio.odin @@ -0,0 +1,435 @@ +package nbio + +import "base:intrinsics" + +import "core:container/pool" +import "core:container/queue" +import "core:net" +import "core:sync" +import "core:time" + +/* +If the package is fully supported on the current target. If it is not it will compile but work +in a matter where things are unimplemented. + +Additionally if it is `FULLY_SUPPORTED` it may still return `.Unsupported` in `acquire_thread_event_loop` +If the target does not support the needed syscalls for operating the package. +*/ +FULLY_SUPPORTED :: _FULLY_SUPPORTED + +/* +An event loop, one per thread, consider the fields private. +Do not copy. +*/ +Event_Loop :: struct /* #no_copy */ { + using impl: _Event_Loop, + err: General_Error, + refs: int, + now: time.Time, + + // Queue that is used to queue operations from another thread to be executed on this thread. + // TODO: Better data-structure. + queue: queue.Queue(^Operation), + queue_mu: sync.Mutex, + + operation_pool: pool.Pool(Operation), +} + +Handle :: _Handle + +// The maximum size of user arguments for an operation, can be increased at the cost of more RAM. +MAX_USER_ARGUMENTS :: #config(NBIO_MAX_USER_ARGUMENTS, 4) +#assert(MAX_USER_ARGUMENTS >= 4) + +Operation :: struct { + _impl: _Operation `fmt:"-"`, + using _: struct #raw_union { + _pool_link: ^Operation, + l: ^Event_Loop, + }, + cb: Callback, + using _specifics: Specifics, + user_data: [MAX_USER_ARGUMENTS + 1]rawptr, + type: Operation_Type, + detached: bool, +} + +Specifics :: struct #raw_union { + accept: Accept `raw_union_tag:"type=.Accept"`, + close: Close `raw_union_tag:"type=.Close"`, + dial: Dial `raw_union_tag:"type=.Dial"`, + read: Read `raw_union_tag:"type=.Read"`, + recv: Recv `raw_union_tag:"type=.Recv"`, + send: Send `raw_union_tag:"type=.Send"`, + write: Write `raw_union_tag:"type=.Write"`, + timeout: Timeout `raw_union_tag:"type=.Timeout"`, + poll: Poll `raw_union_tag:"type=.Poll"`, + sendfile: Send_File `raw_union_tag:"type=.Send_File"`, + open: Open `raw_union_tag:"type=.Open"`, + stat: Stat `raw_union_tag:"type=.Stat"`, + + _remove: _Remove `raw_union_tag:"type=._Remove"`, + _link_timeout: _Link_Timeout `raw_union_tag:"type=._Link_Timeout"`, + _splice: _Splice `raw_union_tag:"type=._Splice"`, +} + +Operation_Type :: enum i32 { + None, + Accept, + Close, + Dial, + Read, + Recv, + Send, + Write, + Timeout, + Poll, + Send_File, + Open, + Stat, + + _Link_Timeout, + _Remove, + _Splice, +} + +Callback :: #type proc(op: ^Operation) + +/* +Initialize or increment the reference counted event loop for the current thread. +*/ +acquire_thread_event_loop :: proc() -> General_Error { + return _acquire_thread_event_loop() +} + +/* +Destroy or decrease the reference counted event loop for the current thread. +*/ +release_thread_event_loop :: proc() { + _release_thread_event_loop() +} + +current_thread_event_loop :: proc(loc := #caller_location) -> ^Event_Loop { + return _current_thread_event_loop(loc) +} + +/* +Each time you call this the implementation checks its state +and calls any callbacks which are ready. You would typically call this in a loop. + +Blocks for up-to timeout waiting for events if there is nothing to do. +*/ +tick :: proc(timeout: time.Duration = NO_TIMEOUT) -> General_Error { + l := &_tls_event_loop + if l.refs == 0 { return nil } + return _tick(l, timeout) +} + +/* +Runs the event loop by ticking in a loop until there is no more work to be done. +*/ +run :: proc() -> General_Error { + l := &_tls_event_loop + if l.refs == 0 { return nil } + + acquire_thread_event_loop() + defer release_thread_event_loop() + + for num_waiting() > 0 { + if errno := _tick(l, NO_TIMEOUT); errno != nil { + return errno + } + } + return nil +} + +/* +Runs the event loop by ticking in a loop until there is no more work to be done, or the flag `done` is `true`. +*/ +run_until :: proc(done: ^bool) -> General_Error { + l := &_tls_event_loop + if l.refs == 0 { return nil } + + acquire_thread_event_loop() + defer release_thread_event_loop() + + for num_waiting() > 0 && !intrinsics.volatile_load(done) { + if errno := _tick(l, NO_TIMEOUT); errno != nil { + return errno + } + } + return nil +} + +/* +Returns the number of in-progress operations to be completed on the event loop. +*/ +num_waiting :: proc(l: Maybe(^Event_Loop) = nil) -> int { + l_ := l.? or_else &_tls_event_loop + if l_.refs == 0 { return 0 } + return pool.num_outstanding(&l_.operation_pool) +} + +/* +Returns the current time (cached at most at the beginning of the current tick). +*/ +now :: proc() -> time.Time { + if _tls_event_loop.now == {} { + return time.now() + } + return _tls_event_loop.now +} + +/* +Remove the given operation from the event loop. The callback of it won't be called and resources are freed. + +Calling `remove`: +- Cancels the operation if it has not yet completed +- Prevents the callback from being called + +Cancellation via `remove` is *final* and silent: +- The callback will never be invoked +- No error is delivered +- The operation must be considered dead after removal + +WARN: the operation could have already been (partially or completely) completed. + A send with `all` set to true could have sent a portion already. + But also, a send that could be completed without blocking could have been completed. + You just won't get a callback. + +WARN: once an operation's callback is called it can not be removed anymore (use after free). + +WARN: needs to be called from the thread of the event loop the target belongs to. + +Common use would be to cancel a timeout, remove a polling, or remove an `accept` before calling `close` on it's socket. +*/ +remove :: proc(target: ^Operation) { + if target == nil { + return + } + + assert(target.type != .None) + + if target.l != &_tls_event_loop { + panic("nbio.remove called on different thread") + } + + _remove(target) +} + +/* +Creates a socket for use in `nbio` and relates it to the given event loop. + +Inputs: +- family: Should this be an IP4 or IP6 socket +- protocol: The type of socket (TCP or UDP) +- l: The event loop to associate it with, defaults to the current thread's loop + +Returns: +- socket: The created socket, consider `create_{udp|tcp}_socket` for a typed socket instead of the union +- err: A network error (`Create_Socket_Error`, or `Set_Blocking_Error`) which happened while opening +*/ +create_socket :: proc( + family: Address_Family, + protocol: Socket_Protocol, + l: ^Event_Loop = nil, + loc := #caller_location, +) -> ( + socket: Any_Socket, + err: Create_Socket_Error, +) { + return _create_socket(l if l != nil else _current_thread_event_loop(loc), family, protocol) +} + +/* +Creates a UDP socket for use in `nbio` and relates it to the given event loop. + +Inputs: +- family: Should this be an IP4 or IP6 socket +- l: The event loop to associate it with, defaults to the current thread's loop + +Returns: +- socket: The created UDP socket +- err: A network error (`Create_Socket_Error`, or `Set_Blocking_Error`) which happened while opening +*/ +create_udp_socket :: proc(family: Address_Family, l: ^Event_Loop = nil, loc := #caller_location) -> (net.UDP_Socket, Create_Socket_Error) { + socket, err := create_socket(family, .UDP, l, loc) + if err != nil { + return -1, err + } + + return socket.(UDP_Socket), nil +} + +/* +Creates a TCP socket for use in `nbio` and relates it to the given event loop. + +Inputs: +- family: Should this be an IP4 or IP6 socket +- l: The event loop to associate it with, defaults to the current thread's loop + +Returns: +- socket: The created TCP socket +- err: A network error (`Create_Socket_Error`, or `Set_Blocking_Error`) which happened while opening +*/ +create_tcp_socket :: proc(family: Address_Family, l: ^Event_Loop = nil, loc := #caller_location) -> (net.TCP_Socket, Create_Socket_Error) { + socket, err := create_socket(family, .TCP, l, loc) + if err != nil { + return -1, err + } + + return socket.(TCP_Socket), nil +} + +/* +Creates a socket, sets non blocking mode, relates it to the given IO, binds the socket to the given endpoint and starts listening. + +Inputs: +- endpoint: Where to bind the socket to +- backlog: The maximum length to which the queue of pending connections may grow, before refusing connections +- l: The event loop to associate the socket with, defaults to the current thread's loop + +Returns: +- socket: The opened, bound and listening socket +- err: A network error (`Create_Socket_Error`, `Bind_Error`, or `Listen_Error`) that has happened +*/ +listen_tcp :: proc(endpoint: Endpoint, backlog := 1000, l: ^Event_Loop = nil, loc := #caller_location) -> (socket: TCP_Socket, err: net.Network_Error) { + assert(backlog > 0 && backlog < int(max(i32))) + return _listen_tcp(l if l != nil else _current_thread_event_loop(loc), endpoint, backlog) +} + +/* +Opens a file and associates it with the event loop. + +Inputs: +- path: path to the file, if not absolute: relative from `dir` +- dir: directory that `path` is relative from (if it is relative), defaults to the current working directory +- mode: open mode, defaults to read-only +- perm: permissions to use when creating a file, defaults to read+write for everybody +- l: event loop to associate the file with, defaults to the current thread's + +Returns: +- handle: The file handle +- err: An error if it occurred +*/ +open_sync :: proc(path: string, dir: Handle = CWD, mode: File_Flags = {.Read}, perm := Permissions_Default_File, l: ^Event_Loop = nil, loc := #caller_location) -> (handle: Handle, err: FS_Error) { + return _open_sync(l if l != nil else _current_thread_event_loop(loc), path, dir, mode, perm) +} + +Association_Error :: enum { + None, + // The given file/handle/socket was not opened in a mode that it can be made non-blocking afterwards. + // + // On Windows, this can happen when a file is not opened with the `FILE_FLAG_OVERLAPPED` flag. + // If using `core:os`, that is set when you specify the `O_NONBLOCK` flag. + // There is no way to add that after the fact. + Not_Possible_To_Associate, + // The given handle is not a valid handle. + Invalid_Handle, + // No network connection, or the network stack is not initialized. + Network_Unreachable, +} + +/* +Associate the given OS handle, not opened through this package, with the event loop. + +Consider using this package's `open` or `open_sync` directly instead. + +The handle returned is for convenience, it is actually still the same handle as given. +Thus you should not close the given handle. + +On Windows, this can error when a file is not opened with the `FILE_FLAG_OVERLAPPED` flag. +If using `core:os`, that is set when you specify the `O_NONBLOCK` flag. +There is no way to add that after the fact. +*/ +associate_handle :: proc(handle: uintptr, l: ^Event_Loop = nil, loc := #caller_location) -> (Handle, Association_Error) { + return _associate_handle(handle, l if l != nil else _current_thread_event_loop(loc)) +} + +/* +Associate the given socket, not created through this package, with the event loop. + +Consider using this package's `create_socket` directly instead. +*/ +associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop = nil, loc := #caller_location) -> Association_Error { + return _associate_socket(socket, l if l != nil else _current_thread_event_loop(loc)) +} + +Read_Entire_File_Error :: struct { + operation: Operation_Type, + value: FS_Error, +} + +Read_Entire_File_Callback :: #type proc(user_data: rawptr, data: []byte, err: Read_Entire_File_Error) + +/* +Combines multiple operations (open, stat, read, close) into one that reads an entire regular file. + +The error contains the `operation` that the error happened on. + +Inputs: +- path: path to the file, if not absolute: relative from `dir` +- user_data: a pointer passed through into the callback +- cb: the callback to call once completed, called with the user data, file data, and an optional error +- allocator: the allocator to allocate the file's contents onto +- dir: directory that `path` is relative from (if it is relative), defaults to the current working directory +- l: event loop to execute the operation on +*/ +read_entire_file :: proc(path: string, user_data: rawptr, cb: Read_Entire_File_Callback, allocator := context.allocator, dir := CWD, l: ^Event_Loop = nil, loc := #caller_location) { + _read_entire_file(l if l != nil else _current_thread_event_loop(loc), path, user_data, cb, allocator, dir) +} + +/* +Detach an operation from the package's lifetime management. + +By default the operation's lifetime is managed by the package and freed after a callback is called. +Calling this function detaches the operation from this lifetime. +You are expected to call `reattach` to give the package back this operation. +*/ +detach :: proc(op: ^Operation) { + op.detached = true +} + +/* +Reattach an operation to the package's lifetime management. +*/ +reattach :: proc(op: ^Operation) { + pool.put(&op.l.operation_pool, op) +} + +/* +Execute an operation. + +If the operation is attached to another thread's event loop, it is queued to be executed on that event loop, +optionally waking that loop up (from a blocking `tick`) with `trigger_wake_up`. +*/ +exec :: proc(op: ^Operation, trigger_wake_up := true) { + if op.l == &_tls_event_loop { + _exec(op) + } else { + { + // TODO: Better data-structure. + sync.guard(&op.l.queue_mu) + _, err := queue.push_back(&op.l.queue, op) + if err != nil { + panic("exec: queueing operation failed due to memory allocation failure") + } + } + if trigger_wake_up { + wake_up(op.l) + } + } +} + +/* +Wake up an event loop on another thread which may be blocking for completed operations. + +Commonly used with `exec` from a worker thread to have the event loop pick up that work. +Note that by default `exec` already calls this procedure. +*/ +wake_up :: proc(l: ^Event_Loop) { + if l == &_tls_event_loop { + return + } + _wake_up(l) +} diff --git a/core/nbio/net.odin b/core/nbio/net.odin new file mode 100644 index 000000000..d584639a7 --- /dev/null +++ b/core/nbio/net.odin @@ -0,0 +1,39 @@ +package nbio + +import "core:net" + +Network_Error :: net.Network_Error +Accept_Error :: net.Accept_Error +Dial_Error :: net.Dial_Error +Send_Error :: net.Send_Error +TCP_Send_Error :: net.TCP_Send_Error +UDP_Send_Error :: net.UDP_Send_Error +Recv_Error :: net.Recv_Error +TCP_Recv_Error :: net.TCP_Recv_Error +UDP_Recv_Error :: net.UDP_Recv_Error +Listen_Error :: net.Listen_Error +Create_Socket_Error :: net.Create_Socket_Error + +Address_Family :: net.Address_Family +Socket_Protocol :: net.Socket_Protocol + +Address :: net.Address +IP4_Address :: net.IP4_Address +IP6_Address :: net.IP6_Address + +Endpoint :: net.Endpoint + +TCP_Socket :: net.TCP_Socket +UDP_Socket :: net.UDP_Socket +Any_Socket :: net.Any_Socket + +IP4_Any :: net.IP4_Any +IP6_Any :: net.IP6_Any +IP4_Loopback :: net.IP4_Loopback +IP6_Loopback :: net.IP6_Loopback + +family_from_endpoint :: net.family_from_endpoint +bind :: net.bind +bound_endpoint :: net.bound_endpoint +parse_endpoint :: net.parse_endpoint +endpoint_to_string :: net.endpoint_to_string diff --git a/core/nbio/ops.odin b/core/nbio/ops.odin new file mode 100644 index 000000000..e028c4a76 --- /dev/null +++ b/core/nbio/ops.odin @@ -0,0 +1,2473 @@ +package nbio + +import "base:intrinsics" + +import "core:container/pool" +import "core:time" +import "core:slice" +import "core:mem" + +NO_TIMEOUT: time.Duration: -1 + +Accept :: struct { + // Socket to accept an incoming connection on. + socket: TCP_Socket, + // When this operation expires and should be timed out. + expires: time.Time, + + // The connection that was accepted. + client: TCP_Socket, + // The connection's remote origin. + client_endpoint: Endpoint, + // An error, if it occurred. + err: Accept_Error, + + // Implementation specifics, private. + _impl: _Accept `fmt:"-"`, +} + +/* +Retrieves and preps an operation to do an accept without executing it. + +Executing can then be done with the `exec` procedure. + +The timeout is calculated from the time when this procedure was called, not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- socket: A bound and listening socket *associated with the event loop* +- cb: The callback to be called when the operation finishes, `Operation.accept` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_accept :: #force_inline proc( + socket: TCP_Socket, + cb: Callback, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := _prep(l, cb, .Accept) + op.accept.socket = socket + if timeout > 0 { + op.accept.expires = time.time_add(now(), timeout) + } + return op +} + +/* +Using the given socket, accepts the next incoming connection, calling the callback when that happens. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `accept_poly`, `accept_poly2`, and `accept_poly3`. + +Inputs: +- socket: A bound and listening socket *associated with the event loop* +- cb: The callback to be called when the operation finishes, `Operation.accept` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +accept :: #force_inline proc( + socket: TCP_Socket, + cb: Callback, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + res := prep_accept(socket, cb, timeout, l) + exec(res) + return res +} + +/* +Using the given socket, accepts the next incoming connection, calling the callback when that happens. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: A bound and listening socket *associated with the event loop* +- p: User data, the callback will receive this as it's second argument +- cb: The callback to be called when the operation finishes, `Operation.accept` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +accept_poly :: #force_inline proc( + socket: TCP_Socket, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_accept(socket, _poly_cb(C, T), timeout, l) + _put_user_data(op, cb, p) + exec(op) + return op +} + +/* +Using the given socket, accepts the next incoming connection, calling the callback when that happens. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: A bound and listening socket *associated with the event loop* +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- cb: The callback to be called when the operation finishes, `Operation.accept` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +accept_poly2 :: #force_inline proc( + socket: TCP_Socket, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_accept(socket, _poly_cb2(C, T, T2), timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + return op +} + +/* +Using the given socket, accepts the next incoming connection, calling the callback when that happens. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: A bound and listening socket *associated with the event loop* +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- p3: User data, the callback will receive this as it's fourth argument +- cb: The callback to be called when the operation finishes, `Operation.accept` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +accept_poly3 :: #force_inline proc( + socket: TCP_Socket, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_accept(socket, _poly_cb3(C, T, T2, T3), timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + return op +} + +/* +A union of closable types that can be passed to `close`. +*/ +Closable :: union { + TCP_Socket, + UDP_Socket, + Handle, +} + +Close :: struct { + // The subject to close. + subject: Closable, + + // An error, if it occurred. + err: FS_Error, + + // Implementation specifics, private. + _impl: _Close `fmt:"-"`, +} + +@(private) +empty_callback :: proc(_: ^Operation) {} + +/* +Retrieves and preps an operation to do a close without executing it. + +Executing can then be done with the `exec` procedure. + +Closing something that has IO in progress may or may not cancel it, and may or may not call the callback. +For consistent behavior first call `remove` on in progress IO. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- subject: The subject (socket or file) to close +- cb: The optional callback to be called when the operation finishes, `Operation.close` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_close :: #force_inline proc(subject: Closable, cb: Callback = empty_callback, l: ^Event_Loop = nil) -> ^Operation { + op := _prep(l, cb, .Close) + op.close.subject = subject + return op +} + +/* +Closes the given subject (file or socket). + +Closing something that has IO in progress may or may not cancel it, and may or may not call the callback. +For consistent behavior first call `remove` on in progress IO. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `close_poly`, `close_poly2`, and `close_poly3`. + +Inputs: +- subject: The subject (socket or file) to close +- cb: The optional callback to be called when the operation finishes, `Operation.close` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +close :: #force_inline proc(subject: Closable, cb: Callback = empty_callback, l: ^Event_Loop = nil) -> ^Operation { + op := prep_close(subject, cb, l) + exec(op) + return op +} + +/* +Closes the given subject (file or socket). + +Closing something that has IO in progress may or may not cancel it, and may or may not call the callback. +For consistent behavior first call `remove` on in progress IO. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- subject: The subject (socket or file) to close +- p: User data, the callback will receive this as it's second argument +- cb: The optional callback to be called when the operation finishes, `Operation.close` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +close_poly :: #force_inline proc(subject: Closable, p: $T, cb: $C/proc(op: ^Operation, p: T), l: ^Event_Loop = nil) -> ^Operation +where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_close(subject, _poly_cb(C, T), l) + _put_user_data(op, cb, p) + exec(op) + return op +} + +/* +Closes the given subject (file or socket). + +Closing something that has IO in progress may or may not cancel it, and may or may not call the callback. +For consistent behavior first call `remove` on in progress IO. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- subject: The subject (socket or file) to close +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- cb: The optional callback to be called when the operation finishes, `Operation.close` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +close_poly2 :: #force_inline proc(subject: Closable, p: $T, p2: $T2, cb: $C/proc(op: ^Operation, p: T, p2: T2), l: ^Event_Loop = nil) -> ^Operation +where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_close(subject, _poly_cb2(C, T, T2), l) + _put_user_data2(op, cb, p, p2) + exec(op) + return op +} + +/* +Closes the given subject (file or socket). + +Closing something that has IO in progress may or may not cancel it, and may or may not call the callback. +For consistent behavior first call `remove` on in progress IO. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- subject: The subject (socket or file) to close +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- p3: User data, the callback will receive this as it's fourth argument +- cb: The optional callback to be called when the operation finishes, `Operation.close` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +close_poly3 :: #force_inline proc(subject: Closable, p: $T, p2: $T2, p3: $T3, cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), l: ^Event_Loop = nil) -> ^Operation +where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_close(subject, _poly_cb3(C, T, T2, T3), l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + return op +} + +Dial :: struct { + // The endpoint to connect to. + endpoint: Endpoint, + // When this operation expires and should be timed out. + expires: time.Time, + + // Errors that can be returned: `Create_Socket_Error`, or `Dial_Error`. + err: Network_Error, + // The socket to communicate with the connected server. + socket: TCP_Socket, + + // Implementation specifics, private. + _impl: _Dial `fmt:"-"`, +} + +/* +Retrieves and preps an operation to do a dial operation without executing it. + +Executing can then be done with the `exec` procedure. + +The timeout is calculated from the time when this procedure was called, not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- endpoint: The endpoint to connect to +- cb: The callback to be called when the operation finishes, `Operation.dial` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_dial :: #force_inline proc( + endpoint: Endpoint, + cb: Callback, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := _prep(l, cb, .Dial) + if timeout > 0 { + op.dial.expires = time.time_add(now(), timeout) + } + op.dial.endpoint = endpoint + return op +} + +/* +Dials the given endpoint. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `dial_poly`, `dial_poly2`, and `dial_poly3`. + +Inputs: +- endpoint: The endpoint to connect to +- cb: The callback to be called when the operation finishes, `Operation.dial` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +dial :: #force_inline proc( + endpoint: Endpoint, + cb: Callback, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + res := prep_dial(endpoint, cb, timeout, l) + exec(res) + return res +} + +/* +Dials the given endpoint. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- endpoint: The endpoint to connect to +- p: User data, the callback will receive this as it's second argument +- cb: The callback to be called when the operation finishes, `Operation.dial` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +dial_poly :: #force_inline proc( + endpoint: Endpoint, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_dial(endpoint, _poly_cb(C, T), timeout, l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Dials the given endpoint. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- endpoint: The endpoint to connect to +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- cb: The callback to be called when the operation finishes, `Operation.dial` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +dial_poly2 :: #force_inline proc( + endpoint: Endpoint, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_dial(endpoint, _poly_cb2(C, T, T2), timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Dials the given endpoint. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- endpoint: The endpoint to connect to +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- p3: User data, the callback will receive this as it's fourth argument +- cb: The callback to be called when the operation finishes, `Operation.dial` will contain results +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +dial_poly3 :: #force_inline proc( + endpoint: Endpoint, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_dial(endpoint, _poly_cb3(C, T, T2, T3), timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +Recv :: struct { + // The socket to receive from. + socket: Any_Socket, + // The buffers to receive data into. + // The outer slice is copied internally, but the backing arrays must remain alive. + // It is safe to access `bufs` during the callback. + bufs: [][]byte, + // If true, the operation waits until all buffers are filled (TCP only). + all: bool, + // When this operation expires and should be timed out. + expires: time.Time, + + // The source endpoint data was received from (UDP only). + source: Endpoint, + + // An error, if it occurred. + // If `received == 0` and `err == nil`, the connection was closed by the peer. + err: Recv_Error, + // The number of bytes received. + received: int, + + // Implementation specifics, private. + _impl: _Recv `fmt:"-"`, +} + +/* +Retrieves and preps an operation to do a receive without executing it. + +Executing can then be done with the `exec` procedure. + +To avoid ambiguity between a closed connection and a 0-byte read, the provided buffers must have a total capacity greater than 0. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +The timeout is calculated from the time when this procedure was called, not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- socket: The socket to receive from +- bufs: Buffers to fill with received data +- cb: The callback to be called when the operation finishes, `Operation.recv` will contain results +- all: If true, waits until all buffers are full before completing (TCP only, ignored for UDP) +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_recv :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + cb: Callback, + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + assert(socket != nil) + + // If we accepted `bufs` that total 0 it would be ambiguous if the result of `received == 0 && err == nil` means connection closed or received 0 bytes. + assert(len(bufs) > 0) + assert(slice.any_of_proc(bufs, proc(buf: []byte) -> bool { return len(buf) > 0 })) + + op := _prep(l, cb, .Recv) + op.recv.socket = socket + op.recv.bufs = bufs + op.recv.all = all + if timeout > 0 { + op.recv.expires = time.time_add(now(), timeout) + } + + if len(op.recv.bufs) == 1 { + op.recv._impl.small_bufs = {op.recv.bufs[0]} + op.recv.bufs = op.recv._impl.small_bufs[:] + } else { + err: mem.Allocator_Error + if op.recv.bufs, err = slice.clone(op.recv.bufs, op.l.allocator); err != nil { + switch _ in op.recv.socket { + case TCP_Socket: op.recv.err = TCP_Recv_Error.Insufficient_Resources + case UDP_Socket: op.recv.err = UDP_Recv_Error.Insufficient_Resources + case: unreachable() + } + } + } + + return op +} + +/* +Receives data from the socket. + +If the operation completes with 0 bytes received and no error, it indicates the connection was closed by the peer. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `recv_poly`, `recv_poly2`, and `recv_poly3`. + +Inputs: +- socket: The socket to receive from +- bufs: Buffers to fill with received data +- cb: The callback to be called when the operation finishes, `Operation.recv` will contain results +- all: If true, waits until all buffers are full before completing (TCP only, ignored for UDP) +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +recv :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + cb: Callback, + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation { + op := prep_recv(socket, bufs, cb, all, timeout, l) + exec(op) + return op +} + +/* +Receives data from the socket. + +If the operation completes with 0 bytes received and no error, it indicates the connection was closed by the peer. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The socket to receive from +- bufs: Buffers to fill with received data +- p: User data, the callback will receive this as it's second argument +- cb: The callback to be called when the operation finishes, `Operation.recv` will contain results +- all: If true, waits until all buffers are full before completing (TCP only, ignored for UDP) +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +recv_poly :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_recv(socket, bufs, _poly_cb(C, T), all, timeout, l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Receives data from the socket. + +If the operation completes with 0 bytes received and no error, it indicates the connection was closed by the peer. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The socket to receive from +- bufs: Buffers to fill with received data +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- cb: The callback to be called when the operation finishes, `Operation.recv` will contain results +- all: If true, waits until all buffers are full before completing (TCP only, ignored for UDP) +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +recv_poly2 :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_recv(socket, bufs, _poly_cb2(C, T, T2), all, timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Receives data from the socket. + +If the operation completes with 0 bytes received and no error, it indicates the connection was closed by the peer. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The socket to receive from +- bufs: Buffers to fill with received data +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- p3: User data, the callback will receive this as it's fourth argument +- cb: The callback to be called when the operation finishes, `Operation.recv` will contain results +- all: If true, waits until all buffers are full before completing (TCP only, ignored for UDP) +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +recv_poly3 :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_recv(socket, bufs, _poly_cb3(C, T, T2, T3), all, timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +Send :: struct { + // The socket to send to. + socket: Any_Socket, + // The buffers to send. + // The outer slice is copied internally, but the backing arrays must remain alive. + bufs: [][]byte `fmt:"-"`, + // The destination endpoint to send to (UDP only). + endpoint: Endpoint, + // If true, the operation ensures all data is sent before completing. + all: bool, + // When this operation expires and should be timed out. + expires: time.Time, + + // An error, if it occurred. + err: Send_Error, + // The number of bytes sent. + sent: int, + + // Implementation specifics, private. + _impl: _Send `fmt:"-"`, +} + +/* +Retrieves and preps an operation to do a send without executing it. + +Executing can then be done with the `exec` procedure. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +The timeout is calculated from the time when this procedure was called, not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- socket: The socket to send to +- bufs: Buffers containing the data to send +- cb: The callback to be called when the operation finishes, `Operation.send` will contain results +- endpoint: The destination endpoint (UDP only, ignored for TCP) +- all: If true, the operation ensures all data is sent before completing +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_send :: proc( + socket: Any_Socket, + bufs: [][]byte, + cb: Callback, + endpoint: Endpoint = {}, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + assert(socket != nil) + op := _prep(l, cb, .Send) + op.send.socket = socket + op.send.bufs = bufs + op.send.endpoint = endpoint + op.send.all = all + if timeout > 0 { + op.send.expires = time.time_add(now(), timeout) + } + + if len(op.send.bufs) == 1 { + op.send._impl.small_bufs = {op.send.bufs[0]} + op.send.bufs = op.send._impl.small_bufs[:] + } else { + err: mem.Allocator_Error + if op.send.bufs, err = slice.clone(op.send.bufs, op.l.allocator); err != nil { + switch _ in op.send.socket { + case TCP_Socket: op.send.err = TCP_Send_Error.Insufficient_Resources + case UDP_Socket: op.send.err = UDP_Send_Error.Insufficient_Resources + case: unreachable() + } + } + } + + return op +} + +/* +Sends data to the socket. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `send_poly`, `send_poly2`, and `send_poly3`. + +Inputs: +- socket: The socket to send to +- bufs: Buffers containing the data to send +- cb: The callback to be called when the operation finishes, `Operation.send` will contain results +- endpoint: The destination endpoint (UDP only, ignored for TCP) +- all: If true, the operation ensures all data is sent before completing +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +send :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + cb: Callback, + endpoint: Endpoint = {}, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_send(socket, bufs, cb, endpoint, all, timeout, l) + exec(op) + return op +} + +/* +Sends data to the socket. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The socket to send to +- bufs: Buffers containing the data to send +- p: User data, the callback will receive this as it's second argument +- cb: The callback to be called when the operation finishes, `Operation.send` will contain results +- endpoint: The destination endpoint (UDP only, ignored for TCP) +- all: If true, the operation ensures all data is sent before completing +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +send_poly :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + endpoint: Endpoint = {}, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_send(socket, bufs, _poly_cb(C, T), endpoint, all, timeout, l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Sends data to the socket. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The socket to send to +- bufs: Buffers containing the data to send +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- cb: The callback to be called when the operation finishes, `Operation.send` will contain results +- endpoint: The destination endpoint (UDP only, ignored for TCP) +- all: If true, the operation ensures all data is sent before completing +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +send_poly2 :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + endpoint: Endpoint = {}, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_send(socket, bufs, _poly_cb2(C, T, T2), endpoint, all, timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Sends data to the socket. + +The `bufs` slice itself is copied into the operation, so it can be temporary (e.g. on the stack), but the underlying memory of the buffers must remain valid until the callback is fired. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The socket to send to +- bufs: Buffers containing the data to send +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- p3: User data, the callback will receive this as it's fourth argument +- cb: The callback to be called when the operation finishes, `Operation.send` will contain results +- endpoint: The destination endpoint (UDP only, ignored for TCP) +- all: If true, the operation ensures all data is sent before completing +- timeout: Optional timeout for the operation, the callback will get a `.Timeout` error after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +send_poly3 :: #force_inline proc( + socket: Any_Socket, + bufs: [][]byte, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + endpoint: Endpoint = {}, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_send(socket, bufs, _poly_cb3(C, T, T2, T3), endpoint, all, timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +Read :: struct { + // Handle to read from. + handle: Handle, + // Buffer to read data into. + buf: []byte `fmt:"v,read"`, + // Offset to read from. + offset: int, + // Whether to read until the buffer is full or an error occurs. + all: bool, + // When this operation expires and should be timed out. + expires: time.Time, + + // Error, if it occurred. + err: FS_Error, + // Number of bytes read. + read: int, + + // Implementation specifics, private. + _impl: _Read `fmt:"-"`, +} + +/* +Retrieves and preps a positional read operation without executing it. + +This is a pread-style operation: the read starts at the given offset and does +not modify the handle's current file position. + +Executing can then be done with the `exec` procedure. + +The timeout is calculated from the time when this procedure was called, +not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- handle: Handle to read from +- offset: Offset to read from +- buf: Buffer to read data into (must not be empty) +- cb: The callback to be called when the operation finishes, `Operation.read` will contain results +- all: Whether to read until the buffer is full or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_read :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + cb: Callback, + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + assert(len(buf) > 0) + op := _prep(l, cb, .Read) + op.read.handle = handle + op.read.buf = buf + op.read.offset = offset + op.read.all = all + if timeout > 0 { + op.read.expires = time.time_add(now(), timeout) + } + return op +} + +/* +Reads data from a handle at a specific offset. + +This is a pread-style operation: the read starts at the given offset and does +not modify the handle's current file position. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `read_poly`, `read_poly2`, and `read_poly3`. + +Inputs: +- handle: Handle to read from +- offset: Offset to read from +- buf: Buffer to read data into (must not be empty) +- cb: The callback to be called when the operation finishes, `Operation.read` will contain results +- all: Whether to read until the buffer is full or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +read :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + cb: Callback, + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_read(handle, offset, buf, cb, all, timeout, l) + exec(op) + return op +} + +/* +Reads data from a handle at a specific offset. + +This is a pread-style operation: the read starts at the given offset and does +not modify the handle's current file position. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to read from +- offset: Offset to read from +- buf: Buffer to read data into (must not be empty) +- p: User data, the callback will receive this as its second argument +- cb: The callback to be called when the operation finishes, `Operation.read` will contain results +- all: Whether to read until the buffer is full or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +read_poly :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_read(handle, offset, buf, _poly_cb(C, T), all=all, timeout=timeout, l=l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Reads data from a handle at a specific offset. + +This is a pread-style operation: the read starts at the given offset and does +not modify the handle's current file position. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to read from +- offset: Offset to read from +- buf: Buffer to read data into (must not be empty) +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- cb: The callback to be called when the operation finishes, `Operation.read` will contain results +- all: Whether to read until the buffer is full or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +read_poly2 :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_read(handle, offset, buf, _poly_cb2(C, T, T2), all, timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Reads data from a handle at a specific offset. + +This is a pread-style operation: the read starts at the given offset and does +not modify the handle's current file position. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to read from +- offset: Offset to read from +- buf: Buffer to read data into (must not be empty) +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- p3: User data, the callback will receive this as its fourth argument +- cb: The callback to be called when the operation finishes, `Operation.read` will contain results +- all: Whether to read until the buffer is full or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +read_poly3 :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + all := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_read(handle, offset, buf, _poly_cb3(C, T, T2, T3), all, timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +Write :: struct { + // Handle to write to. + handle: Handle, + // Buffer containing data to write. + buf: []byte, + // Offset to write to. + offset: int, + // Whether to write until the buffer is fully written or an error occurs. + all: bool, + // When this operation expires and should be timed out. + expires: time.Time, + + // Error, if it occurred. + err: FS_Error, + // Number of bytes written. + written: int, + + // Implementation specifics, private. + _impl: _Write `fmt:"-"`, +} + +/* +Retrieves and preps a positional write operation without executing it. + +This is a pwrite-style operation: the write starts at the given offset and does +not modify the handle's current file position. + +Executing can then be done with the `exec` procedure. + +The timeout is calculated from the time when this procedure was called, +not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- handle: Handle to write to +- offset: Offset to write to +- buf: Buffer containing data to write (must not be empty) +- cb: The callback to be called when the operation finishes, `Operation.write` will contain results +- all: Whether to write until the entire buffer is written or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_write :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + cb: Callback, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + assert(len(buf) > 0) + op := _prep(l, cb, .Write) + op.write.handle = handle + op.write.buf = buf + op.write.offset = offset + op.write.all = all + if timeout > 0 { + op.write.expires = time.time_add(now(), timeout) + } + return op +} + +/* +Writes data to a handle at a specific offset. + +This is a pwrite-style operation: the write starts at the given offset and does +not modify the handle's current file position. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `write_poly`, `write_poly2`, and `write_poly3`. + +Inputs: +- handle: Handle to write to +- offset: Offset to write to +- buf: Buffer containing data to write (must not be empty) +- cb: The callback to be called when the operation finishes, `Operation.write` will contain results +- all: Whether to write until the entire buffer is written or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +write :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + cb: Callback, + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_write(handle, offset, buf, cb, all, timeout, l) + exec(op) + return op +} + +/* +Writes data to a handle at a specific offset. + +This is a pwrite-style operation: the write starts at the given offset and does +not modify the handle's current file position. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to write to +- offset: Offset to write to +- buf: Buffer containing data to write (must not be empty) +- p: User data, the callback will receive this as its second argument +- cb: The callback to be called when the operation finishes, `Operation.write` will contain results +- all: Whether to write until the entire buffer is written or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +write_poly :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_write(handle, offset, buf, _poly_cb(C, T), all=all, timeout=timeout, l=l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Writes data to a handle at a specific offset. + +This is a pwrite-style operation: the write starts at the given offset and does +not modify the handle's current file position. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to write to +- offset: Offset to write to +- buf: Buffer containing data to write (must not be empty) +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- cb: The callback to be called when the operation finishes, `Operation.write` will contain results +- all: Whether to write until the entire buffer is written or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +write_poly2 :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_write(handle, offset, buf, _poly_cb2(C, T, T2), all, timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Writes data to a handle at a specific offset. + +This is a pwrite-style operation: the write starts at the given offset and does +not modify the handle's current file position. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to write to +- offset: Offset to write to +- buf: Buffer containing data to write (must not be empty) +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- p3: User data, the callback will receive this as its fourth argument +- cb: The callback to be called when the operation finishes, `Operation.write` will contain results +- all: Whether to write until the entire buffer is written or an error occurs +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +write_poly3 :: #force_inline proc( + handle: Handle, + offset: int, + buf: []byte, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + all := true, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_write(handle, offset, buf, _poly_cb3(C, T, T2, T3), all, timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +Timeout :: struct { + // Duration after which the timeout expires. + duration: time.Duration, + + // Implementation specifics, private. + _impl: _Timeout `fmt:"-"`, +} + +/* +Retrieves and preps a timeout operation without executing it. + +Executing can then be done with the `exec` procedure. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- duration: Duration to wait before the operation completes +- cb: The callback to be called when the operation finishes +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_timeout :: #force_inline proc( + duration: time.Duration, + cb: Callback, + l: ^Event_Loop = nil, +) -> ^Operation { + op := _prep(l, cb, .Timeout) + op.timeout.duration = duration + return op +} + +/* +Schedules a timeout that completes after the given duration. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `timeout_poly`, `timeout_poly2`, and `timeout_poly3`. + +Inputs: +- duration: Duration to wait before the operation completes +- cb: The callback to be called when the operation finishes +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +timeout :: #force_inline proc( + duration: time.Duration, + cb: Callback, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_timeout(duration, cb, l) + exec(op) + return op +} + +/* +Schedules a timeout that completes after the given duration. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- dur: Duration to wait before the operation completes +- p: User data, the callback will receive this as its second argument +- cb: The callback to be called when the operation finishes +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +timeout_poly :: #force_inline proc( + dur: time.Duration, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + l: ^Event_Loop = nil, +) -> ^Operation + where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_timeout(dur, _poly_cb(C, T), l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Schedules a timeout that completes after the given duration. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- dur: Duration to wait before the operation completes +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- cb: The callback to be called when the operation finishes +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +timeout_poly2 :: #force_inline proc( + dur: time.Duration, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + l: ^Event_Loop = nil, +) -> ^Operation + where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_timeout(dur, _poly_cb2(C, T, T2), l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Schedules a timeout that completes after the given duration. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- dur: Duration to wait before the operation completes +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- p3: User data, the callback will receive this as its fourth argument +- cb: The callback to be called when the operation finishes +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +timeout_poly3 :: #force_inline proc( + dur: time.Duration, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + l: ^Event_Loop = nil, +) -> ^Operation + where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_timeout(dur, _poly_cb3(C, T, T2, T3), l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +/* +Retrieves and preps an operation that completes on the next event loop tick. + +This is equivalent to `prep_timeout(0, ...)`. +*/ +prep_next_tick :: #force_inline proc(cb: Callback, l: ^Event_Loop = nil) -> ^Operation { + return prep_timeout(0, cb, l) +} + +/* +Schedules an operation that completes on the next event loop tick. + +This is equivalent to `timeout(0, ...)`. +*/ +next_tick :: #force_inline proc(cb: Callback, l: ^Event_Loop = nil) -> ^Operation { + return timeout(0, cb, l) +} + +/* +Schedules an operation that completes on the next event loop tick. + +This is equivalent to `timeout_poly(0, ...)`. +*/ +next_tick_poly :: #force_inline proc(p: $T, cb: $C/proc(op: ^Operation, p: T), l: ^Event_Loop = nil) -> ^Operation + where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + return timeout_poly(0, p, cb, l) +} + +/* +Schedules an operation that completes on the next event loop tick. + +This is equivalent to `timeout_poly2(0, ...)`. +*/ +next_tick_poly2 :: #force_inline proc(p: $T, p2: $T2, cb: $C/proc(op: ^Operation, p: T, p2: T2), l: ^Event_Loop = nil) -> ^Operation + where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + return timeout_poly2(0, p, p2, cb, l) +} + +/* +Schedules an operation that completes on the next event loop tick. + +This is equivalent to `timeout_poly3(0, ...)`. +*/ +next_tick_poly3 :: #force_inline proc(p: $T, p2: $T2, p3: $T3, cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), l: ^Event_Loop = nil) -> ^Operation + where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + return timeout_poly3(0, p, p2, p3, cb, l) +} + +Poll_Result :: enum i32 { + // The requested event is ready. + Ready, + // The operation timed out before the event became ready. + Timeout, + // The socket was invalid. + Invalid_Argument, + // An unspecified error occurred. + Error, +} + +Poll_Event :: enum { + // The subject is ready to be received from. + Receive, + // The subject is ready to be sent to. + Send, +} + +Poll :: struct { + // Socket to poll. + socket: Any_Socket, + // Event to poll for. + event: Poll_Event, + // When this operation expires and should be timed out. + expires: time.Time, + + // Result of the poll. + result: Poll_Result, + + // Implementation specifics, private. + _impl: _Poll `fmt:"-"`, +} + +/* +Retrieves and preps an operation to poll a socket without executing it. + +Executing can then be done with the `exec` procedure. + +The timeout is calculated from the time when this procedure was called, +not from when it's executed. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- socket: Socket to poll that is *associated with the event loop* +- event: Event to poll for +- cb: The callback to be called when the operation finishes, `Operation.poll` will contain results +- timeout: Optional timeout for the operation, the callback will receive a `.Timeout` result after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_poll :: #force_inline proc( + socket: Any_Socket, + event: Poll_Event, + cb: Callback, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := _prep(l, cb, .Poll) + op.poll.socket = socket + op.poll.event = event + if timeout > 0 { + op.poll.expires = time.time_add(now(), timeout) + } + return op +} + +/* +Poll a socket for readiness. + +NOTE: this is provided to help with "legacy" APIs that require polling behavior. +If you can avoid it and use the other procs in this package, do so. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `poll_poly`, `poll_poly2`, and `poll_poly3`. + +Inputs: +- socket: Socket to poll that is *associated with the event loop* +- event: Event to poll for +- cb: The callback to be called when the operation finishes, `Operation.poll` will contain results +- timeout: Optional timeout for the operation, the callback will receive a `.Timeout` result after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +poll :: #force_inline proc( + socket: Any_Socket, + event: Poll_Event, + cb: Callback, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_poll(socket, event, cb, timeout, l) + exec(op) + return op +} + +/* +Poll a socket for readiness. + +NOTE: this is provided to help with "legacy" APIs that require polling behavior. +If you can avoid it and use the other procs in this package, do so. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: Socket to poll that is *associated with the event loop* +- event: Event to poll for +- p: User data, the callback will receive this as its second argument +- cb: The callback to be called when the operation finishes, `Operation.poll` will contain results +- timeout: Optional timeout for the operation, the callback will receive a `.Timeout` result after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +poll_poly :: #force_inline proc( + socket: Any_Socket, + event: Poll_Event, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_poll(socket, event, _poly_cb(C, T), timeout, l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Poll a socket for readiness. + +NOTE: this is provided to help with "legacy" APIs that require polling behavior. +If you can avoid it and use the other procs in this package, do so. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: Socket to poll that is *associated with the event loop* +- event: Event to poll for +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- cb: The callback to be called when the operation finishes, `Operation.poll` will contain results +- timeout: Optional timeout for the operation, the callback will receive a `.Timeout` result after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +poll_poly2 :: #force_inline proc( + socket: Any_Socket, + event: Poll_Event, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_poll(socket, event, _poly_cb2(C, T, T2), timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Poll a socket for readiness. + +NOTE: this is provided to help with "legacy" APIs that require polling behavior. +If you can avoid it and use the other procs in this package, do so. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: Socket to poll that is *associated with the event loop* +- event: Event to poll for +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- p3: User data, the callback will receive this as its fourth argument +- cb: The callback to be called when the operation finishes, `Operation.poll` will contain results +- timeout: Optional timeout for the operation, the callback will receive a `.Timeout` result after that duration +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +poll_poly3 :: #force_inline proc( + socket: Any_Socket, + event: Poll_Event, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_poll(socket, event, _poly_cb3(C, T, T2, T3), timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +SEND_ENTIRE_FILE :: -1 + +Send_File_Error :: union #shared_nil { + FS_Error, + TCP_Send_Error, +} + +Send_File :: struct { + // The TCP socket to send the file over. + socket: TCP_Socket, + // The handle of the regular file to send. + file: Handle, + // When this operation expires and should be timed out. + expires: time.Time, + // The starting offset within the file. + offset: int, + // Number of bytes to send. If set to SEND_ENTIRE_FILE, the file size is retrieved + // automatically and this field is updated to reflect the full size. + nbytes: int, + // If true, the callback is triggered periodically as data is sent. + // The callback will continue to be called until `sent == nbytes` or an error occurs. + progress_updates: bool, + + // Total number of bytes (so far if `progress_updates` is true). + sent: int, + // An error, if it occurred. Can be a filesystem or networking error. + err: Send_File_Error, + + // Implementation specifics, private. + _impl: _Send_File `fmt:"-"`, +} + +/* +Retrieves and preps an operation to send a file over a socket without executing it. + +Executing can then be done with the `exec` procedure. + +This uses high-performance zero-copy system calls where available. +Note: This is emulated on NetBSD and OpenBSD (stat -> mmap -> send) as they lack a native sendfile implementation. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- socket: The destination TCP socket +- file: The source file handle +- cb: The callback to be called when data is sent (if `progress_updates` is true) or the operation completes +- offset: Byte offset to start reading from the file +- nbytes: Total bytes to send (use SEND_ENTIRE_FILE for the whole file) +- progress_updates: If true, the callback fires multiple times to report progress, `sent == nbytes` means te operation completed +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the final callback is called +*/ +prep_sendfile :: #force_inline proc( + socket: TCP_Socket, + file: Handle, + cb: Callback, + offset: int = 0, + nbytes: int = SEND_ENTIRE_FILE, + progress_updates := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + assert(offset >= 0) + assert(nbytes == SEND_ENTIRE_FILE || nbytes > 0) + op := _prep(l, cb, .Send_File) + op.sendfile.socket = socket + op.sendfile.file = file + if timeout > 0 { + op.sendfile.expires = time.time_add(now(), timeout) + } + op.sendfile.offset = offset + op.sendfile.nbytes = nbytes + op.sendfile.progress_updates = progress_updates + return op +} + +/* +Sends a file over a TCP socket. + +This uses high-performance zero-copy system calls where available. +Note: This is emulated on NetBSD and OpenBSD (stat -> mmap -> send) as they lack a native sendfile implementation. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `sendfile_poly`, `sendfile_poly2`, and `sendfile_poly3`. + +Inputs: +- socket: The destination TCP socket +- file: The source file handle +- cb: The callback to be called when data is sent (if `progress_updates` is true) or the operation completes +- offset: Byte offset to start reading from the file +- nbytes: Total bytes to send (use SEND_ENTIRE_FILE for the whole file) +- progress_updates: If true, the callback fires multiple times to report progress, `sent == nbytes` means te operation completed +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the final callback is called +*/ +sendfile :: #force_inline proc( + socket: TCP_Socket, + file: Handle, + cb: Callback, + offset: int = 0, + nbytes: int = SEND_ENTIRE_FILE, + progress_updates := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_sendfile(socket, file, cb, offset, nbytes, progress_updates, timeout, l) + exec(op) + return op +} + +/* +Sends a file over a TCP socket. + +This uses high-performance zero-copy system calls where available. +Note: This is emulated on NetBSD and OpenBSD (stat -> mmap -> send) as they lack a native sendfile implementation. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The destination TCP socket +- file: The source file handle +- p: User data, the callback will receive this as it's second argument +- cb: The callback to be called when data is sent (if `progress_updates` is true) or the operation completes +- offset: Byte offset to start reading from the file +- nbytes: Total bytes to send (use SEND_ENTIRE_FILE for the whole file) +- progress_updates: If true, the callback fires multiple times to report progress, `sent == nbytes` means te operation completed +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the final callback is called +*/ +sendfile_poly :: #force_inline proc( + socket: TCP_Socket, + file: Handle, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + offset: int = 0, + nbytes: int = SEND_ENTIRE_FILE, + progress_updates := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_sendfile(socket, file, _poly_cb(C, T), offset, nbytes, progress_updates, timeout, l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Sends a file over a TCP socket. + +This uses high-performance zero-copy system calls where available. +Note: This is emulated on NetBSD and OpenBSD (stat -> mmap -> send) as they lack a native sendfile implementation. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The destination TCP socket +- file: The source file handle +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- cb: The callback to be called when data is sent (if `progress_updates` is true) or the operation completes +- offset: Byte offset to start reading from the file +- nbytes: Total bytes to send (use SEND_ENTIRE_FILE for the whole file) +- progress_updates: If true, the callback fires multiple times to report progress, `sent == nbytes` means te operation completed +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the final callback is called +*/ +sendfile_poly2 :: #force_inline proc( + socket: TCP_Socket, + file: Handle, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + offset: int = 0, + nbytes: int = SEND_ENTIRE_FILE, + progress_updates := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_sendfile(socket, file, _poly_cb2(C, T, T2), offset, nbytes, progress_updates, timeout, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Sends a file over a TCP socket. + +This uses high-performance zero-copy system calls where available. +Note: This is emulated on NetBSD and OpenBSD (stat -> mmap -> send) as they lack a native sendfile implementation. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- socket: The destination TCP socket +- file: The source file handle +- p: User data, the callback will receive this as it's second argument +- p2: User data, the callback will receive this as it's third argument +- p3: User data, the callback will receive this as it's fourth argument +- cb: The callback to be called when data is sent (if `progress_updates` is true) or the operation completes +- offset: Byte offset to start reading from the file +- nbytes: Total bytes to send (use SEND_ENTIRE_FILE for the whole file) +- progress_updates: If true, the callback fires multiple times to report progress, `sent == nbytes` means te operation completed +- timeout: Optional timeout for the operation +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the final callback is called +*/ +sendfile_poly3 :: #force_inline proc( + socket: TCP_Socket, + file: Handle, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + offset: int = 0, + nbytes: int = SEND_ENTIRE_FILE, + progress_updates := false, + timeout: time.Duration = NO_TIMEOUT, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_sendfile(socket, file, _poly_cb3(C, T, T2, T3), offset, nbytes, progress_updates, timeout, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +/* +File permission bit-set. + +This type represents POSIX-style file permissions, split into user, group, +and other categories, each with read, write, and execute flags. +*/ +Permissions :: distinct bit_set[Permission_Flag; u32] + +Permission_Flag :: enum u32 { + Execute_Other = 0, + Write_Other = 1, + Read_Other = 2, + + Execute_Group = 3, + Write_Group = 4, + Read_Group = 5, + + Execute_User = 6, + Write_User = 7, + Read_User = 8, +} + +// Convenience permission sets. +Permissions_Execute_All :: Permissions{.Execute_User, .Execute_Group, .Execute_Other} +Permissions_Write_All :: Permissions{.Write_User, .Write_Group, .Write_Other} +Permissions_Read_All :: Permissions{.Read_User, .Read_Group, .Read_Other} + +// Read and write permissions for user, group, and others. +Permissions_Read_Write_All :: Permissions_Read_All + Permissions_Write_All + +// Read, write, and execute permissions for user, group, and others. +Permissions_All :: Permissions_Read_All + Permissions_Write_All + Permissions_Execute_All + +// Default permissions used when creating a file (read and write for everyone). +Permissions_Default_File :: Permissions_Read_All + Permissions_Write_All + +// Default permissions used when creating a directory (read, write, and execute for everyone). +Permissions_Default_Directory :: Permissions_Read_All + Permissions_Write_All + Permissions_Execute_All + +File_Flags :: bit_set[File_Flag; int] + +File_Flag :: enum { + // Open for reading. + Read, + // Open for writing. + Write, + // Append writes to the end of the file. + Append, + // Create the file if it does not exist. + Create, + // Fail if the file already exists (used with Create). + Excl, + Sync, + // Truncate the file on open. + Trunc, +} + +Open :: struct { + // Base directory the path is relative to. + dir: Handle, + // Path to the file. + path: string, + // File open mode flags. + mode: File_Flags, + // Permissions used if the file is created. + perm: Permissions, + + // The opened file handle. + handle: Handle, + // An error, if it occurred. + err: FS_Error, + + // Implementation specifics, private. + _impl: _Open `fmt:"-"`, +} + +// Sentinel handle representing the current/present working directory. +CWD :: _CWD + +/* +Retrieves and preps an operation to open a file without executing it. + +Executing can then be done with the `exec` procedure. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- path: Path to the file, if not absolute: relative from `dir` +- cb: The callback to be called when the operation finishes, `Operation.open` will contain results +- mode: File open mode flags, defaults to read-only +- perm: Permissions to use when creating a file, defaults to read+write for everybody +- dir: Directory that `path` is relative from (if it is relative), defaults to the current working directory +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_open :: #force_inline proc( + path: string, + cb: Callback, + mode: File_Flags = {.Read}, + perm: Permissions = Permissions_Default_File, + dir: Handle = CWD, + l: ^Event_Loop = nil, +) -> ^Operation { + op := _prep(l, cb, .Open) + op.open.path = path + op.open.mode = mode + op.open.perm = perm + op.open.dir = dir + return op +} + +/* +Opens a file and associates it with the event loop. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `open_poly`, `open_poly2`, and `open_poly3`. + +Inputs: +- path: Path to the file, if not absolute: relative from `dir` +- cb: The callback to be called when the operation finishes, `Operation.open` will contain results +- mode: File open mode flags, defaults to read-only +- perm: Permissions to use when creating a file, defaults to read+write for everybody +- dir: Directory that `path` is relative from (if it is relative), defaults to the current working directory +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +open :: #force_inline proc( + path: string, + cb: Callback, + mode: File_Flags = {.Read}, + perm: Permissions = Permissions_Default_File, + dir: Handle = CWD, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_open(path, cb, mode, perm, dir, l) + exec(op) + return op +} + +/* +Opens a file and associates it with the event loop. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- path: Path to the file, if not absolute: relative from `dir` +- p: User data, the callback will receive this as its second argument +- cb: The callback to be called when the operation finishes, `Operation.open` will contain results +- mode: File open mode flags, defaults to read-only +- perm: Permissions to use when creating a file, defaults to read+write for everybody +- dir: Directory that `path` is relative from (if it is relative), defaults to the current working directory +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +open_poly :: #force_inline proc( + path: string, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + mode: File_Flags = {.Read}, + perm: Permissions = Permissions_Default_File, + dir: Handle = CWD, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_open(path, _poly_cb(C, T), mode, perm, dir, l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Opens a file and associates it with the event loop. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- path: Path to the file, if not absolute: relative from `dir` +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- cb: The callback to be called when the operation finishes, `Operation.open` will contain results +- mode: File open mode flags, defaults to read-only +- perm: Permissions to use when creating a file, defaults to read+write for everybody +- dir: Directory that `path` is relative from (if it is relative), defaults to the current working directory +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +open_poly2 :: #force_inline proc( + path: string, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + mode: File_Flags = {.Read}, + perm: Permissions = Permissions_Default_File, + dir: Handle = CWD, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_open(path, _poly_cb2(C, T, T2), mode, perm, dir, l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Asynchronously opens a file and associates it with the event loop. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- path: Path to the file, if not absolute: relative from `dir` +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- p3: User data, the callback will receive this as its fourth argument +- cb: The callback to be called when the operation finishes, `Operation.open` will contain results +- mode: File open mode flags, defaults to read-only +- perm: Permissions to use when creating a file, defaults to read+write for everybody +- dir: Directory that `path` is relative from (if it is relative), defaults to the current working directory +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +open_poly3 :: #force_inline proc( + path: string, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + mode: File_Flags = {.Read}, + perm: Permissions = Permissions_Default_File, + dir: Handle = CWD, + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_open(path, _poly_cb3(C, T, T2, T3), mode, perm, dir, l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +File_Type :: enum { + // File type could not be determined. + Undetermined, + // Regular file. + Regular, + // Directory. + Directory, + // Symbolic link. + Symlink, + // Pipe or socket. + Pipe_Or_Socket, + // Character or block device. + Device, +} + +Stat :: struct { + // Handle to stat. + handle: Handle, + + // The type of the file. + type: File_Type, + // Size of the file in bytes. + size: i64 `fmt:"M"`, + + // An error, if it occurred. + err: FS_Error, + + // Implementation specifics, private. + _impl: _Stat `fmt:"-"`, +} + +/* +Retrieves and preps an operation to stat a handle without executing it. + +Executing can then be done with the `exec` procedure. + +Any user data can be set on the returned operation's `user_data` field. + +Inputs: +- handle: Handle to retrieve stat +- cb: The callback to be called when the operation finishes, `Operation.stat` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +prep_stat :: #force_inline proc( + handle: Handle, + cb: Callback, + l: ^Event_Loop = nil, +) -> ^Operation { + op := _prep(l, cb, .Stat) + op.stat.handle = handle + return op +} + +/* +Stats a handle. + +Any user data can be set on the returned operation's `user_data` field. +Polymorphic variants for type safe user data are available under `stat_poly`, `stat_poly2`, and `stat_poly3`. + +Inputs: +- handle: Handle to retrieve status information for +- cb: The callback to be called when the operation finishes, `Operation.stat` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +stat :: #force_inline proc( + handle: Handle, + cb: Callback, + l: ^Event_Loop = nil, +) -> ^Operation { + op := prep_stat(handle, cb, l) + exec(op) + return op +} + +/* +Stats a handle. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to retrieve status information for +- p: User data, the callback will receive this as its second argument +- cb: The callback to be called when the operation finishes, `Operation.stat` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +stat_poly :: #force_inline proc( + handle: Handle, + p: $T, + cb: $C/proc(op: ^Operation, p: T), + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_stat(handle, _poly_cb(C, T), l) + _put_user_data(op, cb, p) + exec(op) + + return op +} + +/* +Stats a handle. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to retrieve status information for +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- cb: The callback to be called when the operation finishes, `Operation.stat` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +stat_poly2 :: #force_inline proc( + handle: Handle, + p: $T, p2: $T2, + cb: $C/proc(op: ^Operation, p: T, p2: T2), + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_stat(handle, _poly_cb2(C, T, T2), l) + _put_user_data2(op, cb, p, p2) + exec(op) + + return op +} + +/* +Stats a handle. + +This procedure uses polymorphism for type safe user data up to a certain size. + +Inputs: +- handle: Handle to retrieve status information for +- p: User data, the callback will receive this as its second argument +- p2: User data, the callback will receive this as its third argument +- p3: User data, the callback will receive this as its fourth argument +- cb: The callback to be called when the operation finishes, `Operation.stat` will contain results +- l: Event loop to associate the operation with, defaults to the current thread's loop + +Returns: A non-nil pointer to the operation, alive until the callback is called +*/ +stat_poly3 :: #force_inline proc( + handle: Handle, + p: $T, p2: $T2, p3: $T3, + cb: $C/proc(op: ^Operation, p: T, p2: T2, p3: T3), + l: ^Event_Loop = nil, +) -> ^Operation where size_of(T) + size_of(T2) + size_of(T3) <= size_of(rawptr) * MAX_USER_ARGUMENTS { + + op := prep_stat(handle, _poly_cb3(C, T, T2, T3), l) + _put_user_data3(op, cb, p, p2, p3) + exec(op) + + return op +} + +_prep :: proc(l: ^Event_Loop, cb: Callback, type: Operation_Type) -> ^Operation { + assert(cb != nil) + assert(type != .None) + l := l + if l == nil { l = _current_thread_event_loop() } + operation := pool.get(&l.operation_pool) + operation.l = l + operation.type = type + operation.cb = cb + return operation +} + +_poly_cb :: #force_inline proc($C: typeid, $T: typeid) -> proc(^Operation) { + return proc(op: ^Operation) { + ptr := uintptr(&op.user_data) + cb := intrinsics.unaligned_load((^C)(rawptr(ptr))) + p := intrinsics.unaligned_load((^T)(rawptr(ptr + size_of(C)))) + cb(op, p) + } +} + +_poly_cb2 :: #force_inline proc($C: typeid, $T: typeid, $T2: typeid) -> proc(^Operation) { + return proc(op: ^Operation) { + ptr := uintptr(&op.user_data) + cb := intrinsics.unaligned_load((^C) (rawptr(ptr))) + p := intrinsics.unaligned_load((^T) (rawptr(ptr + size_of(C)))) + p2 := intrinsics.unaligned_load((^T2)(rawptr(ptr + size_of(C) + size_of(T)))) + cb(op, p, p2) + } +} + +_poly_cb3 :: #force_inline proc($C: typeid, $T: typeid, $T2: typeid, $T3: typeid) -> proc(^Operation) { + return proc(op: ^Operation) { + ptr := uintptr(&op.user_data) + cb := intrinsics.unaligned_load((^C) (rawptr(ptr))) + p := intrinsics.unaligned_load((^T) (rawptr(ptr + size_of(C)))) + p2 := intrinsics.unaligned_load((^T2)(rawptr(ptr + size_of(C) + size_of(T)))) + p3 := intrinsics.unaligned_load((^T3)(rawptr(ptr + size_of(C) + size_of(T) + size_of(T2)))) + cb(op, p, p2, p3) + } +} + +_put_user_data :: #force_inline proc(op: ^Operation, cb: $C, p: $T) { + ptr := uintptr(&op.user_data) + intrinsics.unaligned_store((^C)(rawptr(ptr)), cb) + intrinsics.unaligned_store((^T)(rawptr(ptr + size_of(cb))), p) +} + +_put_user_data2 :: #force_inline proc(op: ^Operation, cb: $C, p: $T, p2: $T2) { + ptr := uintptr(&op.user_data) + intrinsics.unaligned_store((^C) (rawptr(ptr)), cb) + intrinsics.unaligned_store((^T) (rawptr(ptr + size_of(cb))), p) + intrinsics.unaligned_store((^T2)(rawptr(ptr + size_of(cb) + size_of(p))), p2) +} + +_put_user_data3 :: #force_inline proc(op: ^Operation, cb: $C, p: $T, p2: $T2, p3: $T3) { + ptr := uintptr(&op.user_data) + intrinsics.unaligned_store((^C) (rawptr(ptr)), cb) + intrinsics.unaligned_store((^T) (rawptr(ptr + size_of(cb))), p) + intrinsics.unaligned_store((^T2)(rawptr(ptr + size_of(cb) + size_of(p))), p2) + intrinsics.unaligned_store((^T3)(rawptr(ptr + size_of(cb) + size_of(p) + size_of(p2))), p3) +} diff --git a/core/nbio/uring/doc.odin b/core/nbio/uring/doc.odin new file mode 100644 index 000000000..440b294d6 --- /dev/null +++ b/core/nbio/uring/doc.odin @@ -0,0 +1,88 @@ +/* +Wrapper/convenience package over the raw io_uring syscalls, providing help with setup, creation, and operating the ring. + +The following example shows a simple `cat` program implementation using the package. + +Example: + package main + + import "base:runtime" + + import "core:fmt" + import "core:os" + import "core:sys/linux" + import "core:nbio/uring" + + Request :: struct { + path: cstring, + buffer: []byte, + completion: linux.IO_Uring_CQE, + } + + main :: proc() { + if len(os.args) < 2 { + fmt.eprintfln("Usage: %s [file name] <[file name] ...>", os.args[0]) + os.exit(1) + } + + requests := make_soa(#soa []Request, len(os.args)-1) + defer delete(requests) + + ring: uring.Ring + params := uring.DEFAULT_PARAMS + err := uring.init(&ring, ¶ms) + fmt.assertf(err == nil, "uring.init: %v", err) + defer uring.destroy(&ring) + + for &request, i in requests { + request.path = runtime.args__[i+1] + // sets up a read requests and adds it to the ring buffer. + submit_read_request(request.path, &request.buffer, &ring) + } + + ulen := u32(len(requests)) + + // submit the requests and wait for them to complete right away. + n, serr := uring.submit(&ring, ulen) + fmt.assertf(serr == nil, "uring.submit: %v", serr) + assert(n == ulen) + + // copy the completed requests out of the ring buffer. + cn := uring.copy_cqes_ready(&ring, requests.completion[:ulen]) + assert(cn == ulen) + + for request in requests { + // check result of the requests. + fmt.assertf(request.completion.res >= 0, "read %q failed: %v", request.path, linux.Errno(-request.completion.res)) + // print out. + fmt.print(string(request.buffer)) + + delete(request.buffer) + } + } + + submit_read_request :: proc(path: cstring, buffer: ^[]byte, ring: ^uring.Ring) { + fd, err := linux.open(path, {}) + fmt.assertf(err == nil, "open(%q): %v", path, err) + + file_sz := get_file_size(fd) + + buffer^ = make([]byte, file_sz) + + _, ok := uring.read(ring, 0, fd, buffer^, 0) + assert(ok, "could not get read sqe") + } + + get_file_size :: proc(fd: linux.Fd) -> uint { + st: linux.Stat + err := linux.fstat(fd, &st) + fmt.assertf(err == nil, "fstat: %v", err) + + if linux.S_ISREG(st.mode) { + return uint(st.size) + } + + panic("not a regular file") + } +*/ +package uring diff --git a/core/nbio/uring/ops.odin b/core/nbio/uring/ops.odin new file mode 100644 index 000000000..7b3392e98 --- /dev/null +++ b/core/nbio/uring/ops.odin @@ -0,0 +1,847 @@ +package uring + +import "core:sys/linux" + +// Do not perform any I/O. This is useful for testing the performance of the uring implementation itself. +nop :: proc(ring: ^Ring, user_data: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .NOP + sqe.user_data = user_data + + ok = true + return +} + +// Vectored read operation, see also readv(2). +readv :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, iovs: []linux.IO_Vec, off: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .READV + sqe.fd = fd + sqe.addr = cast(u64)uintptr(raw_data(iovs)) + sqe.len = u32(len(iovs)) + sqe.off = off + sqe.user_data = user_data + + ok = true + return +} + +// Vectored write operation, see also writev(2). +writev :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, iovs: []linux.IO_Vec, off: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .WRITEV + sqe.fd = fd + sqe.addr = cast(u64)uintptr(raw_data(iovs)) + sqe.len = u32(len(iovs)) + sqe.off = off + sqe.user_data = user_data + + ok = true + return +} + +read_fixed :: proc() { + unimplemented() +} + +write_fixed :: proc() { + unimplemented() +} + +/* +File sync. See also fsync(2). + +Optionally off and len can be used to specify a range within the file to be synced rather than syncing the entire file, which is the default behavior. + +Note that, while I/O is initiated in the order in which it appears in the submission queue, completions are unordered. +For example, an application which places a write I/O followed by an fsync in the submission queue cannot expect the fsync to apply to the write. +The two operations execute in parallel, so the fsync may complete before the write is issued to the storage. +The same is also true for previously issued writes that have not completed prior to the fsync. +To enforce ordering one may utilize linked SQEs, +IOSQE_IO_DRAIN or wait for the arrival of CQEs of requests which have to be ordered before a given request before submitting its SQE. +*/ +fsync :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, flags: linux.IO_Uring_Fsync_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .FSYNC + sqe.fsync_flags = flags + sqe.fd = fd + sqe.user_data = user_data + + ok = true + return +} + +/* +Poll the fd specified in the submission queue entry for the events specified in the poll_events field. + +Unlike poll or epoll without EPOLLONESHOT, by default this interface always works in one shot mode. +That is, once the poll operation is completed, it will have to be resubmitted. + +If IORING_POLL_ADD_MULTI is set in the SQE len field, then the poll will work in multi shot mode instead. +That means it'll repatedly trigger when the requested event becomes true, and hence multiple CQEs can be generated from this single SQE. +The CQE flags field will have IORING_CQE_F_MORE set on completion if the application should expect further CQE entries from the original request. +If this flag isn't set on completion, then the poll request has been terminated and no further events will be generated. +This mode is available since 5.13. + +This command works like an async poll(2) and the completion event result is the returned mask of events. + +Without IORING_POLL_ADD_MULTI and the initial poll operation with IORING_POLL_ADD_MULTI the operation is level triggered, +i.e. if there is data ready or events pending etc. +at the time of submission a corresponding CQE will be posted. +Potential further completions beyond the first caused by a IORING_POLL_ADD_MULTI are edge triggered. +*/ +poll_add :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, events: linux.Fd_Poll_Events, flags: linux.IO_Uring_Poll_Add_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .POLL_ADD + sqe.fd = fd + sqe.poll_events = events + sqe.poll_flags = flags + sqe.user_data = user_data + + ok = true + return +} + +/* +Remove an existing poll request. + +If found, the res field of the struct io_uring_cqe will contain 0. +If not found, res will contain -ENOENT, or -EALREADY if the poll request was in the process of completing already. +*/ +poll_remove :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, events: linux.Fd_Poll_Events) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .POLL_REMOVE + sqe.fd = fd + sqe.poll_events = events + sqe.user_data = user_data + + ok = true + return +} + +/* +Update the events of an existing poll request. + +The request will update an existing poll request with the mask of events passed in with this request. +The lookup is based on the user_data field of the original SQE submitted. + +Updating an existing poll is available since 5.13. +*/ +poll_update_events :: proc(ring: ^Ring, user_data: u64, orig_user_data: u64, fd: linux.Fd, events: linux.Fd_Poll_Events) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .POLL_REMOVE + sqe.fd = fd + sqe.addr = orig_user_data + sqe.poll_events = events + sqe.user_data = user_data + sqe.poll_flags = {.UPDATE_EVENTS} + + ok = true + return +} + +/* +Update the user data of an existing poll request. + +The request will update the user_data of an existing poll request based on the value passed. + +Updating an existing poll is available since 5.13. +*/ +poll_update_user_data :: proc(ring: ^Ring, user_data: u64, orig_user_data: u64, new_user_data: u64, fd: linux.Fd) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .POLL_REMOVE + sqe.fd = fd + sqe.off = orig_user_data + sqe.addr = new_user_data + sqe.user_data = user_data + sqe.poll_flags = {.UPDATE_USER_DATA} + + ok = true + return +} + +/* +Add, remove or modify entries in the interest list of epoll(7). + +See epoll_ctl(2) for details of the system call. + +Available since 5.6. +*/ +epoll_ctl :: proc(ring: ^Ring, user_data: u64, epfd: linux.Fd, op: linux.EPoll_Ctl_Opcode, fd: linux.Fd, event: ^linux.EPoll_Event) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .EPOLL_CTL + sqe.fd = epfd + sqe.off = u64(fd) + sqe.epoll_ctl_op = op + sqe.addr = cast(u64)uintptr(event) + sqe.user_data = user_data + + ok = true + return +} + +sync_file_range :: proc() { + unimplemented() +} + +/* +Issue the equivalent of a sendmsg(2) system call. + +See also sendmsg(2) for the general description of the related system call. + +poll_first: if set, uring will assume the socket is currently full and attempting to send data will be unsuccessful. +For this case, uring will arm internal poll and trigger a send of the data when there is enough space available. +This initial send attempt can be wasteful for the case where the socket is expected to be full, setting this flag will +bypass the initial send attempt and go straight to arming poll. +If poll does indicate that data can be sent, the operation will proceed. + +Available since 5.3. +*/ +sendmsg :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, msghdr: ^linux.Msg_Hdr, flags: linux.Socket_Msg, poll_first := false) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .SENDMSG + sqe.fd = fd + sqe.addr = cast(u64)uintptr(msghdr) + sqe.msg_flags = flags + sqe.user_data = user_data + sqe.sq_send_recv_flags = {.RECVSEND_POLL_FIRST} if poll_first else {} + + ok = true + return +} + +/* +Works just like sendmsg, but receives instead of sends. + +poll_first: If set, uring will assume the socket is currently empty and attempting to receive data will be unsuccessful. +For this case, uring will arm internal poll and trigger a receive of the data when the socket has data to be read. +This initial receive attempt can be wasteful for the case where the socket is expected to be empty, setting this flag will bypass the initial receive attempt and go straight to arming poll. +If poll does indicate that data is ready to be received, the operation will proceed. + +Available since 5.3. +*/ +recvmsg :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, msghdr: ^linux.Msg_Hdr, flags: linux.Socket_Msg, poll_first := false) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .RECVMSG + sqe.fd = fd + sqe.addr = cast(u64)uintptr(msghdr) + sqe.msg_flags = flags + sqe.user_data = user_data + sqe.sq_send_recv_flags = {.RECVSEND_POLL_FIRST} if poll_first else {} + + ok = true + return +} + +/* +Issue the equivalent of a send(2) system call. + +See also send(2) for the general description of the related system call. + +poll_first: If set, uring will assume the socket is currently full and attempting to send data will be unsuccessful. +For this case, uring will arm internal poll and trigger a send of the data when there is enough space available. +This initial send attempt can be wasteful for the case where the socket is expected to be full, setting this flag will bypass the initial send attempt and go straight to arming poll. +If poll does indicate that data can be sent, the operation will proceed. + +Available since 5.6. +*/ +send :: proc(ring: ^Ring, user_data: u64, sockfd: linux.Fd, buf: []byte, flags: linux.Socket_Msg, poll_first := false) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .SEND + sqe.fd = sockfd + sqe.addr = cast(u64)uintptr(raw_data(buf)) + sqe.len = u32(len(buf)) + sqe.msg_flags = flags + sqe.user_data = user_data + sqe.sq_send_recv_flags = {.RECVSEND_POLL_FIRST} if poll_first else {} + + ok = true + return +} + +sendto :: proc(ring: ^Ring, user_data: u64, sockfd: linux.Fd, buf: []byte, flags: linux.Socket_Msg, dest: ^$T, poll_first := false) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) + where T == linux.Sock_Addr_In || T == linux.Sock_Addr_In6 || T == linux.Sock_Addr_Un || T == linux.Sock_Addr_Any { + + sqe = send(ring, user_data, sockfd, buf, flags, poll_first) or_return + sqe.addr2 = u64(uintptr(dest)) + sqe.addr_len = u16(size_of(T)) + + ok = true + return +} + +/* +Works just like send, but receives instead of sends. + +poll_first: If set, uring will assume the socket is currently empty and attempting to receive data will be unsuccessful. +For this case, uring will arm internal poll and trigger a receive of the data when the socket has data to be read. +This initial receive attempt can be wasteful for the case where the socket is expected to be empty, setting this flag will bypass the initial receive attempt and go straight to arming poll. +If poll does indicate that data is ready to be received, the operation will proceed. + +Available since 5.6. +*/ +recv :: proc(ring: ^Ring, user_data: u64, sockfd: linux.Fd, buf: []byte, flags: linux.Socket_Msg, poll_first := false) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .RECV + sqe.fd = sockfd + sqe.addr = cast(u64)uintptr(raw_data(buf)) + sqe.len = cast(u32)uintptr(len(buf)) + sqe.msg_flags = flags + sqe.user_data = user_data + sqe.sq_send_recv_flags = {.RECVSEND_POLL_FIRST} if poll_first else {} + + ok = true + return +} + +/* +Register a timeout operation. + +The timeout will complete when either the timeout expires, or after the specified number of +events complete (if `count` is greater than `0`). + +`flags` may be `0` for a relative timeout, or `IORING_TIMEOUT_ABS` for an absolute timeout. + +The completion event result will be `-ETIME` if the timeout completed through expiration, +`0` if the timeout completed after the specified number of events, or `-ECANCELED` if the +timeout was removed before it expired. + +uring timeouts use the `CLOCK.MONOTONIC` clock source. +*/ +timeout :: proc(ring: ^Ring, user_data: u64, ts: ^linux.Time_Spec, count: u32, flags: linux.IO_Uring_Timeout_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .TIMEOUT + sqe.fd = -1 + sqe.addr = cast(u64)uintptr(ts) + sqe.len = 1 + sqe.off = u64(count) + sqe.timeout_flags = flags + sqe.user_data = user_data + + ok = true + return +} + +/* +Rmove an existing timeout operation. + +The timeout is identified by it's `user_data`. + +The completion event result will be `0` if the timeout was found and cancelled successfully, +`-EBUSY` if the timeout was found but expiration was already in progress, or +`-ENOENT` if the timeout was not found. +*/ +timeout_remove :: proc(ring: ^Ring, user_data: u64, timeout_user_data: u64, flags: linux.IO_Uring_Timeout_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .TIMEOUT_REMOVE + sqe.fd = -1 + sqe.addr = timeout_user_data + sqe.timeout_flags = flags + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of an accept4(2) system call. + +See also accept4(2) for the general description of the related system call. + +If the file_index field is set to a positive number, the file won't be installed into the normal file table as usual +but will be placed into the fixed file table at index file_index - 1. +In this case, instead of returning a file descriptor, the result will contain either 0 on success or an error. +If the index points to a valid empty slot, the installation is guaranteed to not fail. +If there is already a file in the slot, it will be replaced, similar to IORING_OP_FILES_UPDATE. +Please note that only uring has access to such files and no other syscall can use them. See IOSQE_FIXED_FILE and IORING_REGISTER_FILES. + +Available since 5.5. +*/ +accept :: proc(ring: ^Ring, user_data: u64, sockfd: linux.Fd, addr: ^$T, addr_len: ^i32, flags: linux.Socket_FD_Flags, file_index: u32 = 0) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) +where T == linux.Sock_Addr_In || T == linux.Sock_Addr_In6 || T == linux.Sock_Addr_Un || T == linux.Sock_Addr_Any { + + sqe = get_sqe(ring) or_return + sqe.opcode = .ACCEPT + sqe.fd = sockfd + sqe.addr = cast(u64)uintptr(addr) + sqe.off = cast(u64)uintptr(addr_len) + sqe.accept_flags = flags + sqe.user_data = user_data + sqe.file_index = file_index + + ok = true + return +} + +/* +Attempt to cancel an already issued request. + +The request is identified by it's user data. + +The cancelation request will complete with one of the following results codes. + +If found, the res field of the cqe will contain 0. +If not found, res will contain -ENOENT. + +If found and attempted canceled, the res field will contain -EALREADY. +In this case, the request may or may not terminate. +In general, requests that are interruptible (like socket IO) will get canceled, while disk IO requests cannot be canceled if already started. + +Available since 5.5. +*/ +async_cancel :: proc(ring: ^Ring, orig_user_data: u64, user_data: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .ASYNC_CANCEL + sqe.addr = orig_user_data + sqe.user_data = user_data + + ok = true + return +} + +/* +Adds a link timeout operation. + +You need to set linux.IOSQE_IO_LINK to flags of the target operation +and then call this method right after the target operation. +See https://lwn.net/Articles/803932/ for detail. + +If the dependent request finishes before the linked timeout, the timeout +is canceled. If the timeout finishes before the dependent request, the +dependent request will be canceled. + +The completion event result of the link_timeout will be +`-ETIME` if the timeout finishes before the dependent request +(in this case, the completion event result of the dependent request will +be `-ECANCELED`), or +`-EALREADY` if the dependent request finishes before the linked timeout. + +Available since 5.5. +*/ +link_timeout :: proc(ring: ^Ring, user_data: u64, ts: ^linux.Time_Spec, flags: linux.IO_Uring_Timeout_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring, 0) or_return + sqe.opcode = .LINK_TIMEOUT + sqe.fd = -1 + sqe.addr = cast(u64)uintptr(ts) + sqe.len = 1 + sqe.timeout_flags = flags + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of a connect(2) system call. + +See also connect(2) for the general description of the related system call. + +Available since 5.5. +*/ +connect :: proc(ring: ^Ring, user_data: u64, sockfd: linux.Fd, addr: ^$T) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) +where T == linux.Sock_Addr_In || T == linux.Sock_Addr_In6 || T == linux.Sock_Addr_Un || T == linux.Sock_Addr_Any { + + sqe = get_sqe(ring) or_return + sqe.opcode = .CONNECT + sqe.fd = sockfd + sqe.addr = cast(u64)uintptr(addr) + sqe.off = size_of(T) + sqe.user_data = user_data + + ok = true + return +} + +fallocate :: proc() { + unimplemented() +} + +fadvise :: proc() { + unimplemented() +} + +/* +Issue the equivalent of a madvise(2) system call. + +See also madvise(2) for the general description of the related system call. + +Available since 5.6. +*/ +madvise :: proc(ring: ^Ring, user_data: u64, addr: rawptr, size: u32, advise: linux.MAdvice) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .MADVISE + sqe.addr = u64(uintptr(addr)) + sqe.len = size + sqe.fadvise_advice = cast(u32)transmute(int)advise + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of a openat(2) system call. + +See also openat(2) for the general description of the related system call. + +Available since 5.6. + +If the file_index is set to a positive number, +the file won't be installed into the normal file table as usual but will be placed into the fixed file table at index file_index - 1. +In this case, instead of returning a file descriptor, the result will contain either 0 on success or an error. +If the index points to a valid empty slot, the installation is guaranteed to not fail. +If there is already a file in the slot, it will be replaced, similar to IORING_OP_FILES_UPDATE. +Please note that only uring has access to such files and no other syscall can use them. +See IOSQE_FIXED_FILE and IORING_REGISTER_FILES. + +Available since 5.15. +*/ +openat :: proc(ring: ^Ring, user_data: u64, dirfd: linux.Fd, path: cstring, mode: linux.Mode, flags: linux.Open_Flags, file_index: u32 = 0) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .OPENAT + sqe.fd = dirfd + sqe.addr = cast(u64)transmute(uintptr)path + sqe.len = transmute(u32)mode + sqe.open_flags = flags + sqe.user_data = user_data + sqe.file_index = file_index + + ok = true + return +} + +openat2 :: proc() { + unimplemented() +} + +/* +Issue the equivalent of a close(2) system call. + +See also close(2) for the general description of the related system call. + +Available since 5.6. + +If the file_index field is set to a positive number, this command can be used to close files that were +direct opened through IORING_OP_OPENAT, IORING_OP_OPENAT2, or IORING_OP_ACCEPT using the uring specific direct descriptors. +Note that only one of the descriptor fields may be set. +The direct close feature is available since the 5.15 kernel, where direct descriptors were introduced. +*/ +close :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, file_index: u32 = 0) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .CLOSE + sqe.fd = fd + sqe.user_data = user_data + sqe.file_index = file_index + + ok = true + return +} + +/* +Issue the equivalent of a statx(2) system call. + +See also statx(2) for the general description of the related system call. + +Available since 5.6. +*/ +statx :: proc(ring: ^Ring, user_data: u64, dirfd: linux.Fd, pathname: cstring, flags: linux.FD_Flags, mask: linux.Statx_Mask, buf: ^linux.Statx) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .STATX + sqe.fd = dirfd + sqe.addr = cast(u64)transmute(uintptr)pathname + sqe.statx_flags = flags + sqe.statx_mask = mask + sqe.statx = buf + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of a pread(2) system call. + +If offset is set to -1 , the offset will use (and advance) the file position, like the read(2) system calls. +These are non-vectored versions of the IORING_OP_READV and IORING_OP_WRITEV opcodes. +See also read(2) for the general description of the related system call. + +Available since 5.6. +*/ +read :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, buf: []u8, offset: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .READ + sqe.fd = fd + sqe.addr = cast(u64)uintptr(raw_data(buf)) + sqe.len = u32(len(buf)) + sqe.off = offset + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of a pwrite(2) system call. + +If offset is set to -1 , the offset will use (and advance) the file position, like the read(2) system calls. +These are non-vectored versions of the IORING_OP_READV and IORING_OP_WRITEV opcodes. +See also write(2) for the general description of the related system call. + +Available since 5.6. +*/ +write :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, buf: []u8, offset: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .WRITE + sqe.fd = fd + sqe.addr = cast(u64)uintptr(raw_data(buf)) + sqe.len = u32(len(buf)) + sqe.off = offset + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of a splice(2) system call. + +A sentinel value of -1 is used to pass the equivalent of a NULL for the offsets to splice(2). + +Please note that one of the file descriptors must refer to a pipe. +See also splice(2) for the general description of the related system call. + +Available since 5.7. + +*/ +splice :: proc(ring: ^Ring, user_data: u64, fd_in: linux.Fd, off_in: i64, fd_out: linux.Fd, off_out: i64, len: u32, flags: linux.IO_Uring_Splice_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .SPLICE + sqe.splice_fd_in = fd_in + sqe.splice_off_in = cast(u64)off_in + sqe.fd = fd_out + sqe.off = cast(u64)off_out + sqe.len = len + sqe.splice_flags = flags + sqe.user_data = user_data + + ok = true + return +} + +/* +Issue the equivalent of a tee(2) system call. + +Please note that both of the file descriptors must refer to a pipe. +See also tee(2) for the general description of the related system call. + +Available since 5.8. +*/ +tee :: proc(ring: ^Ring, user_data: u64, fd_in: linux.Fd, fd_out: linux.Fd, len: u32, flags: linux.IO_Uring_Splice_Flags) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .TEE + sqe.splice_fd_in = fd_in + sqe.fd = fd_out + sqe.len = len + sqe.splice_flags = flags + sqe.user_data = user_data + + ok = true + return +} + +/* +This command is an alternative to using IORING_REGISTER_FILES_UPDATE which then works in an async fashion, like the rest of the uring commands. + +Note that the array of file descriptors pointed to in addr must remain valid until this operation has completed. + +Available since 5.6. +*/ +files_update :: proc(ring: ^Ring, user_data: u64, fds: []linux.Fd, off: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .FILES_UPDATE + sqe.addr = cast(u64)uintptr(raw_data(fds)) + sqe.len = cast(u32)len(fds) + sqe.off = off + sqe.user_data = user_data + + ok = true + return +} + +provide_buffers :: proc() { + unimplemented() +} + +remove_buffers :: proc() { + unimplemented() +} + +/* +Issue the equivalent of a shutdown(2) system call. + +Available since 5.11. +*/ +shutdown :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, how: linux.Shutdown_How) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .SHUTDOWN + sqe.fd = fd + sqe.shutdown_how = how + sqe.user_data = user_data + + ok = true + return +} + +renameat :: proc() { + unimplemented() +} + +unlinkat :: proc() { + unimplemented() +} + +mkdirat :: proc() { + unimplemented() +} + +symlinkat :: proc() { + unimplemented() +} + +linkat :: proc() { + unimplemented() +} + +msg_ring :: proc() { + unimplemented() +} + +/* +Issue the equivalent of a socket(2) system call. + +See also socket(2) for the general description of the related system call. + +Available since 5.19. + +If the file_index field is set to a positive number, the file won't be installed into the normal file +table as usual but will be placed into the fixed file table at index file_index - 1. +In this case, instead of returning a file descriptor, the result will contain either 0 on success or an error. +If the index points to a valid empty slot, the installation is guaranteed to not fail. +If there is already a file in the slot, it will be replaced, similar to IORING_OP_FILES_UPDATE. +Please note that only uring has access to such files and no other syscall can use them. +See IOSQE_FIXED_FILE and IORING_REGISTER_FILES. +*/ +socket :: proc(ring: ^Ring, user_data: u64, domain: linux.Address_Family, socktype: linux.Socket_Type, protocol: linux.Protocol, file_index: u32 = 0) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .SOCKET + sqe.user_data = user_data + sqe.fd = cast(linux.Fd)domain + sqe.off = cast(u64)socktype + sqe.len = cast(u32)protocol + sqe.rw_flags = {} + sqe.file_index = file_index + + ok = true + return +} + +uring_cmd :: proc() { + unimplemented() +} + +send_zc :: proc() { + unimplemented() +} + +sendmsg_zc :: proc() { + unimplemented() +} + +waitid :: proc() { + unimplemented() +} + +setxattr :: proc() { + unimplemented() +} + +getxattr :: proc() { + unimplemented() +} + +fsetxattr :: proc() { + unimplemented() +} + +fgetxattr :: proc() { + unimplemented() +} + +/* +Issues the equivalent of the bind(2) system call. + +Available since 6.11. +*/ +bind :: proc(ring: ^Ring, user_data: u64, sock: linux.Fd, addr: ^$T) -> (sqe: linux.IO_Uring_SQE, ok: bool) + where + T == linux.Sock_Addr_In || + T == linux.Sock_Addr_In6 || + T == linux.Sock_Addr_Un || + T == linux.Sock_Addr_Any +{ + sqe = get_sqe(ring) or_return + sqe.opcode = .BIND + sqe.user_data = user_data + sqe.fd = sock + sqe.addr = cast(u64)uintptr(addr) + sqe.addr2 = size_of(T) + + ok = true + return +} + +/* +Issues the equivalent of the listen(2) system call. + +fd must contain the file descriptor of the socket and addr must contain the backlog parameter, i.e. the maximum amount of pending queued connections. + +Available since 6.11. +*/ +listen :: proc(ring: ^Ring, user_data: u64, fd: linux.Fd, backlog: u64) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sqe = get_sqe(ring) or_return + sqe.opcode = .LISTEN + sqe.user_data = user_data + sqe.fd = fd + sqe.addr = backlog + + ok = true + return +} + +ftruncate :: proc() { + unimplemented() +} + +read_multishot :: proc() { + unimplemented() +} + +futex_wait :: proc() { + unimplemented() +} + +futex_wake :: proc() { + unimplemented() +} + +futex_waitv :: proc() { + unimplemented() +} + +fixed_fd_install :: proc() { + unimplemented() +} + +fixed_file :: proc() { + unimplemented() +} diff --git a/core/nbio/uring/uring.odin b/core/nbio/uring/uring.odin new file mode 100644 index 000000000..8e4315e6a --- /dev/null +++ b/core/nbio/uring/uring.odin @@ -0,0 +1,294 @@ +package uring + +import "core:math" +import "core:sync" +import "core:sys/linux" + +DEFAULT_THREAD_IDLE_MS :: 1000 +DEFAULT_ENTRIES :: 32 +MAX_ENTRIES :: 4096 + +Ring :: struct { + fd: linux.Fd, + sq: Submission_Queue, + cq: Completion_Queue, + flags: linux.IO_Uring_Setup_Flags, + features: linux.IO_Uring_Features, +} + +DEFAULT_PARAMS :: linux.IO_Uring_Params { + sq_thread_idle = DEFAULT_THREAD_IDLE_MS, +} + +// Initialize and setup an uring, `entries` must be a power of 2 between 1 and 4096. +init :: proc(ring: ^Ring, params: ^linux.IO_Uring_Params, entries: u32 = DEFAULT_ENTRIES) -> (err: linux.Errno) { + assert(entries <= MAX_ENTRIES, "too many entries") + assert(entries != 0, "entries must be positive") + assert(math.is_power_of_two(int(entries)), "entries must be a power of two") + + fd := linux.io_uring_setup(entries, params) or_return + defer if err != nil { linux.close(fd) } + + if .SINGLE_MMAP not_in params.features { + // NOTE: Could support this, but currently isn't. + err = .ENOSYS + return + } + + assert(.CQE32 not_in params.flags, "unsupported flag") // NOTE: Could support this by making IO_Uring generic. + assert(.SQE128 not_in params.flags, "unsupported flag") // NOTE: Could support this by making IO_Uring generic. + + sq := submission_queue_make(fd, params) or_return + + ring.fd = fd + ring.sq = sq + ring.cq = completion_queue_make(fd, params, &sq) + ring.flags = params.flags + ring.features = params.features + + return +} + +destroy :: proc(ring: ^Ring) { + assert(ring.fd >= 0) + submission_queue_destroy(&ring.sq) + linux.close(ring.fd) + ring.fd = -1 +} + +// Returns a pointer to a vacant submission queue entry, or nil if the submission queue is full. +// NOTE: extra is so you can make sure there is space for related entries, defaults to 1 so +// a link timeout op can always be added after another. +get_sqe :: proc(ring: ^Ring, extra: int = 1) -> (sqe: ^linux.IO_Uring_SQE, ok: bool) { + sq := &ring.sq + head: u32 = sync.atomic_load_explicit(sq.head, .Acquire) + next := sq.sqe_tail + 1 + + if int(next - head) > len(sq.sqes)-extra { + sqe = nil + ok = false + return + } + + sqe = &sq.sqes[sq.sqe_tail & sq.mask] + sqe^ = {} + + sq.sqe_tail = next + ok = true + return +} + +free_space :: proc(ring: ^Ring) -> int { + sq := &ring.sq + head := sync.atomic_load_explicit(sq.head, .Acquire) + next := sq.sqe_tail + 1 + free := len(sq.sqes) - int(next - head) + assert(free >= 0) + return free +} + +// Sync internal state with kernel ring state on the submission queue side. +// Returns the number of all pending events in the submission queue. +// Rationale is to determine that an enter call is needed. +flush_sq :: proc(ring: ^Ring) -> (n_pending: u32) { + sq := &ring.sq + to_submit := sq.sqe_tail - sq.sqe_head + if to_submit != 0 { + tail := sq.tail^ + i: u32 = 0 + for ; i < to_submit; i += 1 { + sq.array[tail & sq.mask] = sq.sqe_head & sq.mask + tail += 1 + sq.sqe_head += 1 + } + sync.atomic_store_explicit(sq.tail, tail, .Release) + } + n_pending = sq_ready(ring) + return +} + +// Returns true if we are not using an SQ thread (thus nobody submits but us), +// or if IORING_SQ_NEED_WAKEUP is set and the SQ thread must be explicitly awakened. +// For the latter case, we set the SQ thread wakeup flag. +// Matches the implementation of sq_ring_needs_enter() in liburing. +sq_ring_needs_enter :: proc(ring: ^Ring, flags: ^linux.IO_Uring_Enter_Flags) -> bool { + assert(flags^ == {}) + if .SQPOLL not_in ring.flags { return true } + if .NEED_WAKEUP in sync.atomic_load_explicit(ring.sq.flags, .Relaxed) { + flags^ += {.SQ_WAKEUP} + return true + } + return false +} + + +// Submits the submission queue entries acquired via get_sqe(). +// Returns the number of entries submitted. +// Optionally wait for a number of events by setting `wait_nr`, and/or set a maximum wait time by setting `timeout`. +submit :: proc(ring: ^Ring, wait_nr: u32 = 0, timeout: ^linux.Time_Spec = nil) -> (n_submitted: u32, err: linux.Errno) { + n_submitted = flush_sq(ring) + flags: linux.IO_Uring_Enter_Flags + if sq_ring_needs_enter(ring, &flags) || wait_nr > 0 { + if wait_nr > 0 || .IOPOLL in ring.flags { + flags += {.GETEVENTS} + } + + flags += {.EXT_ARG} + ext: linux.IO_Uring_Getevents_Arg + ext.ts = timeout + + n_submitted_: int + n_submitted_, err = linux.io_uring_enter2(ring.fd, n_submitted, wait_nr, flags, &ext) + assert(n_submitted_ >= 0) + n_submitted = u32(n_submitted_) + } + return +} + +// Returns the number of submission queue entries in the submission queue. +sq_ready :: proc(ring: ^Ring) -> u32 { + // Always use the shared ring state (i.e. head and not sqe_head) to avoid going out of sync, + // see https://github.com/axboe/liburing/issues/92. + return ring.sq.sqe_tail - sync.atomic_load_explicit(ring.sq.head, .Acquire) +} + +// Returns the number of completion queue entries in the completion queue (yet to consume). +cq_ready :: proc(ring: ^Ring) -> (n_ready: u32) { + return sync.atomic_load_explicit(ring.cq.tail, .Acquire) - ring.cq.head^ +} + +// Copies as many CQEs as are ready, and that can fit into the destination `cqes` slice. +// If none are available, enters into the kernel to wait for at most `wait_nr` CQEs. +// Returns the number of CQEs copied, advancing the CQ ring. +// Provides all the wait/peek methods found in liburing, but with batching and a single method. +// TODO: allow for timeout. +copy_cqes :: proc(ring: ^Ring, cqes: []linux.IO_Uring_CQE, wait_nr: u32) -> (n_copied: u32, err: linux.Errno) { + n_copied = copy_cqes_ready(ring, cqes) + if n_copied > 0 { return } + if wait_nr > 0 || cq_ring_needs_flush(ring) { + _ = linux.io_uring_enter(ring.fd, 0, wait_nr, {.GETEVENTS}, nil) or_return + n_copied = copy_cqes_ready(ring, cqes) + } + return +} + +copy_cqes_ready :: proc(ring: ^Ring, cqes: []linux.IO_Uring_CQE) -> (n_copied: u32) { + n_ready := cq_ready(ring) + n_copied = min(u32(len(cqes)), n_ready) + head := ring.cq.head^ + tail := head + n_copied + shift := u32(.CQE32 in ring.flags) + + i := 0 + for head != tail { + cqes[i] = ring.cq.cqes[(head & ring.cq.mask) << shift] + head += 1 + i += 1 + } + cq_advance(ring, n_copied) + return +} + +cq_ring_needs_flush :: proc(ring: ^Ring) -> bool { + return .CQ_OVERFLOW in sync.atomic_load_explicit(ring.sq.flags, .Relaxed) +} + +// For advanced use cases only that implement custom completion queue methods. +// If you use copy_cqes() or copy_cqe() you must not call cqe_seen() or cq_advance(). +// Must be called exactly once after a zero-copy CQE has been processed by your application. +// Not idempotent, calling more than once will result in other CQEs being lost. +// Matches the implementation of cqe_seen() in liburing. +cqe_seen :: proc(ring: ^Ring) { + cq_advance(ring, 1) +} + +// For advanced use cases only that implement custom completion queue methods. +// Matches the implementation of cq_advance() in liburing. +cq_advance :: proc(ring: ^Ring, count: u32) { + if count == 0 { return } + sync.atomic_store_explicit(ring.cq.head, ring.cq.head^ + count, .Release) +} + +Submission_Queue :: struct { + head: ^u32, + tail: ^u32, + mask: u32, + flags: ^linux.IO_Uring_Submission_Queue_Flags, + dropped: ^u32, + array: []u32, + sqes: []linux.IO_Uring_SQE, + mmap: []u8, + mmap_sqes: []u8, + + // We use `sqe_head` and `sqe_tail` in the same way as liburing: + // We increment `sqe_tail` (but not `tail`) for each call to `get_sqe()`. + // We then set `tail` to `sqe_tail` once, only when these events are actually submitted. + // This allows us to amortize the cost of the @atomicStore to `tail` across multiple SQEs. + sqe_head: u32, + sqe_tail: u32, +} + +submission_queue_make :: proc(fd: linux.Fd, params: ^linux.IO_Uring_Params) -> (sq: Submission_Queue, err: linux.Errno) { + assert(fd >= 0, "uninitialized queue fd") + assert(.SINGLE_MMAP in params.features, "unsupported feature") // NOTE: Could support this, but currently isn't. + + sq_size := params.sq_off.array + params.sq_entries * size_of(u32) + cq_size := params.cq_off.cqes + params.cq_entries * size_of(linux.IO_Uring_CQE) + size := max(sq_size, cq_size) + + // PERF: .POPULATE commits all pages right away, is that desired? + + cqe_map := cast([^]byte)(linux.mmap(0, uint(size), {.READ, .WRITE}, {.SHARED, .POPULATE}, fd, linux.IORING_OFF_SQ_RING) or_return) + defer if err != nil { linux.munmap(cqe_map, uint(size)) } + + size_sqes := params.sq_entries * size_of(linux.IO_Uring_SQE) + sqe_map := cast([^]byte)(linux.mmap(0, uint(size_sqes), {.READ, .WRITE}, {.SHARED, .POPULATE}, fd, linux.IORING_OFF_SQES) or_return) + + array := cast([^]u32)cqe_map[params.sq_off.array:] + sqes := cast([^]linux.IO_Uring_SQE)sqe_map + + sq.head = cast(^u32)&cqe_map[params.sq_off.head] + sq.tail = cast(^u32)&cqe_map[params.sq_off.tail] + sq.mask = (cast(^u32)&cqe_map[params.sq_off.ring_mask])^ + sq.flags = cast(^linux.IO_Uring_Submission_Queue_Flags)&cqe_map[params.sq_off.flags] + sq.dropped = cast(^u32)&cqe_map[params.sq_off.dropped] + sq.array = array[:params.sq_entries] + sq.sqes = sqes[:params.sq_entries] + sq.mmap = cqe_map[:size] + sq.mmap_sqes = sqe_map[:size_sqes] + + return +} + +submission_queue_destroy :: proc(sq: ^Submission_Queue) -> (err: linux.Errno) { + err = linux.munmap(raw_data(sq.mmap), uint(len(sq.mmap))) + err2 := linux.munmap(raw_data(sq.mmap_sqes), uint(len(sq.mmap_sqes))) + if err == nil { err = err2 } + return +} + +Completion_Queue :: struct { + head: ^u32, + tail: ^u32, + mask: u32, + overflow: ^u32, + cqes: []linux.IO_Uring_CQE, +} + +completion_queue_make :: proc(fd: linux.Fd, params: ^linux.IO_Uring_Params, sq: ^Submission_Queue) -> Completion_Queue { + assert(fd >= 0, "uninitialized queue fd") + assert(.SINGLE_MMAP in params.features, "required feature SINGLE_MMAP not supported") + + mmap := sq.mmap + cqes := cast([^]linux.IO_Uring_CQE)&mmap[params.cq_off.cqes] + + return( + { + head = cast(^u32)&mmap[params.cq_off.head], + tail = cast(^u32)&mmap[params.cq_off.tail], + mask = (cast(^u32)&mmap[params.cq_off.ring_mask])^, + overflow = cast(^u32)&mmap[params.cq_off.overflow], + cqes = cqes[:params.cq_entries], + } \ + ) +} diff --git a/core/slice/slice.odin b/core/slice/slice.odin index 58d35b9f0..12ebfce3b 100644 --- a/core/slice/slice.odin +++ b/core/slice/slice.odin @@ -924,3 +924,39 @@ bitset_to_enum_slice_with_make :: proc(bs: $T, $E: typeid, allocator := context. } bitset_to_enum_slice :: proc{bitset_to_enum_slice_with_make, bitset_to_enum_slice_with_buffer} + +/* +Removes the first n elements (`elems`) from a slice of slices, spanning inner slices and dropping empty ones. + +If `elems` is out of bounds (more than the total) this will trigger a bounds check. + +Example: + import "core:fmt" + import "core:slice" + + advance_slices_example :: proc() { + slices := [][]byte { + {1, 2, 3, 4}, + {5, 6, 7}, + } + + fmt.println(slice.advance_slices(slices, 4)) + } + +Output: + [[5, 6, 7]] +*/ +advance_slices :: proc(slices: $S/[][]$T, elems: int) -> S { + slices, elems := slices, elems + for elems > 0 { + slice := &slices[0] + take := builtin.min(elems, len(slice)) + slice^ = slice[take:] + if len(slice) == 0 { + slices = slices[1:] + } + elems -= take + } + + return slices +} diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index de4417beb..01028b9e1 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -1589,23 +1589,23 @@ IO_Uring_SQE :: struct { using __ioprio: struct #raw_union { ioprio: u16, sq_accept_flags: IO_Uring_Accept_Flags, - sq_send_recv_flags: IO_Uring_Send_Recv_Flags, + sq_send_recv_flags: IO_Uring_Send_Recv_Flags `raw_union_tag:"opcode=.SENDMSG, opcode=.RECVMSG, opcode=.SEND, opcode=.RECV"`, }, fd: Fd, using __offset: struct #raw_union { // Offset into file. - off: u64, - addr2: u64, + off: u64 `raw_union_tag:"opcode=.READV, opcode=.WRITEV, opcode=.SPLICE, opcode=.POLL_REMOVE, opcode=.EPOLL_CTL, opcode=.TIMEOUT, opcode=.ACCEPT, opcode=.CONNECT, opcode=.READ, opcode=.WRITE, opcode=.FILES_UPDATE, opcode=.SOCKET"`, + addr2: u64 `raw_union_tag:"opcode=.SEND, opcode=.BIND"`, using _: struct { cmd_op: u32, __pad1: u32, }, - statx: ^Statx, + statx: ^Statx `raw_union_tag:"opcode=.STATX"`, }, using __iovecs: struct #raw_union { // Pointer to buffer or iovecs. - addr: u64, - splice_off_in: u64, + addr: u64 `raw_union_tag:"opcode=.READV, opcode=.WRITEV, opcode=.POLL_REMOVE, opcode=.EPOLL_CTL, opcode=.SENDMSG, opcode=.RECVMSG, opcode=.SEND, opcode=.RECV, opcode=.TIMEOUT, opcode=.TIMEOUT_REMOVE, opcode=.ACCEPT, opcode=.ASYNC_CANCEL, opcode=.LINK_TIMEOUT, opcode=.CONNECT, opcode=.MADVISE, opcode=.OPENAT, opcode=.STATX, opcode=.READ, opcode=.WRITE, opcode=.FILES_UPDATE, opcode=.BIND, opcode=.LISTEN"`, + splice_off_in: u64 `raw_union_tag:"opcode=.SPLICE"`, using _: struct { level: u32, optname: u32, @@ -1613,28 +1613,28 @@ IO_Uring_SQE :: struct { }, using __len: struct #raw_union { // Buffer size or number of iovecs. - len: u32, - poll_flags: IO_Uring_Poll_Add_Flags, - statx_mask: Statx_Mask, - epoll_ctl_op: EPoll_Ctl_Opcode, - shutdown_how: Shutdown_How, + len: u32 `raw_union_tag:"opcode=.READV, opcode=.WRITEV, opcode=.SPLICE, opcode=.SEND, opcode=.RECV, opcode=.TIMEOUT, opcode=.LINK_TIMEOUT, opcode=.MADVISE, opcode=.OPENAT, opcode=.READ, opcode=.WRITE, opcode=.TEE, opcode=.FILES_UPDATE, opcode=.SOCKET"`, + poll_flags: IO_Uring_Poll_Add_Flags `raw_union_tag:"opcode=.POLL_ADD, opcode=.POLL_REMOVE"`, + statx_mask: Statx_Mask `raw_union_tag:"opcode=.STATX"`, + epoll_ctl_op: EPoll_Ctl_Opcode `raw_union_tag:"opcode=.EPOLL_CTL"`, + shutdown_how: Shutdown_How `raw_union_tag:"opcode=.SHUTDOWN"`, }, using __contents: struct #raw_union { - rw_flags: i32, - fsync_flags: IO_Uring_Fsync_Flags, + rw_flags: i32 `raw_union_tag:"opcode=.READV, opcode=.WRITEV, opcode=.SOCKET"`, + fsync_flags: IO_Uring_Fsync_Flags `raw_union_tag:"opcode=.FSYNC"`, // compatibility. - poll_events: Fd_Poll_Events, + poll_events: Fd_Poll_Events `raw_union_tag:"opcode=.POLL_ADD, opcode=.POLL_REMOVE"`, // word-reversed for BE. poll32_events: u32, sync_range_flags: u32, - msg_flags: Socket_Msg, - timeout_flags: IO_Uring_Timeout_Flags, - accept_flags: Socket_FD_Flags, + msg_flags: Socket_Msg `raw_union_tag:"opcode=.SENDMSG, opcode=.RECVMSG, opcode=.SEND, opcode=.RECV"`, + timeout_flags: IO_Uring_Timeout_Flags `raw_union_tag:"opcode=.TIMEOUT, opcode=.TIMEOUT_REMOVE, opcode=.LINK_TIMEOUT"`, + accept_flags: Socket_FD_Flags `raw_union_tag:"opcode=.ACCEPT"`, cancel_flags: u32, - open_flags: Open_Flags, - statx_flags: FD_Flags, - fadvise_advice: u32, - splice_flags: IO_Uring_Splice_Flags, + open_flags: Open_Flags `raw_union_tag:"opcode=.OPENAT"`, + statx_flags: FD_Flags `raw_union_tag:"opcode=.STATX"`, + fadvise_advice: u32 `raw_union_tag:"opcode=.MADVISE"`, + splice_flags: IO_Uring_Splice_Flags `raw_union_tag:"opcode=.SPLICE, opcode=.TEE"`, rename_flags: u32, unlink_flags: u32, hardlink_flags: u32, @@ -1653,10 +1653,10 @@ IO_Uring_SQE :: struct { // Personality to use, if used. personality: u16, using _: struct #raw_union { - splice_fd_in: Fd, - file_index: u32, + splice_fd_in: Fd `raw_union_tag:"opcode=.SPLICE, opcode=.TEE"`, + file_index: u32 `raw_union_tag:"opcode=.ACCEPT, opcode=.OPENAT, opcode=.CLOSE, opcode=.SOCKET"`, using _: struct { - addr_len: u16, + addr_len: u16 `raw_union_tag:"opcode=.SEND"`, __pad3: [1]u16, }, }, diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index 0ad11121e..dc76cb037 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -30,6 +30,16 @@ EV_RXCHAR :: DWORD(0x0001) EV_RXFLAG :: DWORD(0x0002) EV_TXEMPTY :: DWORD(0x0004) +WAITORTIMERCALLBACK :: #type proc "system" (lpParameter: PVOID, TimerOrWaitFired: BOOLEAN) + +WT_EXECUTEDEFAULT :: 0x00000000 +WT_EXECUTEINIOTHREAD :: 0x00000001 +WT_EXECUTEINPERSISTENTTHREAD :: 0x00000080 +WT_EXECUTEINWAITTHREAD :: 0x00000004 +WT_EXECUTELONGFUNCTION :: 0x00000010 +WT_EXECUTEONLYONCE :: 0x00000008 +WT_TRANSFER_IMPERSONATION :: 0x00000100 + @(default_calling_convention="system") foreign kernel32 { OutputDebugStringA :: proc(lpOutputString: LPCSTR) --- // The only A thing that is allowed @@ -567,7 +577,7 @@ foreign kernel32 { // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-getqueuedcompletionstatusex) GetQueuedCompletionStatusEx :: proc(CompletionPort: HANDLE, lpCompletionPortEntries: ^OVERLAPPED_ENTRY, ulCount: c_ulong, ulNumEntriesRemoved: ^c_ulong, dwMilliseconds: DWORD, fAlertable: BOOL) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/ioapiset/nf-ioapiset-postqueuedcompletionstatus) - PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: c_ulong, lpOverlapped: ^OVERLAPPED) -> BOOL --- + PostQueuedCompletionStatus :: proc(CompletionPort: HANDLE, dwNumberOfBytesTransferred: DWORD, dwCompletionKey: ULONG_PTR, lpOverlapped: ^OVERLAPPED) -> BOOL --- // [MS-Docs](https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation) GetHandleInformation :: proc(hObject: HANDLE, lpdwFlags: ^DWORD) -> BOOL --- @@ -575,6 +585,17 @@ foreign kernel32 { RtlNtStatusToDosError :: proc(status: NTSTATUS) -> ULONG --- GetSystemPowerStatus :: proc(lpSystemPowerStatus: ^SYSTEM_POWER_STATUS) -> BOOL --- + + RegisterWaitForSingleObject :: proc( + phNewWaitObject: PHANDLE, + hObject: HANDLE, + Callback: WAITORTIMERCALLBACK, + Context: PVOID, + dwMilliseconds: ULONG, + dwFlags: ULONG, + ) -> BOOL --- + + UnregisterWaitEx :: proc(WaitHandle: HANDLE, CompletionEvent: HANDLE) -> BOOL --- } DEBUG_PROCESS :: 0x00000001 diff --git a/core/sys/windows/mswsock.odin b/core/sys/windows/mswsock.odin new file mode 100644 index 000000000..9019fc821 --- /dev/null +++ b/core/sys/windows/mswsock.odin @@ -0,0 +1,40 @@ +#+build windows +package sys_windows + +foreign import mswsock "system:mswsock.lib" + +foreign mswsock { + TransmitFile :: proc( + hSocket: SOCKET, + hFile: HANDLE, + nNumberOfBytesToWrite: DWORD, + nNumberOfBytesPerSend: DWORD, + lpOverlapped: LPOVERLAPPED, + lpTransmitBuffers: rawptr, + dwReserved: DWORD, + ) -> BOOL --- + + AcceptEx :: proc( + sListenSocket: SOCKET, + sAcceptSocket: SOCKET, + lpOutputBuffer: PVOID, + dwReceiveDataLength: DWORD, + dwLocalAddressLength: DWORD, + dwRemoteAddressLength: DWORD, + lpdwBytesReceived: LPDWORD, + lpOverlapped: LPOVERLAPPED, + ) -> BOOL --- + + GetAcceptExSockaddrs :: proc( + lpOutputBuffer: PVOID, + dwReceiveDataLength: DWORD, + dwLocalAddressLength: DWORD, + dwRemoteAddressLength: DWORD, + LocalSockaddr: ^^sockaddr, + LocalSockaddrLength: LPINT, + RemoteSockaddr: ^^sockaddr, + RemoteSockaddrLength: LPINT, + ) --- +} + +SO_UPDATE_CONNECT_CONTEXT :: 0x7010 \ No newline at end of file diff --git a/core/sys/windows/ntdll.odin b/core/sys/windows/ntdll.odin index 747130749..8362bb9df 100644 --- a/core/sys/windows/ntdll.odin +++ b/core/sys/windows/ntdll.odin @@ -36,6 +36,20 @@ foreign ntdll_lib { QueryFlags: ULONG, FileName : PUNICODE_STRING, ) -> NTSTATUS --- + + NtCreateFile :: proc( + FileHandle: PHANDLE, + DesiredAccess: ACCESS_MASK, + ObjectAttributes: POBJECT_ATTRIBUTES, + IoStatusBlock: PIO_STATUS_BLOCK, + AllocationSize: PLARGE_INTEGER, + FileAttributes: ULONG, + ShareAccess: ULONG, + CreateDisposition: ULONG, + CreateOptions: ULONG, + EaBuffer: PVOID, + EaLength: ULONG, + ) -> NTSTATUS --- } @@ -256,4 +270,13 @@ RTL_DRIVE_LETTER_CURDIR :: struct { LIST_ENTRY :: struct { Flink: ^LIST_ENTRY, Blink: ^LIST_ENTRY, -} \ No newline at end of file +} + +FILE_SUPERSEDE :: 0x00000000 +FILE_OPEN :: 0x00000001 +FILE_CREATE :: 0x00000002 +FILE_OPEN_IF :: 0x00000003 +FILE_OVERWRITE :: 0x00000004 +FILE_OVERWRITE_IF :: 0x00000005 + +FILE_NON_DIRECTORY_FILE :: 0x00000040 diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index e1a14fb94..0d8854724 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -3139,6 +3139,7 @@ OBJECT_ATTRIBUTES :: struct { SecurityDescriptor: rawptr, SecurityQualityOfService: rawptr, } +POBJECT_ATTRIBUTES :: ^OBJECT_ATTRIBUTES PUNICODE_STRING :: ^UNICODE_STRING UNICODE_STRING :: struct { @@ -3150,9 +3151,14 @@ UNICODE_STRING :: struct { OVERLAPPED :: struct { Internal: ^c_ulong, InternalHigh: ^c_ulong, - Offset: DWORD, - OffsetHigh: DWORD, - hEvent: HANDLE, + using _: struct #raw_union { + using _: struct { + Offset: DWORD, + OffsetHigh: DWORD, + }, + OffsetFull: u64, // Convenience field to set Offset and OffsetHigh with one value. + }, + hEvent: HANDLE, } OVERLAPPED_ENTRY :: struct { diff --git a/core/sys/windows/winerror.odin b/core/sys/windows/winerror.odin index 23467761d..2807ca0f8 100644 --- a/core/sys/windows/winerror.odin +++ b/core/sys/windows/winerror.odin @@ -248,6 +248,13 @@ E_HANDLE :: 0x80070006 // Handle that is not valid E_OUTOFMEMORY :: 0x8007000E // Failed to allocate necessary memory E_INVALIDARG :: 0x80070057 // One or more arguments are not valid +SEC_E_INCOMPLETE_MESSAGE :: 0x80090318 + +SEC_I_INCOMPLETE_CREDENTIALS :: 0x00090320 +SEC_I_CONTINUE_NEEDED :: 0x00090312 +SEC_I_CONTEXT_EXPIRED :: 0x00090317 +SEC_I_RENEGOTIATE :: 0x00090321 + // Severity values SEVERITY :: enum DWORD { SUCCESS = 0, diff --git a/core/sys/windows/ws2_32.odin b/core/sys/windows/ws2_32.odin index ad9089c6e..77a288d6f 100644 --- a/core/sys/windows/ws2_32.odin +++ b/core/sys/windows/ws2_32.odin @@ -38,7 +38,7 @@ WSANETWORKEVENTS :: struct { WSAID_ACCEPTEX :: GUID{0xb5367df1, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} WSAID_GETACCEPTEXSOCKADDRS :: GUID{0xb5367df2, 0xcbac, 0x11cf, {0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92}} -WSAID_CONNECTX :: GUID{0x25a207b9, 0xddf3, 0x4660, {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}} +WSAID_CONNECTEX :: GUID{0x25a207b9, 0xddf3, 0x4660, {0x8e, 0xe9, 0x76, 0xe5, 0x8c, 0x74, 0x06, 0x3e}} SIO_GET_EXTENSION_FUNCTION_POINTER :: IOC_INOUT | IOC_WS2 | 6 SIO_UDP_CONNRESET :: IOC_IN | IOC_VENDOR | 12 @@ -129,7 +129,7 @@ foreign ws2_32 { dwBufferCount: DWORD, lpNumberOfBytesSent: LPDWORD, dwFlags: DWORD, - lpTo: ^SOCKADDR_STORAGE_LH, + lpTo: ^sockaddr, iToLen: c_int, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, @@ -151,8 +151,8 @@ foreign ws2_32 { dwBufferCount: DWORD, lpNumberOfBytesRecvd: LPDWORD, lpFlags: LPDWORD, - lpFrom: ^SOCKADDR_STORAGE_LH, - lpFromlen: ^c_int, + lpFrom: ^sockaddr, + lpFromlen: LPINT, lpOverlapped: LPWSAOVERLAPPED, lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE, ) -> c_int --- diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin index 7895b4640..9a7613ba5 100644 --- a/examples/all/all_main.odin +++ b/examples/all/all_main.odin @@ -17,6 +17,7 @@ package all @(require) import "core:container/avl" @(require) import "core:container/bit_array" +@(require) import "core:container/pool" @(require) import "core:container/priority_queue" @(require) import "core:container/queue" @(require) import "core:container/small_array" @@ -104,6 +105,8 @@ package all @(require) import "core:mem/tlsf" @(require) import "core:mem/virtual" +@(require) import "core:nbio" + @(require) import "core:odin/ast" @(require) import doc_format "core:odin/doc-format" @(require) import "core:odin/parser" @@ -156,4 +159,4 @@ package all @(require) import "core:unicode/utf8/utf8string" @(require) import "core:unicode/utf16" -main :: proc() {} \ No newline at end of file +main :: proc() {} diff --git a/tests/core/nbio/fs.odin b/tests/core/nbio/fs.odin new file mode 100644 index 000000000..6e079f96e --- /dev/null +++ b/tests/core/nbio/fs.odin @@ -0,0 +1,100 @@ +package tests_nbio + +import "core:nbio" +import "core:testing" +import "core:time" +import os "core:os/os2" + +@(test) +close_invalid_handle :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + nbio.close(max(nbio.Handle)) + + ev(t, nbio.run(), nil) + } +} + +@(test) +write_read_close :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + @static content := [20]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} + @static result: [20]byte + + FILENAME :: "test_write_read_close" + + nbio.open_poly(FILENAME, t, on_open, mode={.Read, .Write, .Create, .Trunc}) + + on_open :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.open.err, nil) + + nbio.write_poly(op.open.handle, 0, content[:], t, on_write) + } + + on_write :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.write.err, nil) + ev(t, op.write.written, len(content)) + + nbio.read_poly(op.write.handle, 0, result[:], t, on_read, all=true) + } + + on_read :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.read.err, nil) + ev(t, op.read.read, len(result)) + ev(t, result, content) + + nbio.close_poly(op.read.handle, t, on_close) + } + + on_close :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.close.err, nil) + os.remove(FILENAME) + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +read_empty_file :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + FILENAME :: "test_read_empty_file" + + handle, err := nbio.open_sync(FILENAME, mode={.Read, .Write, .Create, .Trunc}) + ev(t, err, nil) + + buf: [128]byte + nbio.read_poly(handle, 0, buf[:], t, proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.read.err, nbio.FS_Error.EOF) + ev(t, op.read.read, 0) + + nbio.close_poly(op.read.handle, t, proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.close.err, nil) + os.remove(FILENAME) + }) + }) + + ev(t, nbio.run(), nil) + } +} + +@(test) +read_entire_file :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + nbio.read_entire_file(#file, t, on_read) + + on_read :: proc(t: rawptr, data: []byte, err: nbio.Read_Entire_File_Error) { + t := (^testing.T)(t) + ev(t, err.value, nil) + ev(t, string(data), #load(#file, string)) + delete(data) + } + } +} diff --git a/tests/core/nbio/nbio.odin b/tests/core/nbio/nbio.odin new file mode 100644 index 000000000..2f454f55b --- /dev/null +++ b/tests/core/nbio/nbio.odin @@ -0,0 +1,258 @@ +package tests_nbio + +import "core:log" +import "core:nbio" +import "core:testing" +import "core:thread" +import "core:time" +import os "core:os/os2" + +ev :: testing.expect_value +e :: testing.expect + +@(deferred_in=event_loop_guard_exit) +event_loop_guard :: proc(t: ^testing.T) -> bool { + err := nbio.acquire_thread_event_loop() + if err == .Unsupported || !nbio.FULLY_SUPPORTED { + log.warn("nbio unsupported, skipping") + return false + } + + ev(t, err, nil) + return true +} + +event_loop_guard_exit :: proc(t: ^testing.T) { + ev(t, nbio.run(), nil) // Could have some things to clean up from a `defer` in the test. + nbio.release_thread_event_loop() +} + +// Tests that all poly variants are correctly passing through arguments, and that +// all procs eventually get their callback called. +// +// This is important because the poly procs are only checked when they are called, +// So this will also catch any typos in their implementations. +@(test) +all_poly_work :: proc(tt: ^testing.T) { + if event_loop_guard(tt) { + testing.set_fail_timeout(tt, time.Minute) + + @static t: ^testing.T + t = tt + + @static n: int + n = 0 + NUM_TESTS :: 39 + + UDP_SOCKET :: max(nbio.UDP_Socket) + TCP_SOCKET :: max(nbio.TCP_Socket) + + tmp, terr := os.create_temp_file("", "tests_nbio_poly*", {.Non_Blocking}) + ev(t, terr, nil) + defer os.close(tmp) + + HANDLE, aerr := nbio.associate_handle(os.fd(tmp)) + ev(t, aerr, nil) + + _buf: [1]byte + buf := _buf[:] + + one :: proc(op: ^nbio.Operation, one: int) { + n += 1 + ev(t, one, 1) + } + + two :: proc(op: ^nbio.Operation, one: int, two: int) { + n += 1 + ev(t, one, 1) + ev(t, two, 2) + } + + three :: proc(op: ^nbio.Operation, one: int, two: int, three: int) { + n += 1 + ev(t, one, 1) + ev(t, two, 2) + ev(t, three, 3) + } + + nbio.accept_poly(TCP_SOCKET, 1, one) + nbio.accept_poly2(TCP_SOCKET, 1, 2, two) + nbio.accept_poly3(TCP_SOCKET, 1, 2, 3, three) + + nbio.close_poly(max(nbio.Handle), 1, one) + nbio.close_poly2(max(nbio.Handle), 1, 2, two) + nbio.close_poly3(max(nbio.Handle), 1, 2, 3, three) + + nbio.dial_poly({nbio.IP4_Address{127, 0, 0, 1}, 0}, 1, one) + nbio.dial_poly2({nbio.IP4_Address{127, 0, 0, 1}, 0}, 1, 2, two) + nbio.dial_poly3({nbio.IP4_Address{127, 0, 0, 1}, 0}, 1, 2, 3, three) + + nbio.recv_poly(TCP_SOCKET, {buf}, 1, one) + nbio.recv_poly2(TCP_SOCKET, {buf}, 1, 2, two) + nbio.recv_poly3(TCP_SOCKET, {buf}, 1, 2, 3, three) + + nbio.send_poly(TCP_SOCKET, {buf}, 1, one) + nbio.send_poly2(TCP_SOCKET, {buf}, 1, 2, two) + nbio.send_poly3(TCP_SOCKET, {buf}, 1, 2, 3, three) + + nbio.sendfile_poly(TCP_SOCKET, HANDLE, 1, one) + nbio.sendfile_poly2(TCP_SOCKET, HANDLE, 1, 2, two) + nbio.sendfile_poly3(TCP_SOCKET, HANDLE, 1, 2, 3, three) + + nbio.read_poly(HANDLE, 0, buf, 1, one) + nbio.read_poly2(HANDLE, 0, buf, 1, 2, two) + nbio.read_poly3(HANDLE, 0, buf, 1, 2, 3, three) + + nbio.write_poly(HANDLE, 0, buf, 1, one) + nbio.write_poly2(HANDLE, 0, buf, 1, 2, two) + nbio.write_poly3(HANDLE, 0, buf, 1, 2, 3, three) + + nbio.next_tick_poly(1, one) + nbio.next_tick_poly2(1, 2, two) + nbio.next_tick_poly3(1, 2, 3, three) + + nbio.timeout_poly(1, 1, one) + nbio.timeout_poly2(1, 1, 2, two) + nbio.timeout_poly3(1, 1, 2, 3, three) + + nbio.poll_poly(TCP_SOCKET, .Receive, 1, one) + nbio.poll_poly2(TCP_SOCKET, .Receive, 1, 2, two) + nbio.poll_poly3(TCP_SOCKET, .Receive, 1, 2, 3, three) + + nbio.open_poly("", 1, one) + nbio.open_poly2("", 1, 2, two) + nbio.open_poly3("", 1, 2, 3, three) + + nbio.stat_poly(HANDLE, 1, one) + nbio.stat_poly2(HANDLE, 1, 2, two) + nbio.stat_poly3(HANDLE, 1, 2, 3, three) + + ev(t, n, 0) // Test that no callbacks are ran before the loop is ticked. + ev(t, nbio.run(), nil) + ev(t, n, NUM_TESTS) // Test that all callbacks have ran. + } +} + +@(test) +two_ops_at_the_same_time :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + server, err := nbio.create_udp_socket(.IP4) + ev(t, err, nil) + defer nbio.close(server) + + berr := nbio.bind(server, {nbio.IP4_Loopback, 0}) + ev(t, berr, nil) + ep, eperr := nbio.bound_endpoint(server) + ev(t, eperr, nil) + + // Server. + { + nbio.poll_poly(server, .Receive, t, on_poll) + + on_poll :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.poll.result, nbio.Poll_Result.Ready) + } + + buf: [128]byte + nbio.recv_poly(server, {buf[:]}, t, on_recv) + + on_recv :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.recv.err, nil) + } + } + + // Client. + { + sock, cerr := nbio.create_udp_socket(.IP4) + ev(t, cerr, nil) + + // Make sure the server would block. + nbio.timeout_poly3(time.Millisecond*10, t, sock, ep.port, on_timeout) + + on_timeout :: proc(op: ^nbio.Operation, t: ^testing.T, sock: nbio.UDP_Socket, port: int) { + nbio.send_poly(sock, {transmute([]byte)string("Hiya")}, t, on_send, {nbio.IP4_Loopback, port}) + } + + on_send :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.send.err, nil) + ev(t, op.send.sent, 4) + + // Do another send after a bit, some backends don't trigger both ops when one was enough to + // use up the socket. + nbio.timeout_poly3(time.Millisecond*10, t, op.send.socket.(nbio.UDP_Socket), op.send.endpoint.port, on_timeout2) + } + + on_timeout2 :: proc(op: ^nbio.Operation, t: ^testing.T, sock: nbio.UDP_Socket, port: int) { + nbio.send_poly(sock, {transmute([]byte)string("Hiya")}, t, on_send2, {nbio.IP4_Loopback, port}) + } + + on_send2 :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.send.err, nil) + ev(t, op.send.sent, 4) + + nbio.close(op.send.socket.(nbio.UDP_Socket)) + } + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +timeout :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + start := time.now() + + nbio.timeout_poly2(time.Millisecond*20, t, start, on_timeout) + + on_timeout :: proc(op: ^nbio.Operation, t: ^testing.T, start: time.Time) { + since := time.since(start) + log.infof("timeout ran after: %v", since) + testing.expect(t, since >= time.Millisecond*19) // A ms grace, for some reason it is sometimes ran after 19.8ms. + if since < 20 { + log.warnf("timeout ran after: %v", since) + } + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +wake_up :: proc(t: ^testing.T) { + testing.set_fail_timeout(t, time.Minute) + if event_loop_guard(t) { + for _ in 0..<2 { + sock, _ := open_next_available_local_port(t) + + // Add an accept, with nobody dialling this should block the event loop forever. + accept := nbio.accept(sock, proc(op: ^nbio.Operation) { + log.error("shouldn't be called") + }) + + // Make sure the accept is in progress. + ev(t, nbio.tick(timeout=0), nil) + + hit: bool + thr := thread.create_and_start_with_poly_data2(nbio.current_thread_event_loop(), &hit, proc(l: ^nbio.Event_Loop, hit: ^bool) { + hit^ = true + nbio.wake_up(l) + }, context) + defer thread.destroy(thr) + + // Should block forever until the thread calling wake_up will make it return. + ev(t, nbio.tick(), nil) + e(t, hit) + + nbio.remove(accept) + nbio.close(sock) + + ev(t, nbio.run(), nil) + ev(t, nbio.tick(timeout=0), nil) + } + } +} diff --git a/tests/core/nbio/net.odin b/tests/core/nbio/net.odin new file mode 100644 index 000000000..688ee0b45 --- /dev/null +++ b/tests/core/nbio/net.odin @@ -0,0 +1,400 @@ +package tests_nbio + +import "core:mem" +import "core:nbio" +import "core:net" +import "core:testing" +import "core:time" +import "core:log" + +open_next_available_local_port :: proc(t: ^testing.T, addr: net.Address = net.IP4_Loopback, loc := #caller_location) -> (sock: net.TCP_Socket, ep: net.Endpoint) { + err: net.Network_Error + sock, err = nbio.listen_tcp({addr, 0}) + if err != nil { + log.errorf("listen_tcp: %v", err, location=loc) + return + } + + ep, err = net.bound_endpoint(sock) + if err != nil { + log.errorf("bound_endpoint: %v", err, location=loc) + } + + return +} + +@(test) +client_and_server_send_recv :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + server, ep := open_next_available_local_port(t) + + CONTENT :: [20]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} + + State :: struct { + server: net.TCP_Socket, + server_client: net.TCP_Socket, + client: net.TCP_Socket, + recv_buf: [20]byte, + send_buf: [20]byte, + } + + state := State{ + server = server, + send_buf = CONTENT, + } + + close_ok :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.close.err, nil) + } + + // Server + { + nbio.accept_poly2(server, t, &state, on_accept) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T, state: ^State) { + ev(t, op.accept.err, nil) + + state.server_client = op.accept.client + + log.debugf("accepted connection from: %v", op.accept.client_endpoint) + + nbio.recv_poly2(state.server_client, {state.recv_buf[:]}, t, state, on_recv) + } + + on_recv :: proc(op: ^nbio.Operation, t: ^testing.T, state: ^State) { + ev(t, op.recv.err, nil) + ev(t, op.recv.received, 20) + ev(t, state.recv_buf, CONTENT) + + nbio.close_poly(state.server_client, t, close_ok) + nbio.close_poly(state.server, t, close_ok) + } + + ev(t, nbio.tick(0), nil) + } + + // Client + { + nbio.dial_poly2(ep, t, &state, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T, state: ^State) { + ev(t, op.dial.err, nil) + + state.client = op.dial.socket + + nbio.send_poly2(state.client, {state.send_buf[:]}, t, state, on_send) + } + + on_send :: proc(op: ^nbio.Operation, t: ^testing.T, state: ^State) { + ev(t, op.send.err, nil) + ev(t, op.send.sent, 20) + + nbio.close_poly(state.client, t, close_ok) + } + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +close_and_remove_accept :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + server, _ := open_next_available_local_port(t) + + accept := nbio.accept_poly(server, t, proc(_: ^nbio.Operation, t: ^testing.T) { + testing.fail_now(t) + }) + + ev(t, nbio.tick(0), nil) + + nbio.close_poly(server, t, proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.close.err, nil) + }) + + nbio.remove(accept) + ev(t, nbio.run(), nil) + } +} + +// Tests that when a client calls `close` on it's socket, `recv` returns with `0, nil` (connection closed). +@(test) +close_errors_recv :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + server, ep := open_next_available_local_port(t) + + // Server + { + nbio.accept_poly(server, t, on_accept) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.accept.err, nil) + + bytes := make([]byte, 128, context.temp_allocator) + nbio.recv_poly(op.accept.client, {bytes}, t, on_recv) + } + + on_recv :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.recv.received, 0) + ev(t, op.recv.err, nil) + } + + ev(t, nbio.tick(0), nil) + } + + // Client + { + nbio.dial_poly(ep, t, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.dial.err, nil) + nbio.close_poly(op.dial.socket, t, on_close) + } + + on_close :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.close.err, nil) + } + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +ipv6 :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + server, ep := open_next_available_local_port(t, net.IP6_Loopback) + + nbio.accept_poly(server, t, on_accept) + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.accept.err, nil) + addr, is_ipv6 := op.accept.client_endpoint.address.(net.IP6_Address) + e(t, is_ipv6) + ev(t, addr, net.IP6_Loopback) + e(t, op.accept.client_endpoint.port != 0) + nbio.close(op.accept.client) + nbio.close(op.accept.socket) + } + + nbio.dial_poly(ep, t, on_dial) + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.dial.err, nil) + nbio.close(op.dial.socket) + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +accept_timeout :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + sock, _ := open_next_available_local_port(t) + + hit: bool + nbio.accept_poly2(sock, t, &hit, on_accept, timeout=time.Millisecond) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T, hit: ^bool) { + hit^ = true + ev(t, op.accept.err, net.Accept_Error.Timeout) + nbio.close(op.accept.socket) + } + + ev(t, nbio.run(), nil) + + e(t, hit) + } +} + +@(test) +poll_timeout :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + sock, err := nbio.create_udp_socket(.IP4) + ev(t, err, nil) + berr := nbio.bind(sock, {nbio.IP4_Loopback, 0}) + ev(t, berr, nil) + + nbio.poll_poly(sock, .Receive, t, on_poll, time.Millisecond) + on_poll :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.poll.result, nbio.Poll_Result.Timeout) + } + + ev(t, nbio.run(), nil) + } +} + +/* +This test walks through the scenario where a user wants to `poll` in order to check if some other package (in this case `core:net`), +would be able to do an operation without blocking. + +It also tests whether a poll can be issues when it is already in a ready state. +And it tests big send/recv buffers being handled properly. +*/ +@(test) +poll :: proc(t: ^testing.T) { + if event_loop_guard(t) { +// testing.set_fail_timeout(t, time.Minute) + + can_recv: bool + + sock, ep := open_next_available_local_port(t) + + // Server + { + nbio.accept_poly2(sock, t, &can_recv, on_accept) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T, can_recv: ^bool) { + ev(t, op.accept.err, nil) + + check_recv :: proc(op: ^nbio.Operation, t: ^testing.T, can_recv: ^bool, client: net.TCP_Socket) { + // Not ready to unblock the client yet, requeue for after 10ms. + if !can_recv^ { + nbio.timeout_poly3(time.Millisecond * 10, t, can_recv, client, check_recv) + return + } + + free_all(context.temp_allocator) + + // Connection was closed by client, close server. + if op.type == .Recv && op.recv.received == 0 && op.recv.err == nil { + nbio.close(client) + return + } + + if op.type == .Recv { + log.debugf("received %M this time", op.recv.received) + } + + // Receive some data to unblock the client, which should complete the poll it does, allowing it to send data again. + buf, mem_err := make([]byte, mem.Gigabyte, context.temp_allocator) + ev(t, mem_err, nil) + nbio.recv_poly3(client, {buf}, t, can_recv, client, check_recv) + } + nbio.timeout_poly3(time.Millisecond * 10, t, can_recv, op.accept.client, check_recv) + } + + ev(t, nbio.tick(0), nil) + } + + // Client + { + nbio.dial_poly2(ep, t, &can_recv, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T, can_recv: ^bool) { + ev(t, op.dial.err, nil) + + // Do a poll even though we know it's ready, so we can test that all implementations can handle that. + nbio.poll_poly2(op.dial.socket, .Send, t, can_recv, on_poll1) + } + + on_poll1 :: proc(op: ^nbio.Operation, t: ^testing.T, can_recv: ^bool) { + ev(t, op.poll.result, nil) + + // Send 4 GB of data, which in my experience causes a Would_Block error because we filled up the internal buffer. + buf, mem_err := make([]byte, mem.Gigabyte*4, context.temp_allocator) + ev(t, mem_err, nil) + + // Use `core:net` as example external code that doesn't care about the event loop. + net.set_blocking(op.poll.socket, false) + n, send_err := net.send(op.poll.socket, buf) + ev(t, send_err, net.TCP_Send_Error.Would_Block) + + log.debugf("blocking after %M", n) + + // Tell the server it can start issueing recv calls, so it unblocks us. + can_recv^ = true + + // Now poll again, when the server reads enough data it should complete, telling us we can send without blocking again. + nbio.poll_poly(op.poll.socket, .Send, t, on_poll2) + } + + on_poll2 :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.poll.result, nil) + + buf: [128]byte + bytes_written, send_err := net.send(op.poll.socket, buf[:]) + ev(t, bytes_written, 128) + ev(t, send_err, nil) + + nbio.close(op.poll.socket.(net.TCP_Socket)) + } + } + + ev(t, nbio.run(), nil) + nbio.close(sock) + ev(t, nbio.run(), nil) + } +} + +@(test) +sendfile :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + CONTENT :: #load(#file) + + sock, ep := open_next_available_local_port(t) + + // Server + { + nbio.accept_poly(sock, t, on_accept) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.accept.err, nil) + e(t, op.accept.client != 0) + + log.debugf("connection from: %v", op.accept.client_endpoint) + nbio.open_poly3(#file, t, op.accept.socket, op.accept.client, on_open) + } + + on_open :: proc(op: ^nbio.Operation, t: ^testing.T, server, client: net.TCP_Socket) { + ev(t, op.open.err, nil) + + nbio.sendfile_poly2(client, op.open.handle, t, server, on_sendfile) + } + + on_sendfile :: proc(op: ^nbio.Operation, t: ^testing.T, server: net.TCP_Socket) { + ev(t, op.sendfile.err, nil) + ev(t, op.sendfile.sent, len(CONTENT)) + + nbio.close(op.sendfile.file) + nbio.close(op.sendfile.socket) + nbio.close(server) + } + } + + // Client + { + nbio.dial_poly(ep, t, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.dial.err, nil) + + buf := make([]byte, len(CONTENT), context.temp_allocator) + nbio.recv_poly(op.dial.socket, {buf}, t, on_recv, all=true) + } + + on_recv :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.recv.err, nil) + ev(t, op.recv.received, len(CONTENT)) + ev(t, string(op.recv.bufs[0]), string(CONTENT)) + + nbio.close(op.recv.socket.(net.TCP_Socket)) + } + } + + ev(t, nbio.run(), nil) + } +} diff --git a/tests/core/nbio/remove.odin b/tests/core/nbio/remove.odin new file mode 100644 index 000000000..063c2cf58 --- /dev/null +++ b/tests/core/nbio/remove.odin @@ -0,0 +1,247 @@ +package tests_nbio + +import "core:nbio" +import "core:net" +import "core:testing" +import "core:time" +import "core:log" + +// Removals are pretty complex. + +@(test) +immediate_remove_of_sendfile :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + sock, ep := open_next_available_local_port(t) + + // Server + { + nbio.accept_poly(sock, t, on_accept) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.accept.err, nil) + e(t, op.accept.client != 0) + + log.debugf("connection from: %v", op.accept.client_endpoint) + nbio.open_poly3(#file, t, op.accept.socket, op.accept.client, on_open) + } + + on_open :: proc(op: ^nbio.Operation, t: ^testing.T, server, client: net.TCP_Socket) { + ev(t, op.open.err, nil) + e(t, op.open.handle != 0) + + sendfile_op := nbio.sendfile_poly2(client, op.open.handle, t, server, on_sendfile) + + // oh no changed my mind. + nbio.remove(sendfile_op) + + nbio.close(op.open.handle) + nbio.close(client) + nbio.close(server) + } + + on_sendfile :: proc(op: ^nbio.Operation, t: ^testing.T, server: net.TCP_Socket) { + log.error("on_sendfile shouldn't be called") + } + } + + // Client + { + nbio.dial_poly(ep, t, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.dial.err, nil) + + buf := make([]byte, 128, context.temp_allocator) + nbio.recv_poly(op.dial.socket, {buf}, t, on_recv) + } + + on_recv :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.recv.err, nil) + + nbio.close(op.recv.socket.(net.TCP_Socket)) + } + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +immediate_remove_of_sendfile_without_stat :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + sock, ep := open_next_available_local_port(t) + + // Server + { + nbio.accept_poly(sock, t, on_accept) + + on_accept :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.accept.err, nil) + e(t, op.accept.client != 0) + + log.debugf("connection from: %v", op.accept.client_endpoint) + nbio.open_poly3(#file, t, op.accept.socket, op.accept.client, on_open) + } + + on_open :: proc(op: ^nbio.Operation, t: ^testing.T, server, client: net.TCP_Socket) { + ev(t, op.open.err, nil) + e(t, op.open.handle != 0) + + nbio.stat_poly3(op.open.handle, t, server, client, on_stat) + } + + on_stat :: proc(op: ^nbio.Operation, t: ^testing.T, server, client: net.TCP_Socket) { + ev(t, op.stat.err, nil) + + sendfile_op := nbio.sendfile_poly2(client, op.stat.handle, t, server, on_sendfile, nbytes=int(op.stat.size)) + + // oh no changed my mind. + nbio.remove(sendfile_op) + + nbio.timeout_poly3(time.Millisecond * 10, op.stat.handle, client, server, proc(op: ^nbio.Operation, p1: nbio.Handle, p2, p3: net.TCP_Socket){ + nbio.close(p1) + nbio.close(p2) + nbio.close(p3) + }) + } + + on_sendfile :: proc(op: ^nbio.Operation, t: ^testing.T, server: net.TCP_Socket) { + log.error("on_sendfile shouldn't be called") + } + } + + // Client + { + nbio.dial_poly(ep, t, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.dial.err, nil) + + buf := make([]byte, 128, context.temp_allocator) + nbio.recv_poly(op.dial.socket, {buf}, t, on_recv) + } + + on_recv :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.recv.err, nil) + + nbio.close(op.recv.socket.(net.TCP_Socket)) + } + } + + ev(t, nbio.run(), nil) + } +} + +// Open should free the temporary memory allocated for the path when removed. +// Can't really test that though, so should be checked manually that the internal callback is called but not the external. +@(test) +remove_open :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + open := nbio.open(#file, on_open) + nbio.remove(open) + + on_open :: proc(op: ^nbio.Operation) { + log.error("on_open shouldn't be called") + } + + ev(t, nbio.run(), nil) + } +} + +// Dial should close the socket when removed. +// Can't really test that though, so should be checked manually that the internal callback is called but not the external. +@(test) +remove_dial :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + sock, ep := open_next_available_local_port(t) + defer nbio.close(sock) + + dial := nbio.dial(ep, on_dial) + nbio.remove(dial) + + on_dial :: proc(op: ^nbio.Operation) { + log.error("on_dial shouldn't be called") + } + + ev(t, nbio.run(), nil) + } +} + +@(test) +remove_next_tick :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + nt := nbio.next_tick_poly(t, proc(op: ^nbio.Operation, t: ^testing.T) { + log.error("shouldn't be called") + }) + nbio.remove(nt) + + ev(t, nbio.run(), nil) + } +} + +@(test) +remove_timeout :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + hit: bool + timeout := nbio.timeout_poly(time.Second, &hit, proc(_: ^nbio.Operation, hit: ^bool) { + hit^ = true + }) + + nbio.remove(timeout) + + ev(t, nbio.run(), nil) + + e(t, !hit) + } +} + +@(test) +remove_multiple_poll :: proc(t: ^testing.T) { + if event_loop_guard(t) { + testing.set_fail_timeout(t, time.Minute) + + sock, ep := open_next_available_local_port(t) + defer nbio.close(sock) + + hit: bool + + first := nbio.poll(sock, .Receive, on_poll) + nbio.poll_poly2(sock, .Receive, t, &hit, on_poll2) + + on_poll :: proc(op: ^nbio.Operation) { + log.error("shouldn't be called") + } + + on_poll2 :: proc(op: ^nbio.Operation, t: ^testing.T, hit: ^bool) { + ev(t, op.poll.result, nbio.Poll_Result.Ready) + hit^ = true + } + + ev(t, nbio.tick(0), nil) + + nbio.remove(first) + + ev(t, nbio.tick(0), nil) + + nbio.dial_poly(ep, t, on_dial) + + on_dial :: proc(op: ^nbio.Operation, t: ^testing.T) { + ev(t, op.dial.err, nil) + } + + ev(t, nbio.run(), nil) + e(t, hit) + } +} diff --git a/tests/core/normal.odin b/tests/core/normal.odin index 42da389d2..d0889bf89 100644 --- a/tests/core/normal.odin +++ b/tests/core/normal.odin @@ -32,6 +32,7 @@ download_assets :: proc "contextless" () { @(require) import "math/noise" @(require) import "math/rand" @(require) import "mem" +@(require) import "nbio" @(require) import "net" @(require) import "odin" @(require) import "os" From ef84b24b6882687f003ca8a3f59df4cd3db71409 Mon Sep 17 00:00:00 2001 From: Wassim Alhajomar <75145262+Wassimulator@users.noreply.github.com> Date: Mon, 12 Jan 2026 12:39:57 +0100 Subject: [PATCH 100/212] cleanup --- core/thread/thread_pool.odin | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/core/thread/thread_pool.odin b/core/thread/thread_pool.odin index d7a03d04c..ea772c725 100644 --- a/core/thread/thread_pool.odin +++ b/core/thread/thread_pool.odin @@ -20,6 +20,9 @@ Task :: struct { allocator: mem.Allocator, } +Thread_Init_Proc :: #type proc(thread_index: int, user_data: rawptr) +Thread_Fini_Proc :: #type proc(thread_index: int, user_data: rawptr) + // Do not access the pool's members directly while the pool threads are running, // since they use different kinds of locking and mutual exclusion devices. // Careless access can and will lead to nasty bugs. Once initialized, the @@ -36,6 +39,13 @@ Pool :: struct { num_done: int, // end of atomics + // called once per thread at startup + thread_init_proc: Thread_Init_Proc, + thread_init_data: rawptr, + // called once per thread at shutdown + thread_fini_proc: Thread_Fini_Proc, + thread_fini_data: rawptr, + is_running: bool, threads: []^Thread, @@ -55,6 +65,10 @@ pool_thread_runner :: proc(t: ^Thread) { data := cast(^Pool_Thread_Data)t.data pool := data.pool + if pool.thread_init_proc != nil { + pool.thread_init_proc(t.user_index, pool.thread_init_data) + } + for intrinsics.atomic_load(&pool.is_running) { sync.wait(&pool.sem_available) @@ -66,6 +80,10 @@ pool_thread_runner :: proc(t: ^Thread) { } } + if pool.thread_fini_proc != nil { + pool.thread_fini_proc(t.user_index, pool.thread_fini_data) + } + sync.post(&pool.sem_available, 1) } @@ -73,13 +91,26 @@ pool_thread_runner :: proc(t: ^Thread) { // it is destroyed. // // The thread pool requires an allocator which it either owns, or which is thread safe. -pool_init :: proc(pool: ^Pool, allocator: mem.Allocator, thread_count: int) { +pool_init :: proc( + pool: ^Pool, + allocator: mem.Allocator, + thread_count: int, + init_proc: Thread_Init_Proc = nil, + init_data: rawptr = nil, + fini_proc: Thread_Init_Proc = nil, + fini_data: rawptr = nil, +){ context.allocator = allocator pool.allocator = allocator queue.init(&pool.tasks) pool.tasks_done = make([dynamic]Task) pool.threads = make([]^Thread, max(thread_count, 1)) + pool.thread_init_proc = init_proc + pool.thread_fini_proc = fini_proc + pool.thread_init_data = init_data + pool.thread_fini_data = fini_data + pool.is_running = true for _, i in pool.threads { From ebaf8779815833b816b98cc370c0cf74b1ee2bae Mon Sep 17 00:00:00 2001 From: Paul Page Date: Mon, 12 Jan 2026 16:31:40 -0600 Subject: [PATCH 101/212] Update Orca bindings --- core/sys/orca/orca.odin | 238 ++++++++++++++++++++++++---------------- 1 file changed, 142 insertions(+), 96 deletions(-) diff --git a/core/sys/orca/orca.odin b/core/sys/orca/orca.odin index a36c5fa2a..ba47a13fa 100644 --- a/core/sys/orca/orca.odin +++ b/core/sys/orca/orca.odin @@ -1,6 +1,7 @@ // Bindings for the Orca platform // // See: [[ https://orca-app.dev ]] + package orca import "core:c" @@ -204,6 +205,26 @@ foreign { mat2x3_rotate :: proc(radians: f32) -> mat2x3 --- // Return a 2x3 matrix representing a translation. mat2x3_translate :: proc(x: f32, y: f32) -> mat2x3 --- + // Return a 2x3 matrix representing a scale. + mat2x3_scale :: proc(x: f32, y: f32) -> mat2x3 --- +} + +//////////////////////////////////////////////////////////////////////////////// +// API for sampling the system clock. +//////////////////////////////////////////////////////////////////////////////// + +clock_kind :: enum u32 { + // A clock incrementing monotonically. + MONOTONIC = 0, + // A clock incrementing monotonically during uptime. + UPTIME = 1, + // A clock driven by the platform time. + DATE = 2, +} + +@(default_calling_convention="c", link_prefix="oc_") +foreign { + clock_time :: proc(clock: clock_kind) -> f64 --- } //////////////////////////////////////////////////////////////////////////////// @@ -354,10 +375,14 @@ foreign { arena_init_with_options :: proc(arena: ^arena, options: ^arena_options) --- // Release all resources allocated to a memory arena. arena_cleanup :: proc(arena: ^arena) --- - // Allocate a block of memory from an arena. + // Allocate a zero initialized block of memory from an arena. arena_push :: proc(arena: ^arena, size: u64) -> rawptr --- - // Allocate an aligned block of memory from an arena. + // Allocate an aligned, zero initialized block of memory from an arena. arena_push_aligned :: proc(arena: ^arena, size: u64, alignment: u32) -> rawptr --- + // Allocate a block of memory from an arena. + arena_push_uninitialized :: proc(arena: ^arena, size: u64) -> rawptr --- + // Allocate an aligned block of memory from an arena. + arena_push_aligned_uninitialized :: proc(arena: ^arena, size: u64, alignment: u32) -> rawptr --- // Reset an arena. All memory that was previously allocated from this arena is released to the arena, and can be reallocated by later calls to `oc_arena_push` and similar functions. No memory is actually released _to the system_. arena_clear :: proc(arena: ^arena) --- // Begin a memory scope. This creates an `oc_arena_scope` object that stores the current offset of the arena. The arena can later be reset to that offset by calling `oc_arena_scope_end`, releasing all memory that was allocated within the scope to the arena. @@ -530,15 +555,15 @@ utf8_status :: enum u32 { // The operation unexpectedly encountered the end of the utf8 sequence. OUT_OF_BOUNDS = 1, // A continuation byte was encountered where a leading byte was expected. - UNEXPECTED_CONTINUATION_BYTE = 3, + UNEXPECTED_CONTINUATION_BYTE = 2, // A leading byte was encountered in the middle of the encoding of utf8 codepoint. - UNEXPECTED_LEADING_BYTE = 4, + UNEXPECTED_LEADING_BYTE = 3, // The utf8 sequence contains an invalid byte. - INVALID_BYTE = 5, + INVALID_BYTE = 4, // The operation encountered an invalid utf8 codepoint. - INVALID_CODEPOINT = 6, + INVALID_CODEPOINT = 5, // The utf8 sequence contains an overlong encoding of a utf8 codepoint. - OVERLONG_ENCODING = 7, + OVERLONG_ENCODING = 6, } // A type representing the result of decoding of utf8-encoded codepoint. @@ -1044,6 +1069,9 @@ file_dialog_result :: struct { selection: str8_list, } +// An opaque handle identifying a window. +window :: distinct u64 + @(default_calling_convention="c", link_prefix="oc_") foreign { // Set the title of the application's window. @@ -1054,8 +1082,93 @@ foreign { request_quit :: proc() --- // Convert a scancode to a keycode, according to current keyboard layout. scancode_to_keycode :: proc(scanCode: scan_code) -> key_code --- +} + +//////////////////////////////////////////////////////////////////////////////// +// Application user input. +//////////////////////////////////////////////////////////////////////////////// + +key_state :: struct { + lastUpdate: u64, + transitionCount: u32, + repeatCount: u32, + down: bool, + sysClicked: bool, + sysDoubleClicked: bool, + sysTripleClicked: bool, +} + +keyboard_state :: struct { + keys: [349]key_state, + mods: keymod_flags, +} + +mouse_state :: struct { + lastUpdate: u64, + posValid: bool, + pos: vec2, + delta: vec2, + wheel: vec2, + using _: struct #raw_union { + buttons: [5]key_state, + using _: struct { + left: key_state, + right: key_state, + middle: key_state, + ext1: key_state, + ext2: key_state, + }, + }, +} + +BACKING_SIZE :: 64 + +text_state :: struct { + lastUpdate: u64, + backing: [64]utf32, + codePoints: str32, +} + +clipboard_state :: struct { + lastUpdate: u64, + pastedText: str8, +} + +input_state :: struct { + frameCounter: u64, + keyboard: keyboard_state, + mouse: mouse_state, + text: text_state, + clipboard: clipboard_state, +} + +@(default_calling_convention="c", link_prefix="oc_") +foreign { + input_process_event :: proc(arena: ^arena, state: ^input_state, event: ^event) --- + input_next_frame :: proc(state: ^input_state) --- + key_down :: proc(state: ^input_state, key: key_code) -> bool --- + key_press_count :: proc(state: ^input_state, key: key_code) -> u8 --- + key_release_count :: proc(state: ^input_state, key: key_code) -> u8 --- + key_repeat_count :: proc(state: ^input_state, key: key_code) -> u8 --- + key_down_scancode :: proc(state: ^input_state, key: scan_code) -> bool --- + key_press_count_scancode :: proc(state: ^input_state, key: scan_code) -> u8 --- + key_release_count_scancode :: proc(state: ^input_state, key: scan_code) -> u8 --- + key_repeat_count_scancode :: proc(state: ^input_state, key: scan_code) -> u8 --- + mouse_down :: proc(state: ^input_state, button: mouse_button) -> bool --- + mouse_pressed :: proc(state: ^input_state, button: mouse_button) -> u8 --- + mouse_released :: proc(state: ^input_state, button: mouse_button) -> u8 --- + mouse_clicked :: proc(state: ^input_state, button: mouse_button) -> bool --- + mouse_double_clicked :: proc(state: ^input_state, button: mouse_button) -> bool --- + mouse_position :: proc(state: ^input_state) -> vec2 --- + mouse_delta :: proc(state: ^input_state) -> vec2 --- + mouse_wheel :: proc(state: ^input_state) -> vec2 --- + input_text_utf32 :: proc(arena: ^arena, state: ^input_state) -> str32 --- + input_text_utf8 :: proc(arena: ^arena, state: ^input_state) -> str8 --- // Put a string in the clipboard. clipboard_set_string :: proc(string: str8) --- + clipboard_pasted :: proc(state: ^input_state) -> bool --- + clipboard_pasted_text :: proc(state: ^input_state) -> str8 --- + key_mods :: proc(state: ^input_state) -> keymod_flags --- } //////////////////////////////////////////////////////////////////////////////// @@ -1073,7 +1186,7 @@ file :: distinct u64 // Flags for the `oc_file_open()` function. file_open_flag :: enum u16 { // Open the file in 'append' mode. All writes append data at the end of the file. - APPEND = 1, + APPEND = 0, // Truncate the file to 0 bytes when opening. TRUNCATE, // Create the file if it does not exist. @@ -1090,7 +1203,7 @@ file_open_flags :: bit_set[file_open_flag; u16] // This enum describes the access permissions of a file handle. file_access_flag :: enum u16 { // The file handle can be used for reading from the file. - READ = 1, + READ = 0, // The file handle can be used for writing to the file. WRITE, } @@ -1242,7 +1355,7 @@ file_type :: enum u32 { // A type describing file permissions. file_perm_flag :: enum u16 { - OTHER_EXEC = 1, + OTHER_EXEC = 0, OTHER_WRITE, OTHER_READ, GROUP_EXEC, @@ -1272,6 +1385,18 @@ file_status :: struct { modificationDate: datestamp, } +// An type describing a list of enumerated files in a given directory. +file_list :: struct { + list: list, + eltCount: u64, +} + +file_listdir_elt :: struct { + listElt: list_elt, + basename: str8, + type: file_type, +} + @(default_calling_convention="c", link_prefix="oc_") foreign { // Send a single I/O request and wait for its completion. @@ -1299,6 +1424,7 @@ foreign { file_get_status :: proc(file: file) -> file_status --- file_size :: proc(file: file) -> u64 --- file_open_with_request :: proc(path: str8, rights: file_access, flags: file_open_flags) -> file --- + file_listdir :: proc(arena: ^arena, directory: str8) -> file_list --- } //////////////////////////////////////////////////////////////////////////////// @@ -1703,87 +1829,6 @@ foreign { // Graphical User Interface API. //////////////////////////////////////////////////////////////////////////////// -key_state :: struct { - lastUpdate: u64, - transitionCount: u32, - repeatCount: u32, - down: bool, - sysClicked: bool, - sysDoubleClicked: bool, - sysTripleClicked: bool, -} - -keyboard_state :: struct { - keys: [349]key_state, - mods: keymod_flags, -} - -mouse_state :: struct { - lastUpdate: u64, - posValid: bool, - pos: vec2, - delta: vec2, - wheel: vec2, - using _: struct #raw_union { - buttons: [5]key_state, - using _: struct { - left: key_state, - right: key_state, - middle: key_state, - ext1: key_state, - ext2: key_state, - }, - }, -} - -BACKING_SIZE :: 64 - -text_state :: struct { - lastUpdate: u64, - backing: [64]utf32, - codePoints: str32, -} - -clipboard_state :: struct { - lastUpdate: u64, - pastedText: str8, -} - -input_state :: struct { - frameCounter: u64, - keyboard: keyboard_state, - mouse: mouse_state, - text: text_state, - clipboard: clipboard_state, -} - -@(default_calling_convention="c", link_prefix="oc_") -foreign { - input_process_event :: proc(arena: ^arena, state: ^input_state, event: ^event) --- - input_next_frame :: proc(state: ^input_state) --- - key_down :: proc(state: ^input_state, key: key_code) -> bool --- - key_press_count :: proc(state: ^input_state, key: key_code) -> u8 --- - key_release_count :: proc(state: ^input_state, key: key_code) -> u8 --- - key_repeat_count :: proc(state: ^input_state, key: key_code) -> u8 --- - key_down_scancode :: proc(state: ^input_state, key: scan_code) -> bool --- - key_press_count_scancode :: proc(state: ^input_state, key: scan_code) -> u8 --- - key_release_count_scancode :: proc(state: ^input_state, key: scan_code) -> u8 --- - key_repeat_count_scancode :: proc(state: ^input_state, key: scan_code) -> u8 --- - mouse_down :: proc(state: ^input_state, button: mouse_button) -> bool --- - mouse_pressed :: proc(state: ^input_state, button: mouse_button) -> u8 --- - mouse_released :: proc(state: ^input_state, button: mouse_button) -> u8 --- - mouse_clicked :: proc(state: ^input_state, button: mouse_button) -> bool --- - mouse_double_clicked :: proc(state: ^input_state, button: mouse_button) -> bool --- - mouse_position :: proc(state: ^input_state) -> vec2 --- - mouse_delta :: proc(state: ^input_state) -> vec2 --- - mouse_wheel :: proc(state: ^input_state) -> vec2 --- - input_text_utf32 :: proc(arena: ^arena, state: ^input_state) -> str32 --- - input_text_utf8 :: proc(arena: ^arena, state: ^input_state) -> str8 --- - clipboard_pasted :: proc(state: ^input_state) -> bool --- - clipboard_pasted_text :: proc(state: ^input_state) -> str8 --- - key_mods :: proc(state: ^input_state) -> keymod_flags --- -} - //////////////////////////////////////////////////////////////////////////////// // Graphical User Interface Core API. //////////////////////////////////////////////////////////////////////////////// @@ -1857,11 +1902,11 @@ ui_attribute_mask :: enum u32 { SIZE_WIDTH = 1, SIZE_HEIGHT = 2, LAYOUT_AXIS = 4, - LAYOUT_ALIGN_X = 64, - LAYOUT_ALIGN_Y = 128, - LAYOUT_SPACING = 32, LAYOUT_MARGIN_X = 8, LAYOUT_MARGIN_Y = 16, + LAYOUT_SPACING = 32, + LAYOUT_ALIGN_X = 64, + LAYOUT_ALIGN_Y = 128, FLOATING_X = 256, FLOATING_Y = 512, FLOAT_TARGET_X = 1024, @@ -1873,10 +1918,10 @@ ui_attribute_mask :: enum u32 { COLOR = 65536, BG_COLOR = 131072, BORDER_COLOR = 262144, - BORDER_SIZE = 2097152, - ROUNDNESS = 4194304, FONT = 524288, FONT_SIZE = 1048576, + BORDER_SIZE = 2097152, + ROUNDNESS = 4194304, DRAW_MASK = 8388608, ANIMATION_TIME = 16777216, ANIMATION_MASK = 33554432, @@ -1898,6 +1943,7 @@ ui_box_size :: [2]ui_size ui_box_floating :: [2]bool +// These bits *disable* the corresponding element when they're set. ui_draw_mask :: enum u32 { BACKGROUND = 1, BORDER = 2, From 7e7cd755275e768c114e4b778fd9552197f17f35 Mon Sep 17 00:00:00 2001 From: Paul Page Date: Mon, 12 Jan 2026 16:52:57 -0600 Subject: [PATCH 102/212] remove unneeded manual definitions --- core/sys/orca/orca.odin | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/core/sys/orca/orca.odin b/core/sys/orca/orca.odin index ba47a13fa..a0fe0a041 100644 --- a/core/sys/orca/orca.odin +++ b/core/sys/orca/orca.odin @@ -8,9 +8,6 @@ import "core:c" char :: c.char -// currently missing in the api.json -window :: distinct u64 - // currently missing in the api.json pool :: struct { arena: arena, @@ -143,17 +140,6 @@ UNICODE_VARIATION_SELECTORS_SUPPLEMENT :: unicode_range { 0xe0100, 239 } UNICODE_SUPPLEMENTARY_PRIVATE_USE_AREA_A :: unicode_range { 0xf0000, 65533 } UNICODE_SUPPLEMENTARY_PRIVATE_USE_AREA_B :: unicode_range { 0x100000, 65533 } -clock_kind :: enum c.int { - MONOTONIC, - UPTIME, - DATE, -} - -@(default_calling_convention="c", link_prefix="oc_") -foreign { - clock_time :: proc(clock: clock_kind) -> f64 --- -} - file_write_slice :: proc(file: file, slice: []char) -> u64 { return file_write(file, u64(len(slice)), raw_data(slice)) } From 4ae02aaacf3ccb9791e01fd3d095b9579cf072d8 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 13 Jan 2026 19:38:10 +0100 Subject: [PATCH 103/212] pool: explicit memory ordering and improved destroy --- core/container/pool/pool.odin | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/core/container/pool/pool.odin b/core/container/pool/pool.odin index 93eddb514..d3e815351 100644 --- a/core/container/pool/pool.odin +++ b/core/container/pool/pool.odin @@ -41,26 +41,33 @@ init :: proc(p: ^Pool($T), $link_field: string, block_size: uint = DEFAULT_BLOCK } destroy :: proc(p: ^Pool($T)) { - for elem := p.free_list; elem != nil; elem = _get_next(p, elem) { - _unpoison_elem(p, elem) - free(elem, _pool_arena_allocator(&p.arena)) + elem := sync.atomic_exchange_explicit(&p.free_list, nil, .Acquire) + + sync.atomic_store_explicit(&p.num_ready, 0, .Relaxed) + assert(sync.atomic_load_explicit(&p.num_outstanding, .Relaxed) == 0) + + when .Address in ODIN_SANITIZER_FLAGS { + for ; elem != nil; elem = _get_next(p, elem) { + _unpoison_elem(p, elem) + } } _pool_arena_destroy(&p.arena) + p.arena = {} } @(require_results) get :: proc(p: ^Pool($T)) -> (elem: ^T, err: mem.Allocator_Error) #optional_allocator_error { - sync.atomic_add_explicit(&p.num_outstanding, 1, .Relaxed) + defer sync.atomic_add_explicit(&p.num_outstanding, 1, .Relaxed) for { - elem = sync.atomic_load(&p.free_list) + elem = sync.atomic_load_explicit(&p.free_list, .Acquire) if elem == nil { // NOTE: pool arena has an internal lock. return new(T, _pool_arena_allocator(&p.arena)) } - if _, ok := sync.atomic_compare_exchange_weak(&p.free_list, elem, _get_next(p, elem)); ok { + if _, ok := sync.atomic_compare_exchange_weak_explicit(&p.free_list, elem, _get_next(p, elem), .Acquire, .Relaxed); ok { _set_next(p, elem, nil) _unpoison_elem(p, elem) sync.atomic_sub_explicit(&p.num_ready, 1, .Relaxed) @@ -77,9 +84,9 @@ put :: proc(p: ^Pool($T), elem: ^T) { defer sync.atomic_add_explicit(&p.num_ready, 1, .Relaxed) for { - head := sync.atomic_load(&p.free_list) + head := sync.atomic_load_explicit(&p.free_list, .Relaxed) _set_next(p, elem, head) - if _, ok := sync.atomic_compare_exchange_weak(&p.free_list, head, elem); ok { + if _, ok := sync.atomic_compare_exchange_weak_explicit(&p.free_list, head, elem, .Release, .Relaxed); ok { return } } From 8f5702e69eaeda44008bf0b6539a192fe9d74419 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 13 Jan 2026 19:38:27 +0100 Subject: [PATCH 104/212] nbio: reorder Operation fields to be more logical --- core/nbio/nbio.odin | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/nbio/nbio.odin b/core/nbio/nbio.odin index 16664ea9f..274cc5291 100644 --- a/core/nbio/nbio.odin +++ b/core/nbio/nbio.odin @@ -42,16 +42,17 @@ MAX_USER_ARGUMENTS :: #config(NBIO_MAX_USER_ARGUMENTS, 4) #assert(MAX_USER_ARGUMENTS >= 4) Operation :: struct { + cb: Callback, + user_data: [MAX_USER_ARGUMENTS + 1]rawptr, + detached: bool, + type: Operation_Type, + using specifics: Specifics, + _impl: _Operation `fmt:"-"`, using _: struct #raw_union { _pool_link: ^Operation, l: ^Event_Loop, }, - cb: Callback, - using _specifics: Specifics, - user_data: [MAX_USER_ARGUMENTS + 1]rawptr, - type: Operation_Type, - detached: bool, } Specifics :: struct #raw_union { From c637679917397417a4f15e5ee93dc96dc44c9baa Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 13 Jan 2026 19:46:46 +0100 Subject: [PATCH 105/212] nbio: don't rely on the private _impl being the first field --- core/nbio/impl_windows.odin | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index 7f98c7490..4610d4754 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -37,11 +37,9 @@ MAX_RW :: mem.Gigabyte @(private="package") _Operation :: struct { - over: win.OVERLAPPED, - timeout: ^Operation, + over: win.OVERLAPPED, + timeout: ^Operation, } -#assert(offset_of(Operation, _impl) == 0, "needs to be the first field to work") -#assert(offset_of(_Operation, over) == 0, "needs to be the first field to work") @(private="package") _Accept :: struct { @@ -203,10 +201,7 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { for event in events[:entries_removed] { if event.lpCompletionKey == COMPLETION_KEY_WAKE_UP { continue } assert(event.lpOverlapped != nil) - - // This is actually pointing at the Completion.over field, but because it is the first field - // It is also a valid pointer to the Completion struct. - op := (^Operation)(event.lpOverlapped) + op := container_of(container_of(event.lpOverlapped, _Operation, "over"), Operation, "_impl") handle_completed(op) } From 4af4b2f5757a8d45aba6bf5db5c99faf63150173 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Tue, 13 Jan 2026 19:47:09 +0100 Subject: [PATCH 106/212] pool: use `elem` in else of the when statement (vet issue) --- core/container/pool/pool.odin | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/container/pool/pool.odin b/core/container/pool/pool.odin index d3e815351..425d6a0fb 100644 --- a/core/container/pool/pool.odin +++ b/core/container/pool/pool.odin @@ -50,6 +50,8 @@ destroy :: proc(p: ^Pool($T)) { for ; elem != nil; elem = _get_next(p, elem) { _unpoison_elem(p, elem) } + } else { + _ = elem } _pool_arena_destroy(&p.arena) From 622fa818bcc7521fefa7786b3112c78adb18c31b Mon Sep 17 00:00:00 2001 From: Fabrice <67000409+Fabbboy@users.noreply.github.com> Date: Tue, 13 Jan 2026 20:56:40 +0100 Subject: [PATCH 107/212] Adds static linking to non-windows platforms (#6057) --- src/linker.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/linker.cpp b/src/linker.cpp index c2a3ee928..c68417994 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -737,7 +737,21 @@ try_cross_linking:; } if (build_context.build_mode == BuildMode_StaticLibrary) { - compiler_error("TODO(bill): -build-mode:static on non-windows targets"); + TIME_SECTION("Static Library Creation"); + + gbString ar_command = gb_string_make(heap_allocator(), ""); + defer (gb_string_free(ar_command)); + + ar_command = gb_string_appendc(ar_command, "ar rcs "); + ar_command = gb_string_append_fmt(ar_command, "\"%.*s\" ", LIT(output_filename)); + ar_command = gb_string_appendc(ar_command, object_files); + + result = system_exec_command_line_app("ar", ar_command); + if (result) { + return result; + } + + return result; } // NOTE(dweiler): We use clang as a frontend for the linker as there are From 0c3f3f536bd802ee8cdb0d8cf844c3962513a251 Mon Sep 17 00:00:00 2001 From: Znarf <90558133+FrancisTheCat@users.noreply.github.com> Date: Tue, 13 Jan 2026 21:02:08 +0100 Subject: [PATCH 108/212] Implement more Linux syscalls. (#6083) --- core/sys/linux/bits.odin | 31 ++++++++ core/sys/linux/constants.odin | 14 ++++ core/sys/linux/sys.odin | 137 +++++++++++++++++++++++++++++----- core/sys/linux/types.odin | 30 ++++++++ 4 files changed, 192 insertions(+), 20 deletions(-) diff --git a/core/sys/linux/bits.odin b/core/sys/linux/bits.odin index 213d6c26f..2487ebe92 100644 --- a/core/sys/linux/bits.odin +++ b/core/sys/linux/bits.odin @@ -2269,3 +2269,34 @@ Swap_Flags_Bits :: enum { PREFER = log2(0x8000), DISCARD = log2(0x10000), } + +Sched_Policy :: enum u32 { + OTHER = 0, + BATCH = 3, + IDLE = 5, + FIFO = 1, + RR = 2, + DEADLINE = 6, +} + +Sched_Flag_Bits :: enum { + RESET_ON_FORK = log2(0x01), + RECLAIM = log2(0x02), + DL_OVERRUN = log2(0x04), + KEEP_POLICY = log2(0x08), + KEEP_PARAMS = log2(0x10), + UTIL_CLAMP_MIN = log2(0x20), + UTIL_CLAMP_MAX = log2(0x40), +} + +Sched_Attr_Flag_Bits :: enum {} + +/* + See `constants.odin` for `MFD_HUGE_16KB`, et al. +*/ +Memfd_Create_Flag_Bits :: enum { + CLOEXEC = log2(0x1), + ALLOW_SEALING = log2(0x2), + HUGETLB = log2(0x4), +} + diff --git a/core/sys/linux/constants.odin b/core/sys/linux/constants.odin index 71a16312e..4de57f40b 100644 --- a/core/sys/linux/constants.odin +++ b/core/sys/linux/constants.odin @@ -395,6 +395,20 @@ MAP_HUGE_1GB :: transmute(Map_Flags)(u32(30) << MAP_HUGE_SHIFT) MAP_HUGE_2GB :: transmute(Map_Flags)(u32(31) << MAP_HUGE_SHIFT) MAP_HUGE_16GB :: transmute(Map_Flags)(u32(34) << MAP_HUGE_SHIFT) +MFD_HUGE_16KB :: transmute(Memfd_Create_Flags)(u32(14) << MAP_HUGE_SHIFT) +MFD_HUGE_64KB :: transmute(Memfd_Create_Flags)(u32(16) << MAP_HUGE_SHIFT) +MFD_HUGE_512KB :: transmute(Memfd_Create_Flags)(u32(19) << MAP_HUGE_SHIFT) +MFD_HUGE_1MB :: transmute(Memfd_Create_Flags)(u32(20) << MAP_HUGE_SHIFT) +MFD_HUGE_2MB :: transmute(Memfd_Create_Flags)(u32(21) << MAP_HUGE_SHIFT) +MFD_HUGE_8MB :: transmute(Memfd_Create_Flags)(u32(23) << MAP_HUGE_SHIFT) +MFD_HUGE_16MB :: transmute(Memfd_Create_Flags)(u32(24) << MAP_HUGE_SHIFT) +MFD_HUGE_32MB :: transmute(Memfd_Create_Flags)(u32(25) << MAP_HUGE_SHIFT) +MFD_HUGE_256MB :: transmute(Memfd_Create_Flags)(u32(28) << MAP_HUGE_SHIFT) +MFD_HUGE_512MB :: transmute(Memfd_Create_Flags)(u32(29) << MAP_HUGE_SHIFT) +MFD_HUGE_1GB :: transmute(Memfd_Create_Flags)(u32(30) << MAP_HUGE_SHIFT) +MFD_HUGE_2GB :: transmute(Memfd_Create_Flags)(u32(31) << MAP_HUGE_SHIFT) +MFD_HUGE_16GB :: transmute(Memfd_Create_Flags)(u32(34) << MAP_HUGE_SHIFT) + /* Get window size */ TIOCGWINSZ :: 0x5413 diff --git a/core/sys/linux/sys.odin b/core/sys/linux/sys.odin index faeda6f43..b4943411a 100644 --- a/core/sys/linux/sys.odin +++ b/core/sys/linux/sys.odin @@ -2043,22 +2043,71 @@ setpriority :: proc "contextless" (which: Priority_Which, who: i32, prio: i32) - return Errno(-ret) } -// TODO(flysand): sched_setparam - -// TODO(flysand): sched_getparam - -// TODO(flysand): sched_setscheduler - -// TODO(flysand): sched_getscheduler - -// TODO(flysand): sched_get_priority_max - -// TODO(flysand): sched_get_priority_min - -// TODO(flysand): sched_rr_get_interval +/* + Set scheduling parameters. + Available since Linux 2.0. +*/ +sched_setparam :: proc "contextless" (pid: Pid, param: ^Sched_Param) -> (Errno) { + ret := syscall(SYS_sched_setparam, pid, param) + return Errno(-ret) +} /* - Lock and memory. + Get scheduling parameters. + Available since Linux 2.0. +*/ +sched_getparam :: proc "contextless" (pid: Pid, param: ^Sched_Param) -> (Errno) { + ret := syscall(SYS_sched_getparam, pid, param) + return Errno(-ret) +} + +/* + Set scheduling policy/parameters. + Available since Linux 2.0. +*/ +sched_setscheduler :: proc "contextless" (pid: Pid, policy: i32, param: ^Sched_Param) -> (Errno) { + ret := syscall(SYS_sched_setscheduler, pid, policy, param) + return Errno(-ret) +} + +/* + Get scheduling policy/parameters. + Available since Linux 2.0. +*/ +sched_getscheduler :: proc "contextless" (pid: Pid, policy: i32, param: ^Sched_Param) -> (i32, Errno) { + ret := syscall(SYS_sched_getscheduler, pid) + return errno_unwrap(ret, i32) +} + +/* + Get static priority range. + Available since Linux 2.0. +*/ +sched_get_priority_max :: proc "contextless" (policy: i32) -> (i32, Errno) { + ret := syscall(SYS_sched_get_priority_max, policy) + return errno_unwrap(ret, i32) +} + +/* + Get static priority range. + Available since Linux 2.0. +*/ +sched_get_priority_min :: proc "contextless" (policy: i32) -> (i32, Errno) { + ret := syscall(SYS_sched_get_priority_min, policy) + return errno_unwrap(ret, i32) +} + +/* + get the SCHED_RR interval for the named process. + Available since Linux 2.0. +*/ +sched_rr_get_interval :: proc "contextless" (pid: Pid, tp: ^Time_Spec) -> (Errno) { + ret := syscall(SYS_sched_rr_get_interval, pid, tp) + return Errno(-ret) +} + +/* + Lock memory. Available since Linux 2.0. If flags specified, available since Linux 4.4. */ @@ -2560,9 +2609,29 @@ futex :: proc{ futex_wake_bitset, } -// TODO(flysand): sched_setaffinity +/* + Set a thread's CPU affinity mask. + Available since Linux 2.6. + + If you are running on a system with less than 128 cores you can use `linux.Cpu_Set` as the type for the mask argument. + Otherwise use an array of integers. +*/ +sched_setaffinity :: proc "contextless" (pid: Pid, cpusetsize: uint, mask: rawptr) -> (Errno) { + ret := syscall(SYS_sched_setaffinity, pid, cpusetsize, mask) + return Errno(-ret) +} -// TODO(flysand): sched_getaffinity +/* + Get a thread's CPU affinity mask. + Available since Linux 2.6. + + If you are running on a system with less than 128 cores you can use `linux.Cpu_Set` as the type for the mask argument. + Otherwise use an array of integers. +*/ +sched_getaffinity :: proc "contextless" (pid: Pid, cpusetsize: uint, mask: rawptr) -> (Errno) { + ret := syscall(SYS_sched_getaffinity, pid, cpusetsize, mask) + return Errno(-ret) +} // TODO(flysand): set_thread_area @@ -3100,7 +3169,14 @@ sendmmsg :: proc "contextless" (sock: Fd, msg_vec: []MMsg_Hdr, flags: Socket_Msg // TODO(flysand): setns -// TODO(flysand): getcpu +/* + Determine CPU and NUMA node on which the calling thread is running. + Available since Linux 2.6.19. +*/ +getcpu :: proc "contextless" (cpu, node: ^u32) -> (Errno) { + ret := syscall(SYS_getcpu, cpu, node) + return Errno(-ret) +} // TODO(flysand): process_vm_readv @@ -3110,9 +3186,23 @@ sendmmsg :: proc "contextless" (sock: Fd, msg_vec: []MMsg_Hdr, flags: Socket_Msg // TODO(flysand): finit_module -// TODO(flysand): sched_setattr +/* + Set scheduling policy and attributes. + Available since Linux 3.14. +*/ +sched_setattr :: proc "contextless" (pid: Pid, attr: ^Sched_Attr, flags: Sched_Attr_Flags) -> (Errno) { + ret := syscall(SYS_sched_setattr, pid, attr, transmute(u32)flags) + return Errno(-ret) +} -// TODO(flysand): sched_getattr +/* + Get scheduling policy and attributes. + Available since Linux 3.14. +*/ +sched_getattr :: proc "contextless" (pid: Pid, attr: ^Sched_Attr, size: u32, flags: Sched_Attr_Flags) -> (Errno) { + ret := syscall(SYS_sched_getattr, pid, attr, transmute(u32)flags) + return Errno(-ret) +} /* Rename the file with names relative to the specified dirfd's with other options. @@ -3130,7 +3220,14 @@ getrandom :: proc "contextless" (buf: []u8, flags: Get_Random_Flags) -> (int, Er return errno_unwrap(ret, int) } -// TODO(flysand): memfd_create +/* + Create an anonymous file. + Available since Linux 3.17. +*/ +memfd_create :: proc "contextless" (name: cstring, flags: Memfd_Create_Flags) -> (Fd, Errno) { + ret := syscall(SYS_memfd_create, cast(rawptr)name, transmute(u32)flags) + return errno_unwrap(ret, Fd) +} // TODO(flysand): kexec_file_load diff --git a/core/sys/linux/types.odin b/core/sys/linux/types.odin index 0910f11ec..d0cc6c433 100644 --- a/core/sys/linux/types.odin +++ b/core/sys/linux/types.odin @@ -1748,3 +1748,33 @@ Mount_Flags :: bit_set[Mount_Flags_Bits; uint] Umount2_Flags :: bit_set[Umount2_Flags_Bits; u32] Swap_Flags :: bit_set[Swap_Flags_Bits; u32] + +Cpu_Set :: bit_set[0 ..< 128] + +Sched_Param :: struct { + sched_priority: i32, +} + +Sched_Flags :: bit_set[Sched_Flag_Bits; u32] + +Sched_Attr :: struct { + size: u32, + + sched_policy: Sched_Policy, + sched_flags: Sched_Flags, + sched_nice: i32, + sched_priority: u32, + + /* For the DEADLINE policy */ + sched_runtime: u64, + sched_deadline: u64, + sched_period: u64, + + /* Utilization hints */ + sched_util_min: u32, + sched_util_max: u32, +} + +Sched_Attr_Flags :: bit_set[Sched_Attr_Flag_Bits; u32] + +Memfd_Create_Flags :: bit_set[Memfd_Create_Flag_Bits; u32] From edb70a8d7560e003482af5277feb014a1e65251d Mon Sep 17 00:00:00 2001 From: Xotchkass <78706300+Xotchkass@users.noreply.github.com> Date: Tue, 13 Jan 2026 22:11:01 +0200 Subject: [PATCH 109/212] optimized slice filling in xoshiro/pcg_random_generator_proc (#6001) --- core/math/rand/rand_pcg.odin | 22 +++++++++++++--------- core/math/rand/rand_xoshiro256.odin | 22 +++++++++++++--------- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/core/math/rand/rand_pcg.odin b/core/math/rand/rand_pcg.odin index 009e139be..79c18acbb 100644 --- a/core/math/rand/rand_pcg.odin +++ b/core/math/rand/rand_pcg.odin @@ -55,16 +55,20 @@ pcg_random_generator_proc :: proc(data: rawptr, mode: runtime.Random_Generator_M intrinsics.unaligned_store((^u64)(raw_data(p)), read_u64(r)) case: // All other cases. - pos := i8(0) - val := u64(0) - for &v in p { - if pos == 0 { - val = read_u64(r) - pos = 8 + n := len(p) / size_of(u64) + buff := ([^]u64)(raw_data(p))[:n] + for &e in buff { + intrinsics.unaligned_store(&e, read_u64(r)) + } + // Handle remaining bytes + rem := len(p) % size_of(u64) + if rem > 0 { + val := read_u64(r) + tail := p[len(p) - rem:] + for &b in tail { + b = byte(val) + val >>= 8 } - v = byte(val) - val >>= 8 - pos -= 1 } } diff --git a/core/math/rand/rand_xoshiro256.odin b/core/math/rand/rand_xoshiro256.odin index 54dd02130..7326ba8d5 100644 --- a/core/math/rand/rand_xoshiro256.odin +++ b/core/math/rand/rand_xoshiro256.odin @@ -74,16 +74,20 @@ xoshiro256_random_generator_proc :: proc(data: rawptr, mode: runtime.Random_Gene intrinsics.unaligned_store((^u64)(raw_data(p)), read_u64(r)) case: // All other cases. - pos := i8(0) - val := u64(0) - for &v in p { - if pos == 0 { - val = read_u64(r) - pos = 8 + n := len(p) / size_of(u64) + buff := ([^]u64)(raw_data(p))[:n] + for &e in buff { + intrinsics.unaligned_store(&e, read_u64(r)) + } + // Handle remaining bytes + rem := len(p) % size_of(u64) + if rem > 0 { + val := read_u64(r) + tail := p[len(p) - rem:] + for &b in tail { + b = byte(val) + val >>= 8 } - v = byte(val) - val >>= 8 - pos -= 1 } } From a4f958b738b2cfd9d50d07b1357645d6c4d7902f Mon Sep 17 00:00:00 2001 From: Jacob Evelyn Date: Tue, 13 Jan 2026 15:13:18 -0500 Subject: [PATCH 110/212] Fix darwin/Foundation/NSScreen type property bindings (#6038) This commit updates the `darwin/Foundation` package's `NSScreen` bindings to treat Objective-C "type properties" as class methods rather than instance methods. As a result, we can now access these properties like this: ```odin import NS "core:sys/darwin/Foundation" main :: proc() { NS.Screen.mainScreen() } ``` instead of this: ```odin import NS "core:sys/darwin/Foundation" main :: proc() { (^NS.Screen)(nil).mainScreen() } ``` This commit also adds a binding for `NSScreen`'s `screensHaveSeparateSpaces` type property, which was previously missing from the `darwin/Foundation` package. Co-authored-by: Jacob Evelyn --- core/sys/darwin/Foundation/NSScreen.odin | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/sys/darwin/Foundation/NSScreen.odin b/core/sys/darwin/Foundation/NSScreen.odin index 79ab00fbe..8d52b9e1c 100644 --- a/core/sys/darwin/Foundation/NSScreen.odin +++ b/core/sys/darwin/Foundation/NSScreen.odin @@ -3,18 +3,22 @@ package objc_Foundation @(objc_class="NSScreen") Screen :: struct {using _: Object} -@(objc_type=Screen, objc_name="mainScreen") +@(objc_type=Screen, objc_name="mainScreen", objc_is_class_method=true) Screen_mainScreen :: proc "c" () -> ^Screen { return msgSend(^Screen, Screen, "mainScreen") } -@(objc_type=Screen, objc_name="deepestScreen") +@(objc_type=Screen, objc_name="deepestScreen", objc_is_class_method=true) Screen_deepestScreen :: proc "c" () -> ^Screen { return msgSend(^Screen, Screen, "deepestScreen") } -@(objc_type=Screen, objc_name="screens") +@(objc_type=Screen, objc_name="screens", objc_is_class_method=true) Screen_screens :: proc "c" () -> ^Array { return msgSend(^Array, Screen, "screens") } +@(objc_type=Screen, objc_name="screensHaveSeparateSpaces", objc_is_class_method=true) +Screen_screensHaveSeparateSpaces :: proc "c" () -> BOOL { + return msgSend(BOOL, Screen, "screensHaveSeparateSpaces") +} @(objc_type=Screen, objc_name="frame") Screen_frame :: proc "c" (self: ^Screen) -> Rect { return msgSend(Rect, self, "frame") From 11afefeedc3258f6bca822ef33e5908f3cf6592c Mon Sep 17 00:00:00 2001 From: Jacob Evelyn Date: Tue, 13 Jan 2026 15:13:59 -0500 Subject: [PATCH 111/212] Add NSWindow layout information method bindings to darwin/Foundation (#6040) This commit adds bindings for `NSWindow`'s ["Getting Layout Information"](https://developer.apple.com/documentation/appkit/nswindow?language=objc#Getting-Layout-Information) methods to the `core:sys/darwin/Foundation` package. Co-authored-by: Jacob Evelyn --- core/sys/darwin/Foundation/NSWindow.odin | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/core/sys/darwin/Foundation/NSWindow.odin b/core/sys/darwin/Foundation/NSWindow.odin index f39faca0a..11f8b187e 100644 --- a/core/sys/darwin/Foundation/NSWindow.odin +++ b/core/sys/darwin/Foundation/NSWindow.odin @@ -968,3 +968,23 @@ Window_setTabbingMode :: proc "c" (self: ^Window, mode: WindowTabbingMode) { Window_toggleFullScreen :: proc "c" (self: ^Window, sender: id) { msgSend(nil, self, "toggleFullScreen:", sender) } +@(objc_type = Window, objc_name = "contentRectForFrameRect", objc_is_class_method=true) +Window_contentRectForFrameRectType :: proc "c" (frameRect: Rect, styleMask: WindowStyleMask) -> Rect { + return msgSend(Rect, Window, "contentRectForFrameRect:styleMask:", frameRect, styleMask) +} +@(objc_type = Window, objc_name = "frameRectForContentRect", objc_is_class_method=true) +Window_frameRectForContentRectType :: proc "c" (contentRect: Rect, styleMask: WindowStyleMask) -> Rect { + return msgSend(Rect, Window, "frameRectForContentRect:styleMask:", contentRect, styleMask) +} +@(objc_type = Window, objc_name = "minFrameWidthWithTitle", objc_is_class_method=true) +Window_minFrameWidthWithTitle :: proc "c" (title: ^String, styleMask: WindowStyleMask) -> Float { + return msgSend(Float, Window, "minFrameWidthWithTitle:styleMask:", title, styleMask) +} +@(objc_type = Window, objc_name = "contentRectForFrameRect") +Window_contentRectForFrameRectInstance :: proc "c" (self: ^Window, frameRect: Rect) -> Rect { + return msgSend(Rect, self, "contentRectForFrameRect:", frameRect) +} +@(objc_type = Window, objc_name = "frameRectForContentRect") +Window_frameRectForContentRectInstance :: proc "c" (self: ^Window, contentRect: Rect) -> Rect { + return msgSend(Rect, self, "frameRectForContentRect:", contentRect) +} From 9d72025a0b6f7b94682662316b892ece865ad8aa Mon Sep 17 00:00:00 2001 From: Faker-09 Date: Tue, 13 Jan 2026 15:25:17 -0500 Subject: [PATCH 112/212] Remove duplicate assingment of array.allocator = allocator in _make_dynamic_array_len_cap(...) (#6095) --- base/runtime/core_builtin.odin | 1 - 1 file changed, 1 deletion(-) diff --git a/base/runtime/core_builtin.odin b/base/runtime/core_builtin.odin index 6fecbaad9..6528fdd1b 100644 --- a/base/runtime/core_builtin.odin +++ b/base/runtime/core_builtin.odin @@ -433,7 +433,6 @@ _make_dynamic_array_len_cap :: proc(array: ^Raw_Dynamic_Array, size_of_elem, ali array.data = raw_data(data) array.len = 0 if use_zero else len array.cap = 0 if use_zero else cap - array.allocator = allocator return } From c64fad8ef7ab196854112c4a65992b11510fde90 Mon Sep 17 00:00:00 2001 From: Franz Date: Wed, 14 Jan 2026 00:43:06 +0100 Subject: [PATCH 113/212] Add warning for `size_of(&x)` expressions --- src/check_builtin.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 1b3e6912c..7b31314f8 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -2695,6 +2695,16 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As case BuiltinProc_size_of: { // size_of :: proc(Type or expr) -> untyped int + if (ce->args[0]->kind == Ast_UnaryExpr) { + ast_node(arg, UnaryExpr, ce->args[0]); + if (arg->op.kind == Token_And) { + ERROR_BLOCK(); + + warning(ce->args[0], "'size_of(&x)' returns the size of a pointer, not the size of x"); + error_line("\tSuggestion: Use 'size_of(rawptr)' if you want the size of the pointer"); + } + } + Operand o = {}; check_expr_or_type(c, &o, ce->args[0]); if (o.mode == Addressing_Invalid) { From bd9d682d154ceb4b6d4a9b129eacce16757219b3 Mon Sep 17 00:00:00 2001 From: Nathan Wong Date: Tue, 13 Jan 2026 16:38:22 -0800 Subject: [PATCH 114/212] Ensure creating a low priority thread does not assert with SCHED_OTHER policy --- core/thread/thread_unix.odin | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/thread/thread_unix.odin b/core/thread/thread_unix.odin index e18ea593d..af2a4a3c1 100644 --- a/core/thread/thread_unix.odin +++ b/core/thread/thread_unix.odin @@ -107,7 +107,11 @@ _create :: proc(procedure: Thread_Proc, priority: Thread_Priority) -> ^Thread { high := posix.sched_get_priority_max(policy) switch priority { case .Normal: // Okay - case .Low: params.sched_priority = low + 1 + case .Low: + params.sched_priority = low + 1 + if params.sched_priority >= high { + params.sched_priority = low + } case .High: params.sched_priority = high } res = posix.pthread_attr_setschedparam(&attrs, ¶ms) From ac35e0336b9c246673f1482ad907c013bfff7938 Mon Sep 17 00:00:00 2001 From: Franz Hoeltermann Date: Wed, 14 Jan 2026 10:42:43 +0100 Subject: [PATCH 115/212] Fix indentation --- src/check_builtin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 7b31314f8..929891826 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -2701,7 +2701,7 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As ERROR_BLOCK(); warning(ce->args[0], "'size_of(&x)' returns the size of a pointer, not the size of x"); - error_line("\tSuggestion: Use 'size_of(rawptr)' if you want the size of the pointer"); + error_line("\tSuggestion: Use 'size_of(rawptr)' if you want the size of the pointer"); } } From 4dcbc67ead5d58fc43efaac4d296c58fb854fb3d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 14 Jan 2026 12:48:19 +0000 Subject: [PATCH 116/212] Remove old dead directory `core:sys/win32` --- core/sys/win32/removal.odin | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 core/sys/win32/removal.odin diff --git a/core/sys/win32/removal.odin b/core/sys/win32/removal.odin deleted file mode 100644 index 09c16aa05..000000000 --- a/core/sys/win32/removal.odin +++ /dev/null @@ -1,3 +0,0 @@ -package sys_win32 - -#panic(`"core:sys/win32" has been removed. Please use "core:sys/windows"`) \ No newline at end of file From 28c9e319d3fe4314dc043123729056422b49a55e Mon Sep 17 00:00:00 2001 From: Wassim Alhajomar <75145262+Wassimulator@users.noreply.github.com> Date: Wed, 14 Jan 2026 15:00:50 +0100 Subject: [PATCH 117/212] use ^Thread instead of index in init and fini --- core/thread/thread_pool.odin | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/thread/thread_pool.odin b/core/thread/thread_pool.odin index ea772c725..10f1438d7 100644 --- a/core/thread/thread_pool.odin +++ b/core/thread/thread_pool.odin @@ -20,8 +20,8 @@ Task :: struct { allocator: mem.Allocator, } -Thread_Init_Proc :: #type proc(thread_index: int, user_data: rawptr) -Thread_Fini_Proc :: #type proc(thread_index: int, user_data: rawptr) +Thread_Init_Proc :: #type proc(thread: ^Thread, user_data: rawptr) +Thread_Fini_Proc :: #type proc(thread: ^Thread, user_data: rawptr) // Do not access the pool's members directly while the pool threads are running, // since they use different kinds of locking and mutual exclusion devices. @@ -66,7 +66,7 @@ pool_thread_runner :: proc(t: ^Thread) { pool := data.pool if pool.thread_init_proc != nil { - pool.thread_init_proc(t.user_index, pool.thread_init_data) + pool.thread_init_proc(t, pool.thread_init_data) } for intrinsics.atomic_load(&pool.is_running) { @@ -81,7 +81,7 @@ pool_thread_runner :: proc(t: ^Thread) { } if pool.thread_fini_proc != nil { - pool.thread_fini_proc(t.user_index, pool.thread_fini_data) + pool.thread_fini_proc(t, pool.thread_fini_data) } sync.post(&pool.sem_available, 1) From 5fcf210c916135a66283b65cd7785cbbe091ebee Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Wed, 14 Jan 2026 19:03:15 +0100 Subject: [PATCH 118/212] uring: move package from nbio/uring to sys/linux/uring --- core/nbio/impl_linux.odin | 2 +- core/{nbio => sys/linux}/uring/doc.odin | 2 +- core/{nbio => sys/linux}/uring/ops.odin | 0 core/{nbio => sys/linux}/uring/uring.odin | 0 examples/all/all_linux.odin | 3 ++- 5 files changed, 4 insertions(+), 3 deletions(-) rename core/{nbio => sys/linux}/uring/doc.odin (98%) rename core/{nbio => sys/linux}/uring/ops.odin (100%) rename core/{nbio => sys/linux}/uring/uring.odin (100%) diff --git a/core/nbio/impl_linux.odin b/core/nbio/impl_linux.odin index b48fe248c..cdcbeedc1 100644 --- a/core/nbio/impl_linux.odin +++ b/core/nbio/impl_linux.odin @@ -6,11 +6,11 @@ import "base:intrinsics" import "core:container/pool" import "core:container/queue" import "core:mem" -import "core:nbio/uring" import "core:net" import "core:slice" import "core:strings" import "core:sys/linux" +import "core:sys/linux/uring" import "core:time" @(private="package") diff --git a/core/nbio/uring/doc.odin b/core/sys/linux/uring/doc.odin similarity index 98% rename from core/nbio/uring/doc.odin rename to core/sys/linux/uring/doc.odin index 440b294d6..8b9ae5ee8 100644 --- a/core/nbio/uring/doc.odin +++ b/core/sys/linux/uring/doc.odin @@ -11,7 +11,7 @@ Example: import "core:fmt" import "core:os" import "core:sys/linux" - import "core:nbio/uring" + import "core:sys/linux/uring" Request :: struct { path: cstring, diff --git a/core/nbio/uring/ops.odin b/core/sys/linux/uring/ops.odin similarity index 100% rename from core/nbio/uring/ops.odin rename to core/sys/linux/uring/ops.odin diff --git a/core/nbio/uring/uring.odin b/core/sys/linux/uring/uring.odin similarity index 100% rename from core/nbio/uring/uring.odin rename to core/sys/linux/uring/uring.odin diff --git a/examples/all/all_linux.odin b/examples/all/all_linux.odin index 2b70fa1e1..d7d005ba0 100644 --- a/examples/all/all_linux.odin +++ b/examples/all/all_linux.odin @@ -2,4 +2,5 @@ package all @(require) import "core:sys/linux" -@(require) import "vendor:x11/xlib" \ No newline at end of file +@(require) import "core:sys/linux/uring" +@(require) import "vendor:x11/xlib" From 57d02cb14850e7b241f5ec519ff5e44c6129a5fe Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Wed, 14 Jan 2026 20:02:08 +0100 Subject: [PATCH 119/212] pool: remove assert that is too strict --- core/container/pool/pool.odin | 1 - 1 file changed, 1 deletion(-) diff --git a/core/container/pool/pool.odin b/core/container/pool/pool.odin index 425d6a0fb..01fb29f2d 100644 --- a/core/container/pool/pool.odin +++ b/core/container/pool/pool.odin @@ -44,7 +44,6 @@ destroy :: proc(p: ^Pool($T)) { elem := sync.atomic_exchange_explicit(&p.free_list, nil, .Acquire) sync.atomic_store_explicit(&p.num_ready, 0, .Relaxed) - assert(sync.atomic_load_explicit(&p.num_outstanding, .Relaxed) == 0) when .Address in ODIN_SANITIZER_FLAGS { for ; elem != nil; elem = _get_next(p, elem) { From 0366cd3304b3910a397c4989e46bee4c575adeec Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 15 Jan 2026 16:32:52 +0000 Subject: [PATCH 120/212] Add `#must_tail` (similar syntax to `#force_inline` --- src/check_expr.cpp | 30 +++++++++++++++++++++--- src/llvm_backend.cpp | 12 +++++----- src/llvm_backend.hpp | 3 ++- src/llvm_backend_proc.cpp | 48 ++++++++++++++++++++++++++++++++++----- src/parser.cpp | 23 +++++++++++++++---- src/parser.hpp | 13 ++++++++--- 6 files changed, 105 insertions(+), 24 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index cd2307c6d..3b470cb88 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8210,7 +8210,7 @@ gb_internal void check_objc_call_expr(CheckerContext *c, Operand *operand, Ast * add_objc_proc_type(c, call, return_type, param_types); } -gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *call, Ast *proc, Slice const &args, ProcInlining inlining, Type *type_hint) { +gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *call, Ast *proc, Slice const &args, ProcInlining inlining, ProcTailing tailing, Type *type_hint) { if (proc != nullptr && proc->kind == Ast_BasicDirective) { ast_node(bd, BasicDirective, proc); @@ -8241,7 +8241,10 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c return Expr_Expr; } if (inlining != ProcInlining_none) { - error(call, "Inlining operators are not allowed on built-in procedures"); + error(call, "Inlining directives are not allowed on built-in procedures"); + } + if (tailing != ProcTailing_none) { + error(call, "Tailing directives are not allowed on built-in procedures"); } } else { if (proc != nullptr) { @@ -8383,6 +8386,7 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c } bool is_call_inlined = false; + bool is_call_tailed = true; switch (inlining) { case ProcInlining_inline: @@ -8417,6 +8421,20 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c } } + switch (tailing) { + case ProcTailing_none: + break; + case ProcTailing_must_tail: + is_call_tailed = true; + if (proc != nullptr) { + Entity *e = entity_from_expr(proc); + if (e != nullptr && e->kind == Entity_Procedure) { + // TODO(bill): `preserve_none` + } + } + break; + } + { String invalid; if (pt->kind == Type_Proc && pt->Proc.require_target_feature.len != 0) { @@ -11825,7 +11843,7 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast case_end; case_ast_node(ce, CallExpr, node); - return check_call_expr(c, o, node, ce->proc, ce->args, ce->inlining, type_hint); + return check_call_expr(c, o, node, ce->proc, ce->args, ce->inlining, ce->tailing, type_hint); case_end; case_ast_node(de, DerefExpr, node); @@ -12566,6 +12584,12 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan case_end; case_ast_node(ce, CallExpr, node); + switch (ce->tailing) { + case ProcTailing_must_tail: + str = gb_string_appendc(str, "#must_tail "); + break; + } + switch (ce->inlining) { case ProcInlining_inline: str = gb_string_appendc(str, "#force_inline "); diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 1cde65640..0bf3d1125 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2111,7 +2111,7 @@ gb_internal void lb_create_startup_runtime_generate_body(lbModule *m, lbProcedur for (Entity *e : info->init_procedures) { lbValue value = lb_find_procedure_value_from_entity(m, e); - lb_emit_call(p, value, {}, ProcInlining_none); + lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none); } @@ -2157,7 +2157,7 @@ gb_internal lbProcedure *lb_create_cleanup_runtime(lbModule *main_module) { // C for (Entity *e : info->fini_procedures) { lbValue value = lb_find_procedure_value_from_entity(main_module, e); - lb_emit_call(p, value, {}, ProcInlining_none); + lb_emit_call(p, value, {}, ProcInlining_none, ProcTailing_none); } lb_end_procedure_body(p); @@ -2850,7 +2850,7 @@ gb_internal lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *star } lbValue startup_runtime_value = {startup_runtime->value, startup_runtime->type}; - lb_emit_call(p, startup_runtime_value, {}, ProcInlining_none); + lb_emit_call(p, startup_runtime_value, {}, ProcInlining_none, ProcTailing_none); if (build_context.command_kind == Command_test) { Type *t_Internal_Test = find_type_in_pkg(m->info, str_lit("testing"), str_lit("Internal_Test")); @@ -2917,16 +2917,16 @@ gb_internal lbProcedure *lb_create_main_procedure(lbModule *m, lbProcedure *star auto exit_args = array_make(temporary_allocator(), 1); exit_args[0] = lb_emit_select(p, result, lb_const_int(m, t_int, 0), lb_const_int(m, t_int, 1)); - lb_emit_call(p, exit_runner, exit_args, ProcInlining_none); + lb_emit_call(p, exit_runner, exit_args, ProcInlining_none, ProcTailing_none); } else { if (m->info->entry_point != nullptr) { lbValue entry_point = lb_find_procedure_value_from_entity(m, m->info->entry_point); - lb_emit_call(p, entry_point, {}, ProcInlining_no_inline); + lb_emit_call(p, entry_point, {}, ProcInlining_no_inline, ProcTailing_none); } if (call_cleanup) { lbValue cleanup_runtime_value = {cleanup_runtime->value, cleanup_runtime->type}; - lb_emit_call(p, cleanup_runtime_value, {}, ProcInlining_none); + lb_emit_call(p, cleanup_runtime_value, {}, ProcInlining_none, ProcTailing_none); } if (is_dll_main) { diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index da5d91f2e..9db7e94d9 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -345,6 +345,7 @@ struct lbProcedure { Ast * body; u64 tags; ProcInlining inlining; + ProcTailing tailing; bool is_foreign; bool is_export; bool is_entry_point; @@ -484,7 +485,7 @@ gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlo gb_internal void lb_emit_defer_stmts(lbProcedure *p, lbDeferExitKind kind, lbBlock *block, Ast *node); gb_internal lbValue lb_emit_transmute(lbProcedure *p, lbValue value, Type *t); gb_internal lbValue lb_emit_comp(lbProcedure *p, TokenKind op_kind, lbValue left, lbValue right); -gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array const &args, ProcInlining inlining = ProcInlining_none); +gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array const &args, ProcInlining inlining = ProcInlining_none, ProcTailing tailing = ProcTailing_none); gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t); gb_internal lbValue lb_emit_comp_against_nil(lbProcedure *p, TokenKind op_kind, lbValue x); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 216d600da..0703941c1 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -117,6 +117,7 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i p->type_expr = decl->type_expr; p->body = pl->body; p->inlining = pl->inlining; + p->tailing = pl->tailing; p->is_foreign = entity->Procedure.is_foreign; p->is_export = entity->Procedure.is_export; p->is_entry_point = false; @@ -178,6 +179,12 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i } } + switch (p->tailing) { + case ProcTailing_must_tail: + lb_add_attribute_to_proc(m, p->value, "preserve_none"); + break; + } + switch (entity->Procedure.optimization_mode) { case ProcedureOptimizationMode_None: lb_add_attribute_to_proc(m, p->value, "optnone"); @@ -387,6 +394,7 @@ gb_internal lbProcedure *lb_create_dummy_procedure(lbModule *m, String link_name p->body = nullptr; p->tags = 0; p->inlining = ProcInlining_none; + p->tailing = ProcTailing_none; p->is_foreign = false; p->is_export = false; p->is_entry_point = false; @@ -855,7 +863,7 @@ gb_internal Array lb_value_to_array(lbProcedure *p, gbAllocator const & -gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue return_ptr, Array const &processed_args, Type *abi_rt, lbAddr context_ptr, ProcInlining inlining) { +gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue return_ptr, Array const &processed_args, Type *abi_rt, lbAddr context_ptr, ProcInlining inlining, ProcTailing tailing) { GB_ASSERT(p->module->ctx == LLVMGetTypeContext(LLVMTypeOf(value.value))); unsigned arg_count = cast(unsigned)processed_args.count; @@ -972,6 +980,15 @@ gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue break; } + switch (tailing) { + case ProcTailing_none: + break; + case ProcTailing_must_tail: + LLVMSetTailCall(ret, true); + LLVMSetTailCallKind(ret, LLVMTailCallKindMustTail); + break; + } + lbValue res = {}; res.value = ret; res.type = abi_rt; @@ -1045,7 +1062,7 @@ gb_internal lbValue lb_emit_conjugate(lbProcedure *p, lbValue val, Type *type) { return lb_emit_load(p, res); } -gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array const &args, ProcInlining inlining) { +gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array const &args, ProcInlining inlining, ProcTailing tailing) { lbModule *m = p->module; Type *pt = base_type(value.type); @@ -1168,10 +1185,10 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array c if (return_by_pointer) { lbValue return_ptr = lb_add_local_generated(p, rt, true).addr; - lb_emit_call_internal(p, value, return_ptr, processed_args, nullptr, context_ptr, inlining); + lb_emit_call_internal(p, value, return_ptr, processed_args, nullptr, context_ptr, inlining, tailing); result = lb_emit_load(p, return_ptr); } else if (rt != nullptr) { - result = lb_emit_call_internal(p, value, {}, processed_args, rt, context_ptr, inlining); + result = lb_emit_call_internal(p, value, {}, processed_args, rt, context_ptr, inlining, tailing); if (ft->ret.cast_type) { result.value = OdinLLVMBuildTransmute(p, result.value, ft->ret.cast_type); } @@ -1184,7 +1201,7 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array c result = lb_emit_conv(p, result, rt); } } else { - lb_emit_call_internal(p, value, {}, processed_args, nullptr, context_ptr, inlining); + lb_emit_call_internal(p, value, {}, processed_args, nullptr, context_ptr, inlining, tailing); } if (original_rt != rt) { @@ -4402,6 +4419,25 @@ gb_internal lbValue lb_build_call_expr_internal(lbProcedure *p, Ast *expr) { return lb_handle_objc_auto_send(p, expr, slice(call_args, 0, call_args.count)); } - return lb_emit_call(p, value, call_args, ce->inlining); + + ProcInlining inlining = ce->inlining; + ProcTailing tailing = ce->tailing; + + if (tailing == ProcTailing_none && + proc_entity && proc_entity->kind == Entity_Procedure && + proc_entity->decl_info && + proc_entity->decl_info->proc_lit) { + ast_node(pl, ProcLit, proc_entity->decl_info->proc_lit); + + if (pl->inlining != ProcInlining_none) { + inlining = pl->inlining; + } + + if (pl->tailing != ProcTailing_none) { + tailing = pl->tailing; + } + } + + return lb_emit_call(p, value, call_args, inlining, tailing); } diff --git a/src/parser.cpp b/src/parser.cpp index 823021e04..d8a9df473 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2176,7 +2176,7 @@ gb_internal bool ast_on_same_line(Token const &x, Ast *yp) { return x.pos.line == y.pos.line; } -gb_internal Ast *parse_force_inlining_operand(AstFile *f, Token token) { +gb_internal Ast *parse_inlining_or_tailing_operand(AstFile *f, Token token) { Ast *expr = parse_unary_expr(f, false); Ast *e = strip_or_return_expr(expr); if (e == nullptr) { @@ -2187,11 +2187,14 @@ gb_internal Ast *parse_force_inlining_operand(AstFile *f, Token token) { return ast_bad_expr(f, token, f->curr_token); } ProcInlining pi = ProcInlining_none; + ProcTailing pt = ProcTailing_none; if (token.kind == Token_Ident) { if (token.string == "force_inline") { pi = ProcInlining_inline; } else if (token.string == "force_no_inline") { pi = ProcInlining_no_inline; + } else if (token.string == "must_tail") { + pt = ProcTailing_must_tail; } } @@ -2211,6 +2214,14 @@ gb_internal Ast *parse_force_inlining_operand(AstFile *f, Token token) { } } + if (pt != ProcTailing_none) { + if (e->kind == Ast_ProcLit) { + e->ProcLit.tailing = pt; + } else if (e->kind == Ast_CallExpr) { + e->CallExpr.tailing = pt; + } + } + return expr; } @@ -2507,8 +2518,9 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { syntax_error(tag, "#relative types have now been removed in favour of \"core:relative\""); return ast_relative_type(f, tag, type); } else if (name.string == "force_inline" || - name.string == "force_no_inline") { - return parse_force_inlining_operand(f, name); + name.string == "force_no_inline" || + name.string == "must_tail") { + return parse_inlining_or_tailing_operand(f, name); } return ast_basic_directive(f, token, name); } @@ -5399,8 +5411,9 @@ gb_internal Ast *parse_stmt(AstFile *f) { expect_semicolon(f); return stmt; } else if (name.string == "force_inline" || - name.string == "force_no_inline") { - Ast *expr = parse_force_inlining_operand(f, name); + name.string == "force_no_inline" || + name.string == "must_tail") { + Ast *expr = parse_inlining_or_tailing_operand(f, name); Ast *stmt = ast_expr_stmt(f, expr); expect_semicolon(f); return stmt; diff --git a/src/parser.hpp b/src/parser.hpp index 71b61d95f..30b11c730 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -263,12 +263,17 @@ struct ForeignFileWorkerData { -enum ProcInlining { - ProcInlining_none = 0, - ProcInlining_inline = 1, +enum ProcInlining : u8 { + ProcInlining_none = 0, + ProcInlining_inline = 1, ProcInlining_no_inline = 2, }; +enum ProcTailing : u8 { + ProcTailing_none = 0, + ProcTailing_must_tail = 1, +}; + enum ProcTag { ProcTag_bounds_check = 1<<0, ProcTag_no_bounds_check = 1<<1, @@ -441,6 +446,7 @@ struct AstSplitArgs { Ast *body; \ u64 tags; \ ProcInlining inlining; \ + ProcTailing tailing; \ Token where_token; \ Slice where_clauses; \ DeclInfo *decl; \ @@ -486,6 +492,7 @@ AST_KIND(_ExprBegin, "", bool) \ Token close; \ Token ellipsis; \ ProcInlining inlining; \ + ProcTailing tailing; \ bool optional_ok_one; \ bool was_selector; \ AstSplitArgs *split_args; \ From 5f07055ac1548e6254651f40a23e74093a9bebfe Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 15 Jan 2026 17:28:28 +0000 Subject: [PATCH 121/212] Add `#must_tail` and `"preserve/none"` calling convention --- src/check_expr.cpp | 13 ++++++++----- src/llvm_backend.hpp | 3 +++ src/llvm_backend_proc.cpp | 6 ------ src/parser.cpp | 3 +++ src/parser.hpp | 2 ++ src/types.cpp | 38 +++++--------------------------------- 6 files changed, 21 insertions(+), 44 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 3b470cb88..74ae02f94 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8426,11 +8426,14 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c break; case ProcTailing_must_tail: is_call_tailed = true; - if (proc != nullptr) { - Entity *e = entity_from_expr(proc); - if (e != nullptr && e->kind == Entity_Procedure) { - // TODO(bill): `preserve_none` - } + if (c->curr_proc_sig == nullptr || !are_types_identical(c->curr_proc_sig, pt)) { + ERROR_BLOCK(); + gbString a = type_to_string(pt); + gbString b = type_to_string(c->curr_proc_sig); + error(call, "Use of '#must_tail' of a procedure must have the same type as the procedure it was called within"); + error_line("\tCall type: %s, parent type: %s", a, b); + gb_string_free(b); + gb_string_free(a); } break; } diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 9db7e94d9..884b87998 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -671,6 +671,7 @@ enum lbCallingConventionKind : unsigned { lbCallingConvention_PreserveAll = 15, lbCallingConvention_Swift = 16, lbCallingConvention_CXX_FAST_TLS = 17, + lbCallingConvention_PreserveNone = 21, lbCallingConvention_FirstTargetCC = 64, lbCallingConvention_X86_StdCall = 64, lbCallingConvention_X86_FastCall = 65, @@ -724,6 +725,8 @@ lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = { lbCallingConvention_Win64, // ProcCC_Win64, lbCallingConvention_X86_64_SysV, // ProcCC_SysV, + lbCallingConvention_PreserveNone, // ProcCC_PreserveNone, + }; enum : LLVMDWARFTypeEncoding { diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 0703941c1..9ac51bba3 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -179,12 +179,6 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i } } - switch (p->tailing) { - case ProcTailing_must_tail: - lb_add_attribute_to_proc(m, p->value, "preserve_none"); - break; - } - switch (entity->Procedure.optimization_mode) { case ProcedureOptimizationMode_None: lb_add_attribute_to_proc(m, p->value, "optnone"); diff --git a/src/parser.cpp b/src/parser.cpp index d8a9df473..8782b3a2b 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -2216,6 +2216,7 @@ gb_internal Ast *parse_inlining_or_tailing_operand(AstFile *f, Token token) { if (pt != ProcTailing_none) { if (e->kind == Ast_ProcLit) { + syntax_error(expr, "'#must_call' can only be applied to a procedure call, not the procedure literal"); e->ProcLit.tailing = pt; } else if (e->kind == Ast_CallExpr) { e->CallExpr.tailing = pt; @@ -4020,6 +4021,8 @@ gb_internal ProcCallingConvention string_to_calling_convention(String const &s) if (s == "win64") return ProcCC_Win64; if (s == "sysv") return ProcCC_SysV; + if (s == "preserve/none") return ProcCC_PreserveNone; + if (s == "system") { if (build_context.metrics.os == TargetOs_windows) { return ProcCC_StdCall; diff --git a/src/parser.hpp b/src/parser.hpp index 30b11c730..77d38b291 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -301,6 +301,7 @@ enum ProcCallingConvention : i32 { ProcCC_Win64 = 9, ProcCC_SysV = 10, + ProcCC_PreserveNone = 11, ProcCC_MAX, @@ -320,6 +321,7 @@ gb_global char const *proc_calling_convention_strings[ProcCC_MAX] = { "inlineasm", "win64", "sysv", + "preserve/none", }; gb_internal ProcCallingConvention default_calling_convention(void) { diff --git a/src/types.cpp b/src/types.cpp index 18e3b56ac..911cd4448 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -5210,40 +5210,12 @@ gb_internal gbString write_type_to_string(gbString str, Type *type, bool shortha case Type_Proc: str = gb_string_appendc(str, "proc"); - switch (type->Proc.calling_convention) { - case ProcCC_Odin: - if (default_calling_convention() != ProcCC_Odin) { - str = gb_string_appendc(str, " \"odin\" "); - } - break; - case ProcCC_Contextless: - if (default_calling_convention() != ProcCC_Contextless) { - str = gb_string_appendc(str, " \"contextless\" "); - } - break; - case ProcCC_CDecl: - str = gb_string_appendc(str, " \"c\" "); - break; - case ProcCC_StdCall: - str = gb_string_appendc(str, " \"std\" "); - break; - case ProcCC_FastCall: - str = gb_string_appendc(str, " \"fastcall\" "); - break; - break; - case ProcCC_None: - str = gb_string_appendc(str, " \"none\" "); - break; - case ProcCC_Naked: - str = gb_string_appendc(str, " \"naked\" "); - break; - // case ProcCC_VectorCall: - // str = gb_string_appendc(str, " \"vectorcall\" "); - // break; - // case ProcCC_ClrCall: - // str = gb_string_appendc(str, " \"clrcall\" "); - // break; + if (type->Proc.calling_convention != default_calling_convention()) { + str = gb_string_appendc(str, " \""); + str = gb_string_appendc(str, proc_calling_convention_strings[type->Proc.calling_convention]); + str = gb_string_appendc(str, "\" "); } + str = gb_string_appendc(str, "("); if (type->Proc.params) { str = write_type_to_string(str, type->Proc.params, shorthand, allow_polymorphic); From b3f4807b2d11d9e3f18279dcb51ffc1ec031abbc Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 15 Jan 2026 17:31:42 +0000 Subject: [PATCH 122/212] Add `#must_tail` to odin/parser --- core/odin/ast/ast.odin | 7 +++++++ core/odin/parser/parser.odin | 19 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/core/odin/ast/ast.odin b/core/odin/ast/ast.odin index a8c198476..6755ca4d0 100644 --- a/core/odin/ast/ast.odin +++ b/core/odin/ast/ast.odin @@ -17,6 +17,11 @@ Proc_Inlining :: enum u32 { No_Inline = 2, } +Proc_Tailing :: enum u32 { + None = 0, + Must_Tail = 1, +} + Proc_Calling_Convention_Extra :: enum i32 { Foreign_Block_Default, } @@ -147,6 +152,7 @@ Proc_Lit :: struct { body: ^Stmt, // nil when it represents a foreign procedure tags: Proc_Tags, inlining: Proc_Inlining, + tailing: Proc_Tailing, where_token: tokenizer.Token, where_clauses: []^Expr, } @@ -243,6 +249,7 @@ Matrix_Index_Expr :: struct { Call_Expr :: struct { using node: Expr, inlining: Proc_Inlining, + tailing: Proc_Tailing, expr: ^Expr, open: tokenizer.Pos, args: []^Expr, diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index f4beddcbb..719cb0374 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -1528,8 +1528,8 @@ parse_stmt :: proc(p: ^Parser) -> ^ast.Stmt { es.expr = ce return es - case "force_inline", "force_no_inline": - expr := parse_inlining_operand(p, true, tag) + case "force_inline", "force_no_inline", "must_tail": + expr := parse_inlining_or_tailing_operand(p, true, tag) es := ast.new(ast.Expr_Stmt, expr.pos, expr) es.expr = expr return es @@ -2235,10 +2235,11 @@ parse_proc_type :: proc(p: ^Parser, tok: tokenizer.Token) -> ^ast.Proc_Type { return pt } -parse_inlining_operand :: proc(p: ^Parser, lhs: bool, tok: tokenizer.Token) -> ^ast.Expr { +parse_inlining_or_tailing_operand :: proc(p: ^Parser, lhs: bool, tok: tokenizer.Token) -> ^ast.Expr { expr := parse_unary_expr(p, lhs) pi := ast.Proc_Inlining.None + pt := ast.Proc_Tailing.None #partial switch tok.kind { case .Inline: pi = .Inline @@ -2250,6 +2251,8 @@ parse_inlining_operand :: proc(p: ^Parser, lhs: bool, tok: tokenizer.Token) -> ^ pi = .Inline case "force_no_inline": pi = .No_Inline + case "must_tail": + pt = .Must_Tail } } @@ -2259,13 +2262,19 @@ parse_inlining_operand :: proc(p: ^Parser, lhs: bool, tok: tokenizer.Token) -> ^ if e.inlining != .None && e.inlining != pi { error(p, expr.pos, "both 'inline' and 'no_inline' cannot be applied to a procedure literal") } + if pt != .None { + error(p, expr.pos, "'#must_tail' can only be applied to a procedure call, not the procedure literal") + } + e.inlining = pi + e.tailing = pt return expr case ^ast.Call_Expr: if e.inlining != .None && e.inlining != pi { error(p, expr.pos, "both 'inline' and 'no_inline' cannot be applied to a procedure call") } e.inlining = pi + e.tailing = pt return expr } } @@ -2451,7 +2460,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { return rt case "force_inline", "force_no_inline": - return parse_inlining_operand(p, lhs, name) + return parse_inlining_or_tailing_operand(p, lhs, name) case: expr := parse_expr(p, lhs) end := expr.pos if expr != nil else end_pos(tok) @@ -2464,7 +2473,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { case .Inline, .No_Inline: tok := advance_token(p) - return parse_inlining_operand(p, lhs, tok) + return parse_inlining_or_tailing_operand(p, lhs, tok) case .Proc: tok := expect_token(p, .Proc) From 59ae82634ed69b019a8965d1120dd8c7c5a7a605 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 15 Jan 2026 17:52:36 +0000 Subject: [PATCH 123/212] Add `preserve/most` and `preserve/all` --- src/llvm_backend.hpp | 2 ++ src/parser.cpp | 2 ++ src/parser.hpp | 4 ++++ 3 files changed, 8 insertions(+) diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index 884b87998..e10471527 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -726,6 +726,8 @@ lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = { lbCallingConvention_X86_64_SysV, // ProcCC_SysV, lbCallingConvention_PreserveNone, // ProcCC_PreserveNone, + lbCallingConvention_PreserveMost, // ProcCC_PreserveMost, + lbCallingConvention_PreserveAll, // ProcCC_PreserveAll, }; diff --git a/src/parser.cpp b/src/parser.cpp index 8782b3a2b..fc55dae97 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -4022,6 +4022,8 @@ gb_internal ProcCallingConvention string_to_calling_convention(String const &s) if (s == "sysv") return ProcCC_SysV; if (s == "preserve/none") return ProcCC_PreserveNone; + if (s == "preserve/most") return ProcCC_PreserveMost; + if (s == "preserve/all") return ProcCC_PreserveAll; if (s == "system") { if (build_context.metrics.os == TargetOs_windows) { diff --git a/src/parser.hpp b/src/parser.hpp index 77d38b291..011330438 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -302,6 +302,8 @@ enum ProcCallingConvention : i32 { ProcCC_SysV = 10, ProcCC_PreserveNone = 11, + ProcCC_PreserveMost = 12, + ProcCC_PreserveAll = 13, ProcCC_MAX, @@ -322,6 +324,8 @@ gb_global char const *proc_calling_convention_strings[ProcCC_MAX] = { "win64", "sysv", "preserve/none", + "preserve/most", + "preserve/all", }; gb_internal ProcCallingConvention default_calling_convention(void) { From f4a7e0b279043357a550c26f1972835f9f5688a1 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 15 Jan 2026 18:06:25 +0000 Subject: [PATCH 124/212] Add `@(no_sanitize_thread)` --- src/check_decl.cpp | 1 + src/checker.cpp | 6 ++++++ src/checker.hpp | 1 + src/entity.cpp | 1 + src/llvm_backend_proc.cpp | 2 +- 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 27babd255..8019d00c3 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1473,6 +1473,7 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { e->Procedure.no_sanitize_address = ac.no_sanitize_address; e->Procedure.no_sanitize_memory = ac.no_sanitize_memory; + e->Procedure.no_sanitize_thread = ac.no_sanitize_thread; e->deprecated_message = ac.deprecated_message; e->warning_message = ac.warning_message; diff --git a/src/checker.cpp b/src/checker.cpp index ab3ba50dd..453f3e241 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -3990,6 +3990,12 @@ gb_internal DECL_ATTRIBUTE_PROC(proc_decl_attribute) { } ac->no_sanitize_memory = true; return true; + } else if (name == "no_sanitize_thread") { + if (value != nullptr) { + error(value, "'%.*s' expects no parameter", LIT(name)); + } + ac->no_sanitize_thread = true; + return true; } return false; } diff --git a/src/checker.hpp b/src/checker.hpp index bda7b2746..f9c279a51 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -141,6 +141,7 @@ struct AttributeContext { bool instrumentation_exit : 1; bool no_sanitize_address : 1; bool no_sanitize_memory : 1; + bool no_sanitize_thread : 1; bool rodata : 1; bool ignore_duplicates : 1; u32 optimization_mode; // ProcedureOptimizationMode diff --git a/src/entity.cpp b/src/entity.cpp index 2b21fdcac..55aca8069 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -268,6 +268,7 @@ struct Entity { bool is_anonymous : 1; bool no_sanitize_address : 1; bool no_sanitize_memory : 1; + bool no_sanitize_thread : 1; bool is_objc_impl_or_import : 1; bool is_objc_class_method : 1; } Procedure; diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 9ac51bba3..524c37186 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -347,7 +347,7 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i if (build_context.sanitizer_flags & SanitizerFlag_Memory && !entity->Procedure.no_sanitize_memory) { lb_add_attribute_to_proc(m, p->value, "sanitize_memory"); } - if (build_context.sanitizer_flags & SanitizerFlag_Thread) { + if (build_context.sanitizer_flags & SanitizerFlag_Thread && !entity->Procedure.no_sanitize_thread) { lb_add_attribute_to_proc(m, p->value, "sanitize_thread"); } } From 557e854864e13f5da23533547b443ffde471cfc9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 15 Jan 2026 18:12:39 +0000 Subject: [PATCH 125/212] `-disable-unwind` --- src/build_settings.cpp | 1 + src/llvm_backend_proc.cpp | 4 ++++ src/main.cpp | 8 ++++++++ 3 files changed, 13 insertions(+) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 7160f3721..31a07aa69 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -582,6 +582,7 @@ struct BuildContext { RelocMode reloc_mode; bool disable_red_zone; + bool disable_unwind; isize max_error_count; diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 524c37186..640a43111 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -153,6 +153,10 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i lb_ensure_abi_function_type(m, p); lb_add_function_type_attributes(p->value, p->abi_function_type, p->abi_function_type->calling_convention); + if (build_context.disable_unwind) { + lb_add_attribute_to_proc(m, p->value, "nounwind"); + } + if (pt->Proc.diverging) { lb_add_attribute_to_proc(m, p->value, "noreturn"); } diff --git a/src/main.cpp b/src/main.cpp index 326c4c457..753f58986 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -363,6 +363,8 @@ enum BuildFlagKind { BuildFlag_RelocMode, BuildFlag_DisableRedZone, + BuildFlag_DisableUnwind, + BuildFlag_DisallowDo, BuildFlag_DefaultToNilAllocator, BuildFlag_DefaultToPanicAllocator, @@ -592,6 +594,8 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_RelocMode, str_lit("reloc-mode"), BuildFlagParam_String, Command__does_build); add_flag(&build_flags, BuildFlag_DisableRedZone, str_lit("disable-red-zone"), BuildFlagParam_None, Command__does_build); + add_flag(&build_flags, BuildFlag_DisableUnwind, str_lit("disable-unwind"), BuildFlagParam_None, Command__does_build); + add_flag(&build_flags, BuildFlag_DisallowDo, str_lit("disallow-do"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_DefaultToNilAllocator, str_lit("default-to-nil-allocator"), BuildFlagParam_None, Command__does_check); add_flag(&build_flags, BuildFlag_DefaultToPanicAllocator, str_lit("default-to-panic-allocator"),BuildFlagParam_None, Command__does_check); @@ -1424,6 +1428,10 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_DisableRedZone: build_context.disable_red_zone = true; break; + case BuildFlag_DisableUnwind: + build_context.disable_unwind = true; + break; + case BuildFlag_DisallowDo: build_context.disallow_do = true; break; From 71c4da8e344e406f02faf1bfc76148bbdfc474a8 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 16 Jan 2026 09:19:01 +0000 Subject: [PATCH 126/212] Fix typo in strings.equal_fold --- core/strings/strings.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/strings/strings.odin b/core/strings/strings.odin index beaa8bda1..bad0ac26a 100644 --- a/core/strings/strings.odin +++ b/core/strings/strings.odin @@ -438,7 +438,7 @@ equal_fold :: proc(u, v: string) -> (res: bool) { r := unicode.simple_fold(sr) for r != sr && r < tr { - r = unicode.simple_fold(sr) + r = unicode.simple_fold(r) } if r == tr { continue loop From f4aa64e934f6ddd73a91fdeb6fec492811f09207 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 16 Jan 2026 17:47:40 +0000 Subject: [PATCH 127/212] Add `html.escape_string` --- core/html/escape.odin | 59 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 core/html/escape.odin diff --git a/core/html/escape.odin b/core/html/escape.odin new file mode 100644 index 000000000..dfdcc6f92 --- /dev/null +++ b/core/html/escape.odin @@ -0,0 +1,59 @@ +package html + +// escape_string escapes special characters like '&' to become '&'. +// It escapes only 5 different characters: & ' < > and ". +@(require_results) +escape_string :: proc(s: string, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool) { + /* + & -> & + ' -> ' // ' is shorter than ' (NOTE: ' was not available until HTML 5) + < -> < + > -> > + " -> " // " is shorter than " + */ + + b := transmute([]byte)s + + extra_bytes_needed := 0 + + for c in b { + switch c { + case '&': extra_bytes_needed += 4 + case '\'': extra_bytes_needed += 4 + case '<': extra_bytes_needed += 3 + case '>': extra_bytes_needed += 3 + case '"': extra_bytes_needed += 4 + } + } + + if extra_bytes_needed == 0 { + return s, false + } + + t, err := make([]byte, len(s) + extra_bytes_needed, allocator, loc) + if err != nil { + return + } + was_allocation = true + + w := 0 + for c in b { + s := "" + switch c { + case '&': s = "&" + case '\'': s = "'" + case '<': s = "<" + case '>': s = ">" + case '"': s = """ + } + if s != "" { + copy(t[w:], s) + w += len(s) + } else { + t[w] = c + w += 1 + } + } + output = string(t[0:w]) + return +} \ No newline at end of file From 59d08f3a5705c8db2fc99291af6079f0c7a30819 Mon Sep 17 00:00:00 2001 From: magicalhack Date: Sat, 17 Jan 2026 13:14:28 -0500 Subject: [PATCH 128/212] Minor x11/xlib bindings fixes - Fix Xutf8LookupString signature (^cstring -> cstring) - Fix type of KeySym (u32 -> uint) --- vendor/x11/xlib/xlib_keysym.odin | 2 +- vendor/x11/xlib/xlib_procs.odin | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vendor/x11/xlib/xlib_keysym.odin b/vendor/x11/xlib/xlib_keysym.odin index 61284c723..267b77b1c 100644 --- a/vendor/x11/xlib/xlib_keysym.odin +++ b/vendor/x11/xlib/xlib_keysym.odin @@ -1,7 +1,7 @@ #+build linux, freebsd, openbsd package xlib -KeySym :: enum u32 { +KeySym :: enum uint { XK_BackSpace = 0xff08, /* Back space, back char */ XK_Tab = 0xff09, XK_Linefeed = 0xff0a, /* Linefeed, LF */ diff --git a/vendor/x11/xlib/xlib_procs.odin b/vendor/x11/xlib/xlib_procs.odin index c33c6d351..2409ad000 100644 --- a/vendor/x11/xlib/xlib_procs.odin +++ b/vendor/x11/xlib/xlib_procs.odin @@ -2068,7 +2068,7 @@ foreign xlib { Xutf8LookupString :: proc( ic: XIC, event: ^XKeyPressedEvent, - buffer_return: ^cstring, + buffer_return: cstring, bytes_buffer: i32, keysym_return: ^KeySym, status_return: ^LookupStringStatus, From 44aabdbcda09555be754d20992e1f8dde919071d Mon Sep 17 00:00:00 2001 From: laytan Date: Sat, 17 Jan 2026 19:22:09 +0100 Subject: [PATCH 129/212] nbio(windows): explicitly set entries_removed = 0 when GetQueuedCompletionStatusEx returns false --- core/nbio/impl_windows.odin | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index 4610d4754..2ff391a23 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -183,8 +183,12 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { events: [QUEUE_SIZE]win.OVERLAPPED_ENTRY entries_removed: win.ULONG if !win.GetQueuedCompletionStatusEx(l.iocp, &events[0], len(events), &entries_removed, actual_timeout, false) { - if terr := win.GetLastError(); terr != win.WAIT_TIMEOUT { - err = General_Error(terr) + winerr := win.GetLastError() + switch winerr { + case win.WAIT_TIMEOUT: + entries_removed = 0 + case: + err = General_Error(winerr) return } } From e4bd92763aec78550129cc139c5d1fa8987e5f63 Mon Sep 17 00:00:00 2001 From: laytan Date: Sat, 17 Jan 2026 20:55:09 +0100 Subject: [PATCH 130/212] nbio(windows): fix "recursive" timeouts not being taken into consideration for blocking --- core/nbio/impl_windows.odin | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index 2ff391a23..e7987671d 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -249,11 +249,20 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { continue } - expires = cexpires - debug("first timeout in the future is at", op.timeout._impl.expires, "after", cexpires) - return + break } + // Don't merge this with the previous iteration because the `handle_completed` in that one might queue + // more timeouts which we want to detect here. + // For example: `timeout(time.Second, proc(_: ^Operation) { timeout(time.Second, ...) })` + + first := avl.first(&l.timeouts) + if first != nil { + op := first.value + cexpires := time.diff(curr, op.timeout._impl.expires) + debug("first timeout in the future is at", op.timeout._impl.expires, "after", cexpires) + expires = cexpires + } return } From 3a3ed48fae8c7d38f7af1fce39343b2302fd5639 Mon Sep 17 00:00:00 2001 From: laytan Date: Sat, 17 Jan 2026 21:03:25 +0100 Subject: [PATCH 131/212] nbio: mpsc queue for execs on another thread --- core/nbio/impl.odin | 21 +++++++------ core/nbio/impl_linux.odin | 5 +++ core/nbio/impl_others.odin | 3 ++ core/nbio/impl_posix.odin | 5 +++ core/nbio/impl_windows.odin | 20 +++++++----- core/nbio/mpsc.odin | 63 +++++++++++++++++++++++++++++++++++++ core/nbio/nbio.odin | 19 +++++------ 7 files changed, 108 insertions(+), 28 deletions(-) create mode 100644 core/nbio/mpsc.odin diff --git a/core/nbio/impl.odin b/core/nbio/impl.odin index 3f5191c5e..476b8ab43 100644 --- a/core/nbio/impl.odin +++ b/core/nbio/impl.odin @@ -5,10 +5,8 @@ import "base:runtime" import "base:intrinsics" import "core:container/pool" -import "core:container/queue" import "core:net" import "core:strings" -import "core:sync" import "core:time" import "core:reflect" @@ -35,7 +33,13 @@ _acquire_thread_event_loop :: proc() -> General_Error { allocator := runtime.heap_allocator() } - l.queue.data.allocator = allocator + l.allocator = allocator + + if alloc_err := mpsc_init(&l.queue, 128, l.allocator); alloc_err != nil { + l.err = .Allocation_Failed + return l.err + } + defer if l.err != nil { mpsc_destroy(&l.queue, l.allocator) } if pool_err := pool.init(&l.operation_pool, "_pool_link"); pool_err != nil { l.err = .Allocation_Failed @@ -65,7 +69,7 @@ _release_thread_event_loop :: proc() { if l.refs > 0 { l.refs -= 1 if l.refs == 0 { - queue.destroy(&l.queue) + mpsc_destroy(&l.queue, l.allocator) pool.destroy(&l.operation_pool) _destroy(l) l^ = {} @@ -85,11 +89,10 @@ _current_thread_event_loop :: #force_inline proc(loc := #caller_location) -> (^E _tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { // Receive operations queued from other threads first. - { - sync.guard(&l.queue_mu) - for op in queue.pop_front_safe(&l.queue) { - _exec(op) - } + for { + op := (^Operation)(mpsc_dequeue(&l.queue)) + if op == nil { break } + _exec(op) } return __tick(l, timeout) diff --git a/core/nbio/impl_linux.odin b/core/nbio/impl_linux.odin index cdcbeedc1..552133e67 100644 --- a/core/nbio/impl_linux.odin +++ b/core/nbio/impl_linux.odin @@ -472,6 +472,11 @@ _wake_up :: proc(l: ^Event_Loop) { assert(n == 8) } +@(private="package") +_yield :: proc() { + linux.sched_yield() +} + // Start file private. // The size of the IO Uring queues. diff --git a/core/nbio/impl_others.odin b/core/nbio/impl_others.odin index cac1f0c63..1c1e7674e 100644 --- a/core/nbio/impl_others.odin +++ b/core/nbio/impl_others.odin @@ -215,3 +215,6 @@ _associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Err _wake_up :: proc(l: ^Event_Loop) { } + +_yield :: proc() { +} diff --git a/core/nbio/impl_posix.odin b/core/nbio/impl_posix.odin index e003f6ea3..ed65a05b0 100644 --- a/core/nbio/impl_posix.odin +++ b/core/nbio/impl_posix.odin @@ -526,6 +526,11 @@ _wake_up :: proc(l: ^Event_Loop) { assert(n == 0) } +@(private="package") +_yield :: proc() { + posix.sched_yield() +} + // Start file private. // Max operations that can be enqueued per tick. diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index e7987671d..fbbe2c2ce 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -107,17 +107,15 @@ _Stat :: struct {} _init :: proc(l: ^Event_Loop, alloc: mem.Allocator) -> (err: General_Error) { l.allocator = alloc - mem_err: mem.Allocator_Error - if mem_err = queue.init(&l.completed, allocator = alloc); mem_err != nil { - err = .Allocation_Failed - return - } - defer if err != nil { queue.destroy(&l.completed) } + l.completed.data.allocator = l.allocator avl.init(&l.timeouts, timeouts_cmp, alloc) win.ensure_winsock_initialized() + mpsc_init(&l.completed_oob, QUEUE_SIZE, l.allocator) + defer if err != nil { mpsc_destroy(&l.completed_oob, l.allocator) } + l.iocp = win.CreateIoCompletionPort(win.INVALID_HANDLE_VALUE, nil, 0, 1) if l.iocp == nil { err = General_Error(win.GetLastError()) @@ -145,8 +143,9 @@ _init :: proc(l: ^Event_Loop, alloc: mem.Allocator) -> (err: General_Error) { @(private="package") _destroy :: proc(l: ^Event_Loop) { - queue.destroy(&l.completed) avl.destroy(&l.timeouts) + queue.destroy(&l.completed) + mpsc_destroy(&l.completed_oob, l.allocator) win.CloseHandle(l.iocp) } @@ -754,8 +753,15 @@ _wake_up :: proc(l: ^Event_Loop) { ) } +@(private="package") +_yield :: proc() { + win.SwitchToThread() +} + // Start file private. +QUEUE_SIZE :: 128 + REMOVED :: rawptr(max(uintptr)-1) INVALID_HANDLE :: Handle(win.INVALID_HANDLE) diff --git a/core/nbio/mpsc.odin b/core/nbio/mpsc.odin new file mode 100644 index 000000000..7f88829b4 --- /dev/null +++ b/core/nbio/mpsc.odin @@ -0,0 +1,63 @@ +#+private +package nbio + +import "base:runtime" + +import "core:sync" + +Multi_Producer_Single_Consumer :: struct { + count: int, + head: int, + tail: int, + buffer: []rawptr, + mask: int, +} + +mpsc_init :: proc(mpscq: ^Multi_Producer_Single_Consumer, cap: int, allocator: runtime.Allocator) -> runtime.Allocator_Error { + assert(runtime.is_power_of_two_int(cap), "cap must be a power of 2") + mpscq.buffer = make([]rawptr, cap, allocator) or_return + mpscq.mask = cap-1 + sync.atomic_thread_fence(.Release) + return nil +} + +mpsc_destroy :: proc(mpscq: ^Multi_Producer_Single_Consumer, allocator: runtime.Allocator) { + delete(mpscq.buffer, allocator) +} + +mpsc_enqueue :: proc(mpscq: ^Multi_Producer_Single_Consumer, obj: rawptr) -> bool { + count := sync.atomic_add_explicit(&mpscq.count, 1, .Acquire) + if count >= len(mpscq.buffer) { + sync.atomic_sub_explicit(&mpscq.count, 1, .Release) + return false + } + + head := sync.atomic_add_explicit(&mpscq.head, 1, .Acquire) + assert(mpscq.buffer[head & mpscq.mask] == nil) + rv := sync.atomic_exchange_explicit(&mpscq.buffer[head & mpscq.mask], obj, .Release) + assert(rv == nil) + return true +} + +mpsc_dequeue :: proc(mpscq: ^Multi_Producer_Single_Consumer) -> rawptr { + ret := sync.atomic_exchange_explicit(&mpscq.buffer[mpscq.tail], nil, .Acquire) + if ret == nil { + return nil + } + + mpscq.tail += 1 + if mpscq.tail >= len(mpscq.buffer) { + mpscq.tail = 0 + } + r := sync.atomic_sub_explicit(&mpscq.count, 1, .Release) + assert(r > 0) + return ret +} + +mpsc_count :: proc(mpscq: ^Multi_Producer_Single_Consumer) -> int { + return sync.atomic_load_explicit(&mpscq.count, .Relaxed) +} + +mpsc_cap :: proc(mpscq: ^Multi_Producer_Single_Consumer) -> int { + return len(mpscq.buffer) +} \ No newline at end of file diff --git a/core/nbio/nbio.odin b/core/nbio/nbio.odin index 274cc5291..703a2b4d7 100644 --- a/core/nbio/nbio.odin +++ b/core/nbio/nbio.odin @@ -1,11 +1,10 @@ package nbio import "base:intrinsics" +import "base:runtime" import "core:container/pool" -import "core:container/queue" import "core:net" -import "core:sync" import "core:time" /* @@ -23,14 +22,13 @@ Do not copy. */ Event_Loop :: struct /* #no_copy */ { using impl: _Event_Loop, + allocator: runtime.Allocator, err: General_Error, refs: int, now: time.Time, // Queue that is used to queue operations from another thread to be executed on this thread. - // TODO: Better data-structure. - queue: queue.Queue(^Operation), - queue_mu: sync.Mutex, + queue: Multi_Producer_Single_Consumer, operation_pool: pool.Pool(Operation), } @@ -408,13 +406,10 @@ exec :: proc(op: ^Operation, trigger_wake_up := true) { if op.l == &_tls_event_loop { _exec(op) } else { - { - // TODO: Better data-structure. - sync.guard(&op.l.queue_mu) - _, err := queue.push_back(&op.l.queue, op) - if err != nil { - panic("exec: queueing operation failed due to memory allocation failure") - } + for !mpsc_enqueue(&op.l.queue, op) { + warn("operation queue on event loop filled up") + wake_up(op.l) + _yield() } if trigger_wake_up { wake_up(op.l) From 2caee687ed76b5ae883444bab67c0c1a157f25df Mon Sep 17 00:00:00 2001 From: laytan Date: Sat, 17 Jan 2026 21:06:13 +0100 Subject: [PATCH 132/212] nbio(windows): use one IOCP for all event loops --- core/nbio/impl_posix.odin | 1 + core/nbio/impl_windows.odin | 236 ++++++++++++++++++++++----------- core/sys/windows/kernel32.odin | 4 + core/sys/windows/types.odin | 2 + 4 files changed, 169 insertions(+), 74 deletions(-) diff --git a/core/nbio/impl_posix.odin b/core/nbio/impl_posix.odin index ed65a05b0..19a61c256 100644 --- a/core/nbio/impl_posix.odin +++ b/core/nbio/impl_posix.odin @@ -510,6 +510,7 @@ _associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Err @(private="package") _wake_up :: proc(l: ^Event_Loop) { + // TODO: only if we are sleeping (like Windows). ev := [1]kq.KEvent{ { ident = IDENT_WAKE_UP, diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index fbbe2c2ce..af4518cb7 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -8,10 +8,11 @@ import "core:container/pool" import "core:container/queue" import "core:mem" import "core:net" +import "core:path/filepath" import "core:slice" import "core:strings" +import "core:sync" import "core:time" -import "core:path/filepath" import win "core:sys/windows" @@ -20,10 +21,15 @@ _FULLY_SUPPORTED :: true @(private="package") _Event_Loop :: struct { - iocp: win.HANDLE, - allocator: mem.Allocator, - timeouts: avl.Tree(^Operation), - completed: queue.Queue(^Operation), + timeouts: avl.Tree(^Operation), + thread: win.HANDLE, + completed: queue.Queue(^Operation), + completed_oob: Multi_Producer_Single_Consumer, + state: enum { + Working, + Waking, + Sleeping, + }, } @(private="package") @@ -111,34 +117,19 @@ _init :: proc(l: ^Event_Loop, alloc: mem.Allocator) -> (err: General_Error) { avl.init(&l.timeouts, timeouts_cmp, alloc) - win.ensure_winsock_initialized() - mpsc_init(&l.completed_oob, QUEUE_SIZE, l.allocator) defer if err != nil { mpsc_destroy(&l.completed_oob, l.allocator) } - l.iocp = win.CreateIoCompletionPort(win.INVALID_HANDLE_VALUE, nil, 0, 1) - if l.iocp == nil { - err = General_Error(win.GetLastError()) - return - } + dup_ok := win.DuplicateHandle( + win.GetCurrentProcess(), win.GetCurrentThread(), + win.GetCurrentProcess(), &l.thread, + 0, false, win.DUPLICATE_SAME_ACCESS, + ) + ensure(dup_ok == true) + defer if err != nil { win.CloseHandle(l.thread) } + err = g_ref() return - - timeouts_cmp :: #force_inline proc(a, b: ^Operation) -> slice.Ordering { - switch { - case a.timeout._impl.expires._nsec < b.timeout._impl.expires._nsec: - return .Less - case a.timeout._impl.expires._nsec > b.timeout._impl.expires._nsec: - return .Greater - case uintptr(a) < uintptr(b): - return .Less - case uintptr(a) > uintptr(b): - return .Greater - case: - assert(a == b) - return .Equal - } - } } @(private="package") @@ -146,7 +137,8 @@ _destroy :: proc(l: ^Event_Loop) { avl.destroy(&l.timeouts) queue.destroy(&l.completed) mpsc_destroy(&l.completed_oob, l.allocator) - win.CloseHandle(l.iocp) + win.CloseHandle(l.thread) + g_unref() } @(private="package") @@ -165,10 +157,16 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { } } + for { + op := (^Operation)(mpsc_dequeue(&l.completed_oob)) + if op == nil { break } + handle_completed(op) + } + if pool.num_outstanding(&l.operation_pool) == 0 { return nil } actual_timeout := win.INFINITE - if queue.len(l.completed) > 0 { + if queue.len(l.completed) > 0 || mpsc_count(&l.completed_oob) > 0 { actual_timeout = 0 } else if timeout >= 0 { actual_timeout = win.DWORD(timeout / time.Millisecond) @@ -177,14 +175,33 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { actual_timeout = min(actual_timeout, win.DWORD(nt / time.Millisecond)) } + if actual_timeout > 0 { + sync.atomic_store_explicit(&l.state, .Sleeping, .Release) + + // There could be a race condition where we go sleeping at the same time as things get queued + // and a wakeup isn't done because the state is not .Sleeping yet. + // So after sleeping we first check our queues. + + for { + op := (^Operation)(mpsc_dequeue(&l.queue)) + if op == nil { break } + _exec(op) + } + + for { + op := (^Operation)(mpsc_dequeue(&l.completed_oob)) + if op == nil { break } + handle_completed(op) + } + } + for { - QUEUE_SIZE :: 256 - events: [QUEUE_SIZE]win.OVERLAPPED_ENTRY + events: [256]win.OVERLAPPED_ENTRY entries_removed: win.ULONG - if !win.GetQueuedCompletionStatusEx(l.iocp, &events[0], len(events), &entries_removed, actual_timeout, false) { + if !win.GetQueuedCompletionStatusEx(g.iocp, &events[0], len(events), &entries_removed, actual_timeout, true) { winerr := win.GetLastError() switch winerr { - case win.WAIT_TIMEOUT: + case win.WAIT_TIMEOUT, win.WAIT_IO_COMPLETION: entries_removed = 0 case: err = General_Error(winerr) @@ -192,6 +209,8 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { } } + sync.atomic_store_explicit(&l.state, .Working, .Relaxed) + if actual_timeout > 0 { // We may have just waited some time, lets update the current time. l.now = time.now() @@ -202,13 +221,23 @@ __tick :: proc(l: ^Event_Loop, timeout: time.Duration) -> (err: General_Error) { } for event in events[:entries_removed] { - if event.lpCompletionKey == COMPLETION_KEY_WAKE_UP { continue } assert(event.lpOverlapped != nil) op := container_of(container_of(event.lpOverlapped, _Operation, "over"), Operation, "_impl") - handle_completed(op) + + if op.l == l { + handle_completed(op) + } else { + op_l := op.l + for !mpsc_enqueue(&op.l.completed_oob, op) { + warn("oob queue filled up, QUEUE_SIZE may need increasing") + _wake_up(op_l) + win.SwitchToThread() + } + _wake_up(op_l) + } } - if entries_removed < QUEUE_SIZE { + if entries_removed < len(events) { break } @@ -657,7 +686,7 @@ _remove :: proc(target: ^Operation) { target.poll._impl.wait_handle = nil ok := win.PostQueuedCompletionStatus( - target.l.iocp, + g.iocp, 0, 0, &target._impl.over, @@ -710,8 +739,8 @@ _remove :: proc(target: ^Operation) { @(private="package") _associate_handle :: proc(handle: uintptr, l: ^Event_Loop) -> (Handle, Association_Error) { - handle_iocp := win.CreateIoCompletionPort(win.HANDLE(handle), l.iocp, 0, 0) - if handle_iocp != l.iocp { + handle_iocp := win.CreateIoCompletionPort(win.HANDLE(handle), g.iocp, 0, 0) + if handle_iocp != g.iocp { return INVALID_HANDLE, .Not_Possible_To_Associate } @@ -745,12 +774,10 @@ _associate_socket :: proc(socket: Any_Socket, l: ^Event_Loop) -> Association_Err @(private="package") _wake_up :: proc(l: ^Event_Loop) { - win.PostQueuedCompletionStatus( - l.iocp, - 0, - COMPLETION_KEY_WAKE_UP, - nil, - ) + _, exchanged := sync.atomic_compare_exchange_strong(&l.state, .Sleeping, .Waking) + if exchanged { + win.QueueUserAPC(proc "system" (Parameter: win.ULONG_PTR) {}, l.thread, 0) + } } @(private="package") @@ -766,13 +793,50 @@ REMOVED :: rawptr(max(uintptr)-1) INVALID_HANDLE :: Handle(win.INVALID_HANDLE) -COMPLETION_KEY_WAKE_UP :: 69 - Op_Result :: enum { Done, Pending, } +/* +IOCP is designed to be used from multiple threads. +For best performance we need to adhere to that and have one single IOCP for the event loops to share. +*/ +g: struct{ + mu: sync.Mutex, + refs: int, + iocp: win.HANDLE, + err: General_Error, +} + +g_ref :: proc() -> General_Error { + sync.guard(&g.mu) + + if g.refs == 0 { + win.ensure_winsock_initialized() + + // NOTE: setting NumberOfConcurrentThreads to 0 which makes Windows use the amount of processors as a default. + // We may want to make this configurable somehow? + g.iocp = win.CreateIoCompletionPort(win.INVALID_HANDLE_VALUE, nil, 0, 0) + if g.iocp == nil { + g.err = General_Error(win.GetLastError()) + } + } + + sync.atomic_add(&g.refs, 1) + + return sync.atomic_load(&g.err) +} + +g_unref :: proc() { + sync.guard(&g.mu) + + if sync.atomic_sub(&g.refs, 1) == 1 { + win.CloseHandle(g.iocp) + g.err = nil + } +} + operation_handle :: proc(op: ^Operation) -> win.HANDLE { switch op.type { case .Accept: return win.HANDLE(uintptr(op.accept.socket)) @@ -860,11 +924,11 @@ accept_exec :: proc(op: ^Operation) -> Op_Result { &received, &op._impl.over, ) { - if op._impl.over.Internal == nil { - op.accept.err = net._accept_error() - } else if is_pending(op._impl.over) { + if is_pending(op._impl.over) || (op._impl.over.Internal == nil && is_incomplete(win.System_Error(win.GetLastError()))) { link_timeout(op, op.accept.expires) return .Pending + } else if op._impl.over.Internal == nil { + op.accept.err = net._accept_error() } } @@ -962,14 +1026,12 @@ dial_exec :: proc(op: ^Operation) -> (result: Op_Result) { &transferred, &op._impl.over, ) { - if op._impl.over.Internal == nil { - op.dial.err = net._dial_error() - } else if is_pending(op._impl.over) { + if is_pending(op._impl.over) || (op._impl.over.Internal == nil && is_incomplete(win.System_Error(win.GetLastError()))) { link_timeout(op, op.dial.expires) return .Pending + } else if op._impl.over.Internal == nil { + op.dial.err = net._dial_error() } - - return .Done } return .Done @@ -1019,11 +1081,16 @@ read_exec :: proc(op: ^Operation) -> Op_Result { &op._impl.over, ) { assert(read == 0) - if op._impl.over.Internal == nil { - op.read.err = FS_Error(win.GetLastError()) - } else if is_pending(op._impl.over) { + if is_pending(op._impl.over) { link_timeout(op, op.read.expires) return .Pending + } else if op._impl.over.Internal == nil { + err := win.GetLastError() + if is_incomplete(win.System_Error(err)) { + link_timeout(op, op.read.expires) + return .Pending + } + op.read.err = FS_Error(err) } } @@ -1088,11 +1155,16 @@ write_exec :: proc(op: ^Operation) -> Op_Result { &op._impl.over, ) { assert(written == 0) - if op._impl.over.Internal == nil { - op.write.err = FS_Error(win.GetLastError()) - } else if is_pending(op._impl.over) { + if is_pending(op._impl.over) { link_timeout(op, op.write.expires) return .Pending + } else if op._impl.over.Internal == nil { + err := win.GetLastError() + if is_incomplete(win.System_Error(err)) { + link_timeout(op, op.write.expires) + return .Pending + } + op.write.err = FS_Error(err) } } @@ -1180,14 +1252,14 @@ recv_exec :: proc(op: ^Operation) -> Op_Result { } if status == win.SOCKET_ERROR { - if op._impl.over.Internal == nil { + if is_pending(op._impl.over) || (op._impl.over.Internal == nil && is_incomplete(win.System_Error(win.GetLastError()))) { + link_timeout(op, op.recv.expires) + return .Pending + } else if op._impl.over.Internal == nil { switch _ in op.recv.socket { case TCP_Socket: op.recv.err = net._tcp_recv_error() case UDP_Socket: op.recv.err = net._udp_recv_error() } - } else if is_pending(op._impl.over) { - link_timeout(op, op.recv.expires) - return .Pending } } @@ -1301,14 +1373,14 @@ send_exec :: proc(op: ^Operation) -> Op_Result { } if status == win.SOCKET_ERROR { - if op._impl.over.Internal == nil { + if is_pending(op._impl.over) || (op._impl.over.Internal == nil && is_incomplete(win.System_Error(win.GetLastError()))) { + link_timeout(op, op.send.expires) + return .Pending + } else if op._impl.over.Internal == nil { switch _ in op.send.socket { case TCP_Socket: op.send.err = net._tcp_send_error() case UDP_Socket: op.send.err = net._udp_send_error() } - } else if is_pending(op._impl.over) { - link_timeout(op, op.send.expires) - return .Pending } } @@ -1394,11 +1466,11 @@ sendfile_exec :: proc(op: ^Operation) -> Op_Result { nil, 0, ) { - if op._impl.over.Internal == nil { - op.sendfile.err = net._tcp_send_error() - } else if is_pending(op._impl.over) { + if is_pending(op._impl.over) || (op._impl.over.Internal == nil && is_incomplete(win.System_Error(win.GetLastError()))) { link_timeout(op, op.sendfile.expires) return .Pending + } else if op._impl.over.Internal == nil { + op.sendfile.err = net._tcp_send_error() } } @@ -1496,7 +1568,7 @@ poll_exec :: proc(op: ^Operation) -> Op_Result { } ok := win.PostQueuedCompletionStatus( - op.l.iocp, + g.iocp, 0, 0, &op._impl.over, @@ -1750,3 +1822,19 @@ load_socket_fn :: proc(subject: win.SOCKET, guid: win.GUID, fn: ^$T) { check_timed_out :: proc(op: ^Operation, expires: time.Time) -> bool { return expires != {} && time.diff(op.l.now, expires) <= 0 } + +timeouts_cmp :: #force_inline proc(a, b: ^Operation) -> slice.Ordering { + switch { + case a.timeout._impl.expires._nsec < b.timeout._impl.expires._nsec: + return .Less + case a.timeout._impl.expires._nsec > b.timeout._impl.expires._nsec: + return .Greater + case uintptr(a) < uintptr(b): + return .Less + case uintptr(a) > uintptr(b): + return .Greater + case: + assert(a == b) + return .Equal + } +} \ No newline at end of file diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index dc76cb037..07f34bed2 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -32,6 +32,8 @@ EV_TXEMPTY :: DWORD(0x0004) WAITORTIMERCALLBACK :: #type proc "system" (lpParameter: PVOID, TimerOrWaitFired: BOOLEAN) +PAPCFUNC :: #type proc "system" (Parameter: ULONG_PTR) + WT_EXECUTEDEFAULT :: 0x00000000 WT_EXECUTEINIOTHREAD :: 0x00000001 WT_EXECUTEINPERSISTENTTHREAD :: 0x00000080 @@ -596,6 +598,8 @@ foreign kernel32 { ) -> BOOL --- UnregisterWaitEx :: proc(WaitHandle: HANDLE, CompletionEvent: HANDLE) -> BOOL --- + + QueueUserAPC :: proc(pfnAPC: PAPCFUNC, hThread: HANDLE, dwData: ULONG_PTR) -> DWORD --- } DEBUG_PROCESS :: 0x00000001 diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index 0d8854724..f3f581844 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -2726,6 +2726,8 @@ WAIT_OBJECT_0 : DWORD : 0x00000000 WAIT_TIMEOUT : DWORD : 258 WAIT_FAILED : DWORD : 0xFFFFFFFF +WAIT_IO_COMPLETION: DWORD : 0x000000C0 + FILE_FLAG_WRITE_THROUGH : DWORD : 0x80000000 FILE_FLAG_OVERLAPPED : DWORD : 0x40000000 FILE_FLAG_NO_BUFFERING : DWORD : 0x20000000 From 54abe76f20f73132877edcb2371f1231cd02a99d Mon Sep 17 00:00:00 2001 From: laytan Date: Sat, 17 Jan 2026 21:10:53 +0100 Subject: [PATCH 133/212] nbio: forgot to remove allocator from other impls --- core/nbio/impl_linux.odin | 3 --- core/nbio/impl_others.odin | 2 -- core/nbio/impl_posix.odin | 2 -- 3 files changed, 7 deletions(-) diff --git a/core/nbio/impl_linux.odin b/core/nbio/impl_linux.odin index 552133e67..47d47d77c 100644 --- a/core/nbio/impl_linux.odin +++ b/core/nbio/impl_linux.odin @@ -23,7 +23,6 @@ _Event_Loop :: struct { unqueued: queue.Queue(^Operation), // Ready to run callbacks, mainly next tick, some other ops that error outside the kernel. completed: queue.Queue(^Operation), - allocator: mem.Allocator, wake: ^Operation, } @@ -128,8 +127,6 @@ _Stat :: struct { @(private="package") _init :: proc(l: ^Event_Loop, alloc: mem.Allocator) -> (err: General_Error) { - l.allocator = alloc - params := uring.DEFAULT_PARAMS params.flags += {.SUBMIT_ALL, .COOP_TASKRUN, .SINGLE_ISSUER} diff --git a/core/nbio/impl_others.odin b/core/nbio/impl_others.odin index 1c1e7674e..0a4564454 100644 --- a/core/nbio/impl_others.odin +++ b/core/nbio/impl_others.odin @@ -19,7 +19,6 @@ _FULLY_SUPPORTED :: false _Event_Loop :: struct { completed: queue.Queue(^Operation), timeouts: avl.Tree(^Operation), - allocator: mem.Allocator, } _Handle :: uintptr @@ -69,7 +68,6 @@ _Remove :: struct {} _Link_Timeout :: struct {} _init :: proc(l: ^Event_Loop, allocator: mem.Allocator) -> (rerr: General_Error) { - l.allocator = allocator l.completed.data.allocator = allocator avl.init_cmp(&l.timeouts, timeouts_cmp, allocator) diff --git a/core/nbio/impl_posix.odin b/core/nbio/impl_posix.odin index 19a61c256..9b4863710 100644 --- a/core/nbio/impl_posix.odin +++ b/core/nbio/impl_posix.odin @@ -23,7 +23,6 @@ _Event_Loop :: struct { // We have to keep record of what we currently have in the kqueue, and if we get an operation // that would be the same (ident, filter) pair we need to bundle the operations under one kevent. submitted: map[Queue_Identifier]^Operation, - allocator: mem.Allocator, // Holds all events we want to flush. Flushing is done each tick at which point this is emptied. pending: sa.Small_Array(QUEUE_SIZE, kq.KEvent), // Holds what should be in `pending` but didn't fit. @@ -107,7 +106,6 @@ _Link_Timeout :: struct {} @(private="package") _init :: proc(l: ^Event_Loop, allocator: mem.Allocator) -> (rerr: General_Error) { - l.allocator = allocator l.submitted.allocator = allocator l.overflow.data.allocator = allocator l.completed.data.allocator = allocator From 454f75cb2288e171cd4d40879938ea970e3b9019 Mon Sep 17 00:00:00 2001 From: rykad <> Date: Sat, 17 Jan 2026 22:26:25 +0000 Subject: [PATCH 134/212] core:encoding/base64: add support for url variant --- core/encoding/base64/base64.odin | 49 ++++++++++++++++++++++++++ tests/core/encoding/base64/base64.odin | 17 ++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/core/encoding/base64/base64.odin b/core/encoding/base64/base64.odin index 032716bde..0677fdfb7 100644 --- a/core/encoding/base64/base64.odin +++ b/core/encoding/base64/base64.odin @@ -24,6 +24,18 @@ ENC_TABLE := [64]byte { '4', '5', '6', '7', '8', '9', '+', '/', } +// Encoding table for Base64url variant +ENC_URL_TABLE := [64]byte { + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', + 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', + 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', + 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', + 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', + 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', + 'w', 'x', 'y', 'z', '0', '1', '2', '3', + '4', '5', '6', '7', '8', '9', '-', '_', +} + PADDING :: '=' DEC_TABLE := [256]u8 { @@ -61,6 +73,43 @@ DEC_TABLE := [256]u8 { 0, 0, 0, 0, 0, 0, 0, 0, } +// Decoding table for Base64url variant +DEC_URL_TABLE := [256]u8 { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 62, 0, 0, + 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 0, 0, 0, 0, 63, + 0, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +} + + encode :: proc(data: []byte, ENC_TBL := ENC_TABLE, allocator := context.allocator) -> (encoded: string, err: mem.Allocator_Error) #optional_allocator_error { out_length := encoded_len(data) if out_length == 0 { diff --git a/tests/core/encoding/base64/base64.odin b/tests/core/encoding/base64/base64.odin index ed1bee8af..93b3afb59 100644 --- a/tests/core/encoding/base64/base64.odin +++ b/tests/core/encoding/base64/base64.odin @@ -50,4 +50,19 @@ test_roundtrip :: proc(t: ^testing.T) { for v, i in decoded { testing.expect_value(t, v, values[i]) } -} \ No newline at end of file +} + +@(test) +test_base64url :: proc(t: ^testing.T) { + plain := ">>>" + url := "Pj4-" + + encoded := base64.encode(transmute([]byte)plain, base64.ENC_URL_TABLE) + defer delete(encoded) + testing.expect_value(t, encoded, url) + + decoded := string(base64.decode(url, base64.DEC_URL_TABLE)) + defer delete(decoded) + testing.expect_value(t, decoded, plain) + +} From 227e7920a84ca6d899edcabcdd7fb04dde447f97 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Jan 2026 10:45:58 +0000 Subject: [PATCH 135/212] Add `unescape_string` and `unescape_entity` --- core/html/escape.odin | 191 ++- core/html/html_entities.odin | 2275 ++++++++++++++++++++++++++++++++++ 2 files changed, 2465 insertions(+), 1 deletion(-) create mode 100644 core/html/html_entities.odin diff --git a/core/html/escape.odin b/core/html/escape.odin index dfdcc6f92..011d1f4cd 100644 --- a/core/html/escape.odin +++ b/core/html/escape.odin @@ -1,5 +1,10 @@ package html +import "base:runtime" +import "core:fmt" +import "core:strings" +import "core:unicode/utf8" + // escape_string escapes special characters like '&' to become '&'. // It escapes only 5 different characters: & ' < > and ". @(require_results) @@ -56,4 +61,188 @@ escape_string :: proc(s: string, allocator := context.allocator, loc := #caller_ } output = string(t[0:w]) return -} \ No newline at end of file +} + +@(require_results) +unescape_string :: proc(s: string, entity_map: Entity_Map, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool, err: runtime.Allocator_Error) { + @(require_results) + do_append :: proc(s: string, amp_idx: int, entity_map: Entity_Map, buf: ^[dynamic]byte) -> (n: int) { + s, amp_idx := s, amp_idx + + n += len(s[:amp_idx]) + if buf != nil { append(buf, s[:amp_idx]) } + s = s[amp_idx:] + for len(s) > 0 { + b, w, j := unescape_entity(s, entity_map) + n += w + if buf != nil { append(buf, ..b[:w]) } + + s = s[j:] + + amp_idx = strings.index_byte(s, '&') + if amp_idx < 0 { + n += len(s) + if buf != nil { append(buf, s) } + break + } + n += amp_idx + if buf != nil { append(buf, s[:amp_idx]) } + s = s[amp_idx:] + } + + return + } + + s := s + amp_idx := strings.index_byte(s, '&') + if amp_idx < 0 { + return s, false, nil + } + + // NOTE(bill): this does a two pass in order to minimize the allocations required + bytes_required := do_append(s, amp_idx, entity_map, nil) + + buf := make([dynamic]byte, 0, bytes_required, allocator, loc) or_return + was_allocation = true + + _ = do_append(s, amp_idx, entity_map, &buf) + + assert(len(buf) == cap(buf)) + output = string(buf[:]) + + return +} + +// Returns an unescaped string of an encoded HTML entity. +@(require_results) +unescape_entity :: proc(s: string, entity_map: Entity_Map) -> (b: [8]byte, w: int, j: int) { + s := s + if len(s) < 2 { + return + } + if s[0] != '&' { + return + } + j = 1 + + if s[j] == '#' { // scan numbers + j += 1 + if len(s) <= 3 { // remove `&#.` + return + } + c := s[j] + hex := false + if c == 'x' || c == 'X' { + hex = true + j += 1 + } + + x := rune(0) + scan_number: for j < len(s) { + c = s[j] + j += 1 + if hex { + switch c { + case '0'..='9': x = 16*x + rune(c) - '0'; continue scan_number + case 'a'..='f': x = 16*x + rune(c) - 'a' + 10; continue scan_number + case 'A'..='F': x = 16*x + rune(c) - 'A' + 10; continue scan_number + } + } else { + switch c { + case '0'..='9': x = 10*x + rune(c) - '0'; continue scan_number + } + } + + // Keep the ';' to check for cases which require it and cases which might not + if c != ';' { + j -= 1 + } + break scan_number + } + + + if j <= 3 { // no replacement characters found + return + } + + @(static, rodata) + windows_1252_replacement_table := [0xa0 - 0x80]rune{ // Windows-1252 -> UTF-8 + '\u20ac', '\u0081', '\u201a', '\u0192', + '\u201e', '\u2026', '\u2020', '\u2021', + '\u02c6', '\u2030', '\u0160', '\u2039', + '\u0152', '\u008d', '\u017d', '\u008f', + '\u0090', '\u2018', '\u2019', '\u201c', + '\u201d', '\u2022', '\u2013', '\u2014', + '\u02dc', '\u2122', '\u0161', '\u203a', + '\u0153', '\u009d', '\u017e', '\u0178', + } + + switch x { + case 0x80..<0xa0: + x = windows_1252_replacement_table[x-0x80] + case 0, 0xd800..=0xdfff: + x = utf8.RUNE_ERROR + case: + if x > 0x10ffff { + x = utf8.RUNE_ERROR + } + + } + + b1, w1 := utf8.encode_rune(x) + w += copy(b[:], b1[:w1]) + return + } + + // Lookup by entity names + + scan_ident: for j < len(s) { // scan over letters and digits + c := s[j] + j += 1 + + switch c { + case 'a'..='z', 'A'..='Z', '0'..='9': + continue scan_ident + } + // Keep the ';' to check for cases which require it and cases which might not + if c != ';' { + j -= 1 + } + break scan_ident + } + + entity_name := s[1:j] + if len(entity_name) == 0 { + return + } + + if r, ok := entity_map.entity1[entity_name]; ok { + b1, w1 := utf8.encode_rune(r) + copy(b[:], b1[:w1]) + w = w1 + return + } + + if r2, ok := entity_map.entity2[entity_name]; ok { + b1, w1 := utf8.encode_rune(r2[0]) + b2, w2 := utf8.encode_rune(r2[1]) + w += copy(b[w:], b1[:w1]) + w += copy(b[w:], b2[:w2]) + return + } + + // The longest entities that do not end with a semicolon are <=6 bytes long + LONGEST_ENTITY_WITHOUT_SEMICOLON :: 6 + + n := min(len(entity_name)-1, LONGEST_ENTITY_WITHOUT_SEMICOLON) + for i := n; i > 1; i -= 1 { + if r, ok := entity_map.entity1[entity_name[:i]]; ok { + b1, w1 := utf8.encode_rune(r) + copy(b[:], b1[:w1]) + w = w1 + return + } + } + + return +} diff --git a/core/html/html_entities.odin b/core/html/html_entities.odin new file mode 100644 index 000000000..be52f5d26 --- /dev/null +++ b/core/html/html_entities.odin @@ -0,0 +1,2275 @@ +package html + +Entity_Map :: struct { + entity1: map[string]rune, + entity2: map[string][2]rune, +} + + +entity_map_create :: proc(allocator := context.allocator) -> (m: Entity_Map) { + m.entity1.allocator = allocator + m.entity2.allocator = allocator + + reserve(&m.entity1, len(_entity1)*2) + reserve(&m.entity2, len(_entity2)*2) + + for &e in _entity1 { + map_insert(&m.entity1, e.n, e.r) + } + + for &e in _entity2 { + map_insert(&m.entity2, e.n, e.r) + } + + return +} + +entity_map_destroy :: proc(m: ^Entity_Map) { + delete(m.entity1) + delete(m.entity2) + m^ = {} +} + + +// Generated from http://www.w3.org/TR/html4/sgml/entities.html + + +@(private="file", rodata) +_entity1 := [?]struct{n: string, r: rune}{ + {"AElig;", '\U000000C6'}, + {"AMP;", '\U00000026'}, + {"Aacute;", '\U000000C1'}, + {"Abreve;", '\U00000102'}, + {"Acirc;", '\U000000C2'}, + {"Acy;", '\U00000410'}, + {"Afr;", '\U0001D504'}, + {"Agrave;", '\U000000C0'}, + {"Alpha;", '\U00000391'}, + {"Amacr;", '\U00000100'}, + {"And;", '\U00002A53'}, + {"Aogon;", '\U00000104'}, + {"Aopf;", '\U0001D538'}, + {"ApplyFunction;", '\U00002061'}, + {"Aring;", '\U000000C5'}, + {"Ascr;", '\U0001D49C'}, + {"Assign;", '\U00002254'}, + {"Atilde;", '\U000000C3'}, + {"Auml;", '\U000000C4'}, + {"Backslash;", '\U00002216'}, + {"Barv;", '\U00002AE7'}, + {"Barwed;", '\U00002306'}, + {"Bcy;", '\U00000411'}, + {"Because;", '\U00002235'}, + {"Bernoullis;", '\U0000212C'}, + {"Beta;", '\U00000392'}, + {"Bfr;", '\U0001D505'}, + {"Bopf;", '\U0001D539'}, + {"Breve;", '\U000002D8'}, + {"Bscr;", '\U0000212C'}, + {"Bumpeq;", '\U0000224E'}, + {"CHcy;", '\U00000427'}, + {"COPY;", '\U000000A9'}, + {"Cacute;", '\U00000106'}, + {"Cap;", '\U000022D2'}, + {"CapitalDifferentialD;", '\U00002145'}, + {"Cayleys;", '\U0000212D'}, + {"Ccaron;", '\U0000010C'}, + {"Ccedil;", '\U000000C7'}, + {"Ccirc;", '\U00000108'}, + {"Cconint;", '\U00002230'}, + {"Cdot;", '\U0000010A'}, + {"Cedilla;", '\U000000B8'}, + {"CenterDot;", '\U000000B7'}, + {"Cfr;", '\U0000212D'}, + {"Chi;", '\U000003A7'}, + {"CircleDot;", '\U00002299'}, + {"CircleMinus;", '\U00002296'}, + {"CirclePlus;", '\U00002295'}, + {"CircleTimes;", '\U00002297'}, + {"ClockwiseContourIntegral;", '\U00002232'}, + {"CloseCurlyDoubleQuote;", '\U0000201D'}, + {"CloseCurlyQuote;", '\U00002019'}, + {"Colon;", '\U00002237'}, + {"Colone;", '\U00002A74'}, + {"Congruent;", '\U00002261'}, + {"Conint;", '\U0000222F'}, + {"ContourIntegral;", '\U0000222E'}, + {"Copf;", '\U00002102'}, + {"Coproduct;", '\U00002210'}, + {"CounterClockwiseContourIntegral;", '\U00002233'}, + {"Cross;", '\U00002A2F'}, + {"Cscr;", '\U0001D49E'}, + {"Cup;", '\U000022D3'}, + {"CupCap;", '\U0000224D'}, + {"DD;", '\U00002145'}, + {"DDotrahd;", '\U00002911'}, + {"DJcy;", '\U00000402'}, + {"DScy;", '\U00000405'}, + {"DZcy;", '\U0000040F'}, + {"Dagger;", '\U00002021'}, + {"Darr;", '\U000021A1'}, + {"Dashv;", '\U00002AE4'}, + {"Dcaron;", '\U0000010E'}, + {"Dcy;", '\U00000414'}, + {"Del;", '\U00002207'}, + {"Delta;", '\U00000394'}, + {"Dfr;", '\U0001D507'}, + {"DiacriticalAcute;", '\U000000B4'}, + {"DiacriticalDot;", '\U000002D9'}, + {"DiacriticalDoubleAcute;", '\U000002DD'}, + {"DiacriticalGrave;", '\U00000060'}, + {"DiacriticalTilde;", '\U000002DC'}, + {"Diamond;", '\U000022C4'}, + {"DifferentialD;", '\U00002146'}, + {"Dopf;", '\U0001D53B'}, + {"Dot;", '\U000000A8'}, + {"DotDot;", '\U000020DC'}, + {"DotEqual;", '\U00002250'}, + {"DoubleContourIntegral;", '\U0000222F'}, + {"DoubleDot;", '\U000000A8'}, + {"DoubleDownArrow;", '\U000021D3'}, + {"DoubleLeftArrow;", '\U000021D0'}, + {"DoubleLeftRightArrow;", '\U000021D4'}, + {"DoubleLeftTee;", '\U00002AE4'}, + {"DoubleLongLeftArrow;", '\U000027F8'}, + {"DoubleLongLeftRightArrow;", '\U000027FA'}, + {"DoubleLongRightArrow;", '\U000027F9'}, + {"DoubleRightArrow;", '\U000021D2'}, + {"DoubleRightTee;", '\U000022A8'}, + {"DoubleUpArrow;", '\U000021D1'}, + {"DoubleUpDownArrow;", '\U000021D5'}, + {"DoubleVerticalBar;", '\U00002225'}, + {"DownArrow;", '\U00002193'}, + {"DownArrowBar;", '\U00002913'}, + {"DownArrowUpArrow;", '\U000021F5'}, + {"DownBreve;", '\U00000311'}, + {"DownLeftRightVector;", '\U00002950'}, + {"DownLeftTeeVector;", '\U0000295E'}, + {"DownLeftVector;", '\U000021BD'}, + {"DownLeftVectorBar;", '\U00002956'}, + {"DownRightTeeVector;", '\U0000295F'}, + {"DownRightVector;", '\U000021C1'}, + {"DownRightVectorBar;", '\U00002957'}, + {"DownTee;", '\U000022A4'}, + {"DownTeeArrow;", '\U000021A7'}, + {"Downarrow;", '\U000021D3'}, + {"Dscr;", '\U0001D49F'}, + {"Dstrok;", '\U00000110'}, + {"ENG;", '\U0000014A'}, + {"ETH;", '\U000000D0'}, + {"Eacute;", '\U000000C9'}, + {"Ecaron;", '\U0000011A'}, + {"Ecirc;", '\U000000CA'}, + {"Ecy;", '\U0000042D'}, + {"Edot;", '\U00000116'}, + {"Efr;", '\U0001D508'}, + {"Egrave;", '\U000000C8'}, + {"Element;", '\U00002208'}, + {"Emacr;", '\U00000112'}, + {"EmptySmallSquare;", '\U000025FB'}, + {"EmptyVerySmallSquare;", '\U000025AB'}, + {"Eogon;", '\U00000118'}, + {"Eopf;", '\U0001D53C'}, + {"Epsilon;", '\U00000395'}, + {"Equal;", '\U00002A75'}, + {"EqualTilde;", '\U00002242'}, + {"Equilibrium;", '\U000021CC'}, + {"Escr;", '\U00002130'}, + {"Esim;", '\U00002A73'}, + {"Eta;", '\U00000397'}, + {"Euml;", '\U000000CB'}, + {"Exists;", '\U00002203'}, + {"ExponentialE;", '\U00002147'}, + {"Fcy;", '\U00000424'}, + {"Ffr;", '\U0001D509'}, + {"FilledSmallSquare;", '\U000025FC'}, + {"FilledVerySmallSquare;", '\U000025AA'}, + {"Fopf;", '\U0001D53D'}, + {"ForAll;", '\U00002200'}, + {"Fouriertrf;", '\U00002131'}, + {"Fscr;", '\U00002131'}, + {"GJcy;", '\U00000403'}, + {"GT;", '\U0000003E'}, + {"Gamma;", '\U00000393'}, + {"Gammad;", '\U000003DC'}, + {"Gbreve;", '\U0000011E'}, + {"Gcedil;", '\U00000122'}, + {"Gcirc;", '\U0000011C'}, + {"Gcy;", '\U00000413'}, + {"Gdot;", '\U00000120'}, + {"Gfr;", '\U0001D50A'}, + {"Gg;", '\U000022D9'}, + {"Gopf;", '\U0001D53E'}, + {"GreaterEqual;", '\U00002265'}, + {"GreaterEqualLess;", '\U000022DB'}, + {"GreaterFullEqual;", '\U00002267'}, + {"GreaterGreater;", '\U00002AA2'}, + {"GreaterLess;", '\U00002277'}, + {"GreaterSlantEqual;", '\U00002A7E'}, + {"GreaterTilde;", '\U00002273'}, + {"Gscr;", '\U0001D4A2'}, + {"Gt;", '\U0000226B'}, + {"HARDcy;", '\U0000042A'}, + {"Hacek;", '\U000002C7'}, + {"Hat;", '\U0000005E'}, + {"Hcirc;", '\U00000124'}, + {"Hfr;", '\U0000210C'}, + {"HilbertSpace;", '\U0000210B'}, + {"Hopf;", '\U0000210D'}, + {"HorizontalLine;", '\U00002500'}, + {"Hscr;", '\U0000210B'}, + {"Hstrok;", '\U00000126'}, + {"HumpDownHump;", '\U0000224E'}, + {"HumpEqual;", '\U0000224F'}, + {"IEcy;", '\U00000415'}, + {"IJlig;", '\U00000132'}, + {"IOcy;", '\U00000401'}, + {"Iacute;", '\U000000CD'}, + {"Icirc;", '\U000000CE'}, + {"Icy;", '\U00000418'}, + {"Idot;", '\U00000130'}, + {"Ifr;", '\U00002111'}, + {"Igrave;", '\U000000CC'}, + {"Im;", '\U00002111'}, + {"Imacr;", '\U0000012A'}, + {"ImaginaryI;", '\U00002148'}, + {"Implies;", '\U000021D2'}, + {"Int;", '\U0000222C'}, + {"Integral;", '\U0000222B'}, + {"Intersection;", '\U000022C2'}, + {"InvisibleComma;", '\U00002063'}, + {"InvisibleTimes;", '\U00002062'}, + {"Iogon;", '\U0000012E'}, + {"Iopf;", '\U0001D540'}, + {"Iota;", '\U00000399'}, + {"Iscr;", '\U00002110'}, + {"Itilde;", '\U00000128'}, + {"Iukcy;", '\U00000406'}, + {"Iuml;", '\U000000CF'}, + {"Jcirc;", '\U00000134'}, + {"Jcy;", '\U00000419'}, + {"Jfr;", '\U0001D50D'}, + {"Jopf;", '\U0001D541'}, + {"Jscr;", '\U0001D4A5'}, + {"Jsercy;", '\U00000408'}, + {"Jukcy;", '\U00000404'}, + {"KHcy;", '\U00000425'}, + {"KJcy;", '\U0000040C'}, + {"Kappa;", '\U0000039A'}, + {"Kcedil;", '\U00000136'}, + {"Kcy;", '\U0000041A'}, + {"Kfr;", '\U0001D50E'}, + {"Kopf;", '\U0001D542'}, + {"Kscr;", '\U0001D4A6'}, + {"LJcy;", '\U00000409'}, + {"LT;", '\U0000003C'}, + {"Lacute;", '\U00000139'}, + {"Lambda;", '\U0000039B'}, + {"Lang;", '\U000027EA'}, + {"Laplacetrf;", '\U00002112'}, + {"Larr;", '\U0000219E'}, + {"Lcaron;", '\U0000013D'}, + {"Lcedil;", '\U0000013B'}, + {"Lcy;", '\U0000041B'}, + {"LeftAngleBracket;", '\U000027E8'}, + {"LeftArrow;", '\U00002190'}, + {"LeftArrowBar;", '\U000021E4'}, + {"LeftArrowRightArrow;", '\U000021C6'}, + {"LeftCeiling;", '\U00002308'}, + {"LeftDoubleBracket;", '\U000027E6'}, + {"LeftDownTeeVector;", '\U00002961'}, + {"LeftDownVector;", '\U000021C3'}, + {"LeftDownVectorBar;", '\U00002959'}, + {"LeftFloor;", '\U0000230A'}, + {"LeftRightArrow;", '\U00002194'}, + {"LeftRightVector;", '\U0000294E'}, + {"LeftTee;", '\U000022A3'}, + {"LeftTeeArrow;", '\U000021A4'}, + {"LeftTeeVector;", '\U0000295A'}, + {"LeftTriangle;", '\U000022B2'}, + {"LeftTriangleBar;", '\U000029CF'}, + {"LeftTriangleEqual;", '\U000022B4'}, + {"LeftUpDownVector;", '\U00002951'}, + {"LeftUpTeeVector;", '\U00002960'}, + {"LeftUpVector;", '\U000021BF'}, + {"LeftUpVectorBar;", '\U00002958'}, + {"LeftVector;", '\U000021BC'}, + {"LeftVectorBar;", '\U00002952'}, + {"Leftarrow;", '\U000021D0'}, + {"Leftrightarrow;", '\U000021D4'}, + {"LessEqualGreater;", '\U000022DA'}, + {"LessFullEqual;", '\U00002266'}, + {"LessGreater;", '\U00002276'}, + {"LessLess;", '\U00002AA1'}, + {"LessSlantEqual;", '\U00002A7D'}, + {"LessTilde;", '\U00002272'}, + {"Lfr;", '\U0001D50F'}, + {"Ll;", '\U000022D8'}, + {"Lleftarrow;", '\U000021DA'}, + {"Lmidot;", '\U0000013F'}, + {"LongLeftArrow;", '\U000027F5'}, + {"LongLeftRightArrow;", '\U000027F7'}, + {"LongRightArrow;", '\U000027F6'}, + {"Longleftarrow;", '\U000027F8'}, + {"Longleftrightarrow;", '\U000027FA'}, + {"Longrightarrow;", '\U000027F9'}, + {"Lopf;", '\U0001D543'}, + {"LowerLeftArrow;", '\U00002199'}, + {"LowerRightArrow;", '\U00002198'}, + {"Lscr;", '\U00002112'}, + {"Lsh;", '\U000021B0'}, + {"Lstrok;", '\U00000141'}, + {"Lt;", '\U0000226A'}, + {"Map;", '\U00002905'}, + {"Mcy;", '\U0000041C'}, + {"MediumSpace;", '\U0000205F'}, + {"Mellintrf;", '\U00002133'}, + {"Mfr;", '\U0001D510'}, + {"MinusPlus;", '\U00002213'}, + {"Mopf;", '\U0001D544'}, + {"Mscr;", '\U00002133'}, + {"Mu;", '\U0000039C'}, + {"NJcy;", '\U0000040A'}, + {"Nacute;", '\U00000143'}, + {"Ncaron;", '\U00000147'}, + {"Ncedil;", '\U00000145'}, + {"Ncy;", '\U0000041D'}, + {"NegativeMediumSpace;", '\U0000200B'}, + {"NegativeThickSpace;", '\U0000200B'}, + {"NegativeThinSpace;", '\U0000200B'}, + {"NegativeVeryThinSpace;", '\U0000200B'}, + {"NestedGreaterGreater;", '\U0000226B'}, + {"NestedLessLess;", '\U0000226A'}, + {"NewLine;", '\U0000000A'}, + {"Nfr;", '\U0001D511'}, + {"NoBreak;", '\U00002060'}, + {"NonBreakingSpace;", '\U000000A0'}, + {"Nopf;", '\U00002115'}, + {"Not;", '\U00002AEC'}, + {"NotCongruent;", '\U00002262'}, + {"NotCupCap;", '\U0000226D'}, + {"NotDoubleVerticalBar;", '\U00002226'}, + {"NotElement;", '\U00002209'}, + {"NotEqual;", '\U00002260'}, + {"NotExists;", '\U00002204'}, + {"NotGreater;", '\U0000226F'}, + {"NotGreaterEqual;", '\U00002271'}, + {"NotGreaterLess;", '\U00002279'}, + {"NotGreaterTilde;", '\U00002275'}, + {"NotLeftTriangle;", '\U000022EA'}, + {"NotLeftTriangleEqual;", '\U000022EC'}, + {"NotLess;", '\U0000226E'}, + {"NotLessEqual;", '\U00002270'}, + {"NotLessGreater;", '\U00002278'}, + {"NotLessTilde;", '\U00002274'}, + {"NotPrecedes;", '\U00002280'}, + {"NotPrecedesSlantEqual;", '\U000022E0'}, + {"NotReverseElement;", '\U0000220C'}, + {"NotRightTriangle;", '\U000022EB'}, + {"NotRightTriangleEqual;", '\U000022ED'}, + {"NotSquareSubsetEqual;", '\U000022E2'}, + {"NotSquareSupersetEqual;", '\U000022E3'}, + {"NotSubsetEqual;", '\U00002288'}, + {"NotSucceeds;", '\U00002281'}, + {"NotSucceedsSlantEqual;", '\U000022E1'}, + {"NotSupersetEqual;", '\U00002289'}, + {"NotTilde;", '\U00002241'}, + {"NotTildeEqual;", '\U00002244'}, + {"NotTildeFullEqual;", '\U00002247'}, + {"NotTildeTilde;", '\U00002249'}, + {"NotVerticalBar;", '\U00002224'}, + {"Nscr;", '\U0001D4A9'}, + {"Ntilde;", '\U000000D1'}, + {"Nu;", '\U0000039D'}, + {"OElig;", '\U00000152'}, + {"Oacute;", '\U000000D3'}, + {"Ocirc;", '\U000000D4'}, + {"Ocy;", '\U0000041E'}, + {"Odblac;", '\U00000150'}, + {"Ofr;", '\U0001D512'}, + {"Ograve;", '\U000000D2'}, + {"Omacr;", '\U0000014C'}, + {"Omega;", '\U000003A9'}, + {"Omicron;", '\U0000039F'}, + {"Oopf;", '\U0001D546'}, + {"OpenCurlyDoubleQuote;", '\U0000201C'}, + {"OpenCurlyQuote;", '\U00002018'}, + {"Or;", '\U00002A54'}, + {"Oscr;", '\U0001D4AA'}, + {"Oslash;", '\U000000D8'}, + {"Otilde;", '\U000000D5'}, + {"Otimes;", '\U00002A37'}, + {"Ouml;", '\U000000D6'}, + {"OverBar;", '\U0000203E'}, + {"OverBrace;", '\U000023DE'}, + {"OverBracket;", '\U000023B4'}, + {"OverParenthesis;", '\U000023DC'}, + {"PartialD;", '\U00002202'}, + {"Pcy;", '\U0000041F'}, + {"Pfr;", '\U0001D513'}, + {"Phi;", '\U000003A6'}, + {"Pi;", '\U000003A0'}, + {"PlusMinus;", '\U000000B1'}, + {"Poincareplane;", '\U0000210C'}, + {"Popf;", '\U00002119'}, + {"Pr;", '\U00002ABB'}, + {"Precedes;", '\U0000227A'}, + {"PrecedesEqual;", '\U00002AAF'}, + {"PrecedesSlantEqual;", '\U0000227C'}, + {"PrecedesTilde;", '\U0000227E'}, + {"Prime;", '\U00002033'}, + {"Product;", '\U0000220F'}, + {"Proportion;", '\U00002237'}, + {"Proportional;", '\U0000221D'}, + {"Pscr;", '\U0001D4AB'}, + {"Psi;", '\U000003A8'}, + {"QUOT;", '\U00000022'}, + {"Qfr;", '\U0001D514'}, + {"Qopf;", '\U0000211A'}, + {"Qscr;", '\U0001D4AC'}, + {"RBarr;", '\U00002910'}, + {"REG;", '\U000000AE'}, + {"Racute;", '\U00000154'}, + {"Rang;", '\U000027EB'}, + {"Rarr;", '\U000021A0'}, + {"Rarrtl;", '\U00002916'}, + {"Rcaron;", '\U00000158'}, + {"Rcedil;", '\U00000156'}, + {"Rcy;", '\U00000420'}, + {"Re;", '\U0000211C'}, + {"ReverseElement;", '\U0000220B'}, + {"ReverseEquilibrium;", '\U000021CB'}, + {"ReverseUpEquilibrium;", '\U0000296F'}, + {"Rfr;", '\U0000211C'}, + {"Rho;", '\U000003A1'}, + {"RightAngleBracket;", '\U000027E9'}, + {"RightArrow;", '\U00002192'}, + {"RightArrowBar;", '\U000021E5'}, + {"RightArrowLeftArrow;", '\U000021C4'}, + {"RightCeiling;", '\U00002309'}, + {"RightDoubleBracket;", '\U000027E7'}, + {"RightDownTeeVector;", '\U0000295D'}, + {"RightDownVector;", '\U000021C2'}, + {"RightDownVectorBar;", '\U00002955'}, + {"RightFloor;", '\U0000230B'}, + {"RightTee;", '\U000022A2'}, + {"RightTeeArrow;", '\U000021A6'}, + {"RightTeeVector;", '\U0000295B'}, + {"RightTriangle;", '\U000022B3'}, + {"RightTriangleBar;", '\U000029D0'}, + {"RightTriangleEqual;", '\U000022B5'}, + {"RightUpDownVector;", '\U0000294F'}, + {"RightUpTeeVector;", '\U0000295C'}, + {"RightUpVector;", '\U000021BE'}, + {"RightUpVectorBar;", '\U00002954'}, + {"RightVector;", '\U000021C0'}, + {"RightVectorBar;", '\U00002953'}, + {"Rightarrow;", '\U000021D2'}, + {"Ropf;", '\U0000211D'}, + {"RoundImplies;", '\U00002970'}, + {"Rrightarrow;", '\U000021DB'}, + {"Rscr;", '\U0000211B'}, + {"Rsh;", '\U000021B1'}, + {"RuleDelayed;", '\U000029F4'}, + {"SHCHcy;", '\U00000429'}, + {"SHcy;", '\U00000428'}, + {"SOFTcy;", '\U0000042C'}, + {"Sacute;", '\U0000015A'}, + {"Sc;", '\U00002ABC'}, + {"Scaron;", '\U00000160'}, + {"Scedil;", '\U0000015E'}, + {"Scirc;", '\U0000015C'}, + {"Scy;", '\U00000421'}, + {"Sfr;", '\U0001D516'}, + {"ShortDownArrow;", '\U00002193'}, + {"ShortLeftArrow;", '\U00002190'}, + {"ShortRightArrow;", '\U00002192'}, + {"ShortUpArrow;", '\U00002191'}, + {"Sigma;", '\U000003A3'}, + {"SmallCircle;", '\U00002218'}, + {"Sopf;", '\U0001D54A'}, + {"Sqrt;", '\U0000221A'}, + {"Square;", '\U000025A1'}, + {"SquareIntersection;", '\U00002293'}, + {"SquareSubset;", '\U0000228F'}, + {"SquareSubsetEqual;", '\U00002291'}, + {"SquareSuperset;", '\U00002290'}, + {"SquareSupersetEqual;", '\U00002292'}, + {"SquareUnion;", '\U00002294'}, + {"Sscr;", '\U0001D4AE'}, + {"Star;", '\U000022C6'}, + {"Sub;", '\U000022D0'}, + {"Subset;", '\U000022D0'}, + {"SubsetEqual;", '\U00002286'}, + {"Succeeds;", '\U0000227B'}, + {"SucceedsEqual;", '\U00002AB0'}, + {"SucceedsSlantEqual;", '\U0000227D'}, + {"SucceedsTilde;", '\U0000227F'}, + {"SuchThat;", '\U0000220B'}, + {"Sum;", '\U00002211'}, + {"Sup;", '\U000022D1'}, + {"Superset;", '\U00002283'}, + {"SupersetEqual;", '\U00002287'}, + {"Supset;", '\U000022D1'}, + {"THORN;", '\U000000DE'}, + {"TRADE;", '\U00002122'}, + {"TSHcy;", '\U0000040B'}, + {"TScy;", '\U00000426'}, + {"Tab;", '\U00000009'}, + {"Tau;", '\U000003A4'}, + {"Tcaron;", '\U00000164'}, + {"Tcedil;", '\U00000162'}, + {"Tcy;", '\U00000422'}, + {"Tfr;", '\U0001D517'}, + {"Therefore;", '\U00002234'}, + {"Theta;", '\U00000398'}, + {"ThinSpace;", '\U00002009'}, + {"Tilde;", '\U0000223C'}, + {"TildeEqual;", '\U00002243'}, + {"TildeFullEqual;", '\U00002245'}, + {"TildeTilde;", '\U00002248'}, + {"Topf;", '\U0001D54B'}, + {"TripleDot;", '\U000020DB'}, + {"Tscr;", '\U0001D4AF'}, + {"Tstrok;", '\U00000166'}, + {"Uacute;", '\U000000DA'}, + {"Uarr;", '\U0000219F'}, + {"Uarrocir;", '\U00002949'}, + {"Ubrcy;", '\U0000040E'}, + {"Ubreve;", '\U0000016C'}, + {"Ucirc;", '\U000000DB'}, + {"Ucy;", '\U00000423'}, + {"Udblac;", '\U00000170'}, + {"Ufr;", '\U0001D518'}, + {"Ugrave;", '\U000000D9'}, + {"Umacr;", '\U0000016A'}, + {"UnderBar;", '\U0000005F'}, + {"UnderBrace;", '\U000023DF'}, + {"UnderBracket;", '\U000023B5'}, + {"UnderParenthesis;", '\U000023DD'}, + {"Union;", '\U000022C3'}, + {"UnionPlus;", '\U0000228E'}, + {"Uogon;", '\U00000172'}, + {"Uopf;", '\U0001D54C'}, + {"UpArrow;", '\U00002191'}, + {"UpArrowBar;", '\U00002912'}, + {"UpArrowDownArrow;", '\U000021C5'}, + {"UpDownArrow;", '\U00002195'}, + {"UpEquilibrium;", '\U0000296E'}, + {"UpTee;", '\U000022A5'}, + {"UpTeeArrow;", '\U000021A5'}, + {"Uparrow;", '\U000021D1'}, + {"Updownarrow;", '\U000021D5'}, + {"UpperLeftArrow;", '\U00002196'}, + {"UpperRightArrow;", '\U00002197'}, + {"Upsi;", '\U000003D2'}, + {"Upsilon;", '\U000003A5'}, + {"Uring;", '\U0000016E'}, + {"Uscr;", '\U0001D4B0'}, + {"Utilde;", '\U00000168'}, + {"Uuml;", '\U000000DC'}, + {"VDash;", '\U000022AB'}, + {"Vbar;", '\U00002AEB'}, + {"Vcy;", '\U00000412'}, + {"Vdash;", '\U000022A9'}, + {"Vdashl;", '\U00002AE6'}, + {"Vee;", '\U000022C1'}, + {"Verbar;", '\U00002016'}, + {"Vert;", '\U00002016'}, + {"VerticalBar;", '\U00002223'}, + {"VerticalLine;", '\U0000007C'}, + {"VerticalSeparator;", '\U00002758'}, + {"VerticalTilde;", '\U00002240'}, + {"VeryThinSpace;", '\U0000200A'}, + {"Vfr;", '\U0001D519'}, + {"Vopf;", '\U0001D54D'}, + {"Vscr;", '\U0001D4B1'}, + {"Vvdash;", '\U000022AA'}, + {"Wcirc;", '\U00000174'}, + {"Wedge;", '\U000022C0'}, + {"Wfr;", '\U0001D51A'}, + {"Wopf;", '\U0001D54E'}, + {"Wscr;", '\U0001D4B2'}, + {"Xfr;", '\U0001D51B'}, + {"Xi;", '\U0000039E'}, + {"Xopf;", '\U0001D54F'}, + {"Xscr;", '\U0001D4B3'}, + {"YAcy;", '\U0000042F'}, + {"YIcy;", '\U00000407'}, + {"YUcy;", '\U0000042E'}, + {"Yacute;", '\U000000DD'}, + {"Ycirc;", '\U00000176'}, + {"Ycy;", '\U0000042B'}, + {"Yfr;", '\U0001D51C'}, + {"Yopf;", '\U0001D550'}, + {"Yscr;", '\U0001D4B4'}, + {"Yuml;", '\U00000178'}, + {"ZHcy;", '\U00000416'}, + {"Zacute;", '\U00000179'}, + {"Zcaron;", '\U0000017D'}, + {"Zcy;", '\U00000417'}, + {"Zdot;", '\U0000017B'}, + {"ZeroWidthSpace;", '\U0000200B'}, + {"Zeta;", '\U00000396'}, + {"Zfr;", '\U00002128'}, + {"Zopf;", '\U00002124'}, + {"Zscr;", '\U0001D4B5'}, + {"aacute;", '\U000000E1'}, + {"abreve;", '\U00000103'}, + {"ac;", '\U0000223E'}, + {"acd;", '\U0000223F'}, + {"acirc;", '\U000000E2'}, + {"acute;", '\U000000B4'}, + {"acy;", '\U00000430'}, + {"aelig;", '\U000000E6'}, + {"af;", '\U00002061'}, + {"afr;", '\U0001D51E'}, + {"agrave;", '\U000000E0'}, + {"alefsym;", '\U00002135'}, + {"aleph;", '\U00002135'}, + {"alpha;", '\U000003B1'}, + {"amacr;", '\U00000101'}, + {"amalg;", '\U00002A3F'}, + {"amp;", '\U00000026'}, + {"and;", '\U00002227'}, + {"andand;", '\U00002A55'}, + {"andd;", '\U00002A5C'}, + {"andslope;", '\U00002A58'}, + {"andv;", '\U00002A5A'}, + {"ang;", '\U00002220'}, + {"ange;", '\U000029A4'}, + {"angle;", '\U00002220'}, + {"angmsd;", '\U00002221'}, + {"angmsdaa;", '\U000029A8'}, + {"angmsdab;", '\U000029A9'}, + {"angmsdac;", '\U000029AA'}, + {"angmsdad;", '\U000029AB'}, + {"angmsdae;", '\U000029AC'}, + {"angmsdaf;", '\U000029AD'}, + {"angmsdag;", '\U000029AE'}, + {"angmsdah;", '\U000029AF'}, + {"angrt;", '\U0000221F'}, + {"angrtvb;", '\U000022BE'}, + {"angrtvbd;", '\U0000299D'}, + {"angsph;", '\U00002222'}, + {"angst;", '\U000000C5'}, + {"angzarr;", '\U0000237C'}, + {"aogon;", '\U00000105'}, + {"aopf;", '\U0001D552'}, + {"ap;", '\U00002248'}, + {"apE;", '\U00002A70'}, + {"apacir;", '\U00002A6F'}, + {"ape;", '\U0000224A'}, + {"apid;", '\U0000224B'}, + {"apos;", '\U00000027'}, + {"approx;", '\U00002248'}, + {"approxeq;", '\U0000224A'}, + {"aring;", '\U000000E5'}, + {"ascr;", '\U0001D4B6'}, + {"ast;", '\U0000002A'}, + {"asymp;", '\U00002248'}, + {"asympeq;", '\U0000224D'}, + {"atilde;", '\U000000E3'}, + {"auml;", '\U000000E4'}, + {"awconint;", '\U00002233'}, + {"awint;", '\U00002A11'}, + {"bNot;", '\U00002AED'}, + {"backcong;", '\U0000224C'}, + {"backepsilon;", '\U000003F6'}, + {"backprime;", '\U00002035'}, + {"backsim;", '\U0000223D'}, + {"backsimeq;", '\U000022CD'}, + {"barvee;", '\U000022BD'}, + {"barwed;", '\U00002305'}, + {"barwedge;", '\U00002305'}, + {"bbrk;", '\U000023B5'}, + {"bbrktbrk;", '\U000023B6'}, + {"bcong;", '\U0000224C'}, + {"bcy;", '\U00000431'}, + {"bdquo;", '\U0000201E'}, + {"becaus;", '\U00002235'}, + {"because;", '\U00002235'}, + {"bemptyv;", '\U000029B0'}, + {"bepsi;", '\U000003F6'}, + {"bernou;", '\U0000212C'}, + {"beta;", '\U000003B2'}, + {"beth;", '\U00002136'}, + {"between;", '\U0000226C'}, + {"bfr;", '\U0001D51F'}, + {"bigcap;", '\U000022C2'}, + {"bigcirc;", '\U000025EF'}, + {"bigcup;", '\U000022C3'}, + {"bigodot;", '\U00002A00'}, + {"bigoplus;", '\U00002A01'}, + {"bigotimes;", '\U00002A02'}, + {"bigsqcup;", '\U00002A06'}, + {"bigstar;", '\U00002605'}, + {"bigtriangledown;", '\U000025BD'}, + {"bigtriangleup;", '\U000025B3'}, + {"biguplus;", '\U00002A04'}, + {"bigvee;", '\U000022C1'}, + {"bigwedge;", '\U000022C0'}, + {"bkarow;", '\U0000290D'}, + {"blacklozenge;", '\U000029EB'}, + {"blacksquare;", '\U000025AA'}, + {"blacktriangle;", '\U000025B4'}, + {"blacktriangledown;", '\U000025BE'}, + {"blacktriangleleft;", '\U000025C2'}, + {"blacktriangleright;", '\U000025B8'}, + {"blank;", '\U00002423'}, + {"blk12;", '\U00002592'}, + {"blk14;", '\U00002591'}, + {"blk34;", '\U00002593'}, + {"block;", '\U00002588'}, + {"bnot;", '\U00002310'}, + {"bopf;", '\U0001D553'}, + {"bot;", '\U000022A5'}, + {"bottom;", '\U000022A5'}, + {"bowtie;", '\U000022C8'}, + {"boxDL;", '\U00002557'}, + {"boxDR;", '\U00002554'}, + {"boxDl;", '\U00002556'}, + {"boxDr;", '\U00002553'}, + {"boxH;", '\U00002550'}, + {"boxHD;", '\U00002566'}, + {"boxHU;", '\U00002569'}, + {"boxHd;", '\U00002564'}, + {"boxHu;", '\U00002567'}, + {"boxUL;", '\U0000255D'}, + {"boxUR;", '\U0000255A'}, + {"boxUl;", '\U0000255C'}, + {"boxUr;", '\U00002559'}, + {"boxV;", '\U00002551'}, + {"boxVH;", '\U0000256C'}, + {"boxVL;", '\U00002563'}, + {"boxVR;", '\U00002560'}, + {"boxVh;", '\U0000256B'}, + {"boxVl;", '\U00002562'}, + {"boxVr;", '\U0000255F'}, + {"boxbox;", '\U000029C9'}, + {"boxdL;", '\U00002555'}, + {"boxdR;", '\U00002552'}, + {"boxdl;", '\U00002510'}, + {"boxdr;", '\U0000250C'}, + {"boxh;", '\U00002500'}, + {"boxhD;", '\U00002565'}, + {"boxhU;", '\U00002568'}, + {"boxhd;", '\U0000252C'}, + {"boxhu;", '\U00002534'}, + {"boxminus;", '\U0000229F'}, + {"boxplus;", '\U0000229E'}, + {"boxtimes;", '\U000022A0'}, + {"boxuL;", '\U0000255B'}, + {"boxuR;", '\U00002558'}, + {"boxul;", '\U00002518'}, + {"boxur;", '\U00002514'}, + {"boxv;", '\U00002502'}, + {"boxvH;", '\U0000256A'}, + {"boxvL;", '\U00002561'}, + {"boxvR;", '\U0000255E'}, + {"boxvh;", '\U0000253C'}, + {"boxvl;", '\U00002524'}, + {"boxvr;", '\U0000251C'}, + {"bprime;", '\U00002035'}, + {"breve;", '\U000002D8'}, + {"brvbar;", '\U000000A6'}, + {"bscr;", '\U0001D4B7'}, + {"bsemi;", '\U0000204F'}, + {"bsim;", '\U0000223D'}, + {"bsime;", '\U000022CD'}, + {"bsol;", '\U0000005C'}, + {"bsolb;", '\U000029C5'}, + {"bsolhsub;", '\U000027C8'}, + {"bull;", '\U00002022'}, + {"bullet;", '\U00002022'}, + {"bump;", '\U0000224E'}, + {"bumpE;", '\U00002AAE'}, + {"bumpe;", '\U0000224F'}, + {"bumpeq;", '\U0000224F'}, + {"cacute;", '\U00000107'}, + {"cap;", '\U00002229'}, + {"capand;", '\U00002A44'}, + {"capbrcup;", '\U00002A49'}, + {"capcap;", '\U00002A4B'}, + {"capcup;", '\U00002A47'}, + {"capdot;", '\U00002A40'}, + {"caret;", '\U00002041'}, + {"caron;", '\U000002C7'}, + {"ccaps;", '\U00002A4D'}, + {"ccaron;", '\U0000010D'}, + {"ccedil;", '\U000000E7'}, + {"ccirc;", '\U00000109'}, + {"ccups;", '\U00002A4C'}, + {"ccupssm;", '\U00002A50'}, + {"cdot;", '\U0000010B'}, + {"cedil;", '\U000000B8'}, + {"cemptyv;", '\U000029B2'}, + {"cent;", '\U000000A2'}, + {"centerdot;", '\U000000B7'}, + {"cfr;", '\U0001D520'}, + {"chcy;", '\U00000447'}, + {"check;", '\U00002713'}, + {"checkmark;", '\U00002713'}, + {"chi;", '\U000003C7'}, + {"cir;", '\U000025CB'}, + {"cirE;", '\U000029C3'}, + {"circ;", '\U000002C6'}, + {"circeq;", '\U00002257'}, + {"circlearrowleft;", '\U000021BA'}, + {"circlearrowright;", '\U000021BB'}, + {"circledR;", '\U000000AE'}, + {"circledS;", '\U000024C8'}, + {"circledast;", '\U0000229B'}, + {"circledcirc;", '\U0000229A'}, + {"circleddash;", '\U0000229D'}, + {"cire;", '\U00002257'}, + {"cirfnint;", '\U00002A10'}, + {"cirmid;", '\U00002AEF'}, + {"cirscir;", '\U000029C2'}, + {"clubs;", '\U00002663'}, + {"clubsuit;", '\U00002663'}, + {"colon;", '\U0000003A'}, + {"colone;", '\U00002254'}, + {"coloneq;", '\U00002254'}, + {"comma;", '\U0000002C'}, + {"commat;", '\U00000040'}, + {"comp;", '\U00002201'}, + {"compfn;", '\U00002218'}, + {"complement;", '\U00002201'}, + {"complexes;", '\U00002102'}, + {"cong;", '\U00002245'}, + {"congdot;", '\U00002A6D'}, + {"conint;", '\U0000222E'}, + {"copf;", '\U0001D554'}, + {"coprod;", '\U00002210'}, + {"copy;", '\U000000A9'}, + {"copysr;", '\U00002117'}, + {"crarr;", '\U000021B5'}, + {"cross;", '\U00002717'}, + {"cscr;", '\U0001D4B8'}, + {"csub;", '\U00002ACF'}, + {"csube;", '\U00002AD1'}, + {"csup;", '\U00002AD0'}, + {"csupe;", '\U00002AD2'}, + {"ctdot;", '\U000022EF'}, + {"cudarrl;", '\U00002938'}, + {"cudarrr;", '\U00002935'}, + {"cuepr;", '\U000022DE'}, + {"cuesc;", '\U000022DF'}, + {"cularr;", '\U000021B6'}, + {"cularrp;", '\U0000293D'}, + {"cup;", '\U0000222A'}, + {"cupbrcap;", '\U00002A48'}, + {"cupcap;", '\U00002A46'}, + {"cupcup;", '\U00002A4A'}, + {"cupdot;", '\U0000228D'}, + {"cupor;", '\U00002A45'}, + {"curarr;", '\U000021B7'}, + {"curarrm;", '\U0000293C'}, + {"curlyeqprec;", '\U000022DE'}, + {"curlyeqsucc;", '\U000022DF'}, + {"curlyvee;", '\U000022CE'}, + {"curlywedge;", '\U000022CF'}, + {"curren;", '\U000000A4'}, + {"curvearrowleft;", '\U000021B6'}, + {"curvearrowright;", '\U000021B7'}, + {"cuvee;", '\U000022CE'}, + {"cuwed;", '\U000022CF'}, + {"cwconint;", '\U00002232'}, + {"cwint;", '\U00002231'}, + {"cylcty;", '\U0000232D'}, + {"dArr;", '\U000021D3'}, + {"dHar;", '\U00002965'}, + {"dagger;", '\U00002020'}, + {"daleth;", '\U00002138'}, + {"darr;", '\U00002193'}, + {"dash;", '\U00002010'}, + {"dashv;", '\U000022A3'}, + {"dbkarow;", '\U0000290F'}, + {"dblac;", '\U000002DD'}, + {"dcaron;", '\U0000010F'}, + {"dcy;", '\U00000434'}, + {"dd;", '\U00002146'}, + {"ddagger;", '\U00002021'}, + {"ddarr;", '\U000021CA'}, + {"ddotseq;", '\U00002A77'}, + {"deg;", '\U000000B0'}, + {"delta;", '\U000003B4'}, + {"demptyv;", '\U000029B1'}, + {"dfisht;", '\U0000297F'}, + {"dfr;", '\U0001D521'}, + {"dharl;", '\U000021C3'}, + {"dharr;", '\U000021C2'}, + {"diam;", '\U000022C4'}, + {"diamond;", '\U000022C4'}, + {"diamondsuit;", '\U00002666'}, + {"diams;", '\U00002666'}, + {"die;", '\U000000A8'}, + {"digamma;", '\U000003DD'}, + {"disin;", '\U000022F2'}, + {"div;", '\U000000F7'}, + {"divide;", '\U000000F7'}, + {"divideontimes;", '\U000022C7'}, + {"divonx;", '\U000022C7'}, + {"djcy;", '\U00000452'}, + {"dlcorn;", '\U0000231E'}, + {"dlcrop;", '\U0000230D'}, + {"dollar;", '\U00000024'}, + {"dopf;", '\U0001D555'}, + {"dot;", '\U000002D9'}, + {"doteq;", '\U00002250'}, + {"doteqdot;", '\U00002251'}, + {"dotminus;", '\U00002238'}, + {"dotplus;", '\U00002214'}, + {"dotsquare;", '\U000022A1'}, + {"doublebarwedge;", '\U00002306'}, + {"downarrow;", '\U00002193'}, + {"downdownarrows;", '\U000021CA'}, + {"downharpoonleft;", '\U000021C3'}, + {"downharpoonright;", '\U000021C2'}, + {"drbkarow;", '\U00002910'}, + {"drcorn;", '\U0000231F'}, + {"drcrop;", '\U0000230C'}, + {"dscr;", '\U0001D4B9'}, + {"dscy;", '\U00000455'}, + {"dsol;", '\U000029F6'}, + {"dstrok;", '\U00000111'}, + {"dtdot;", '\U000022F1'}, + {"dtri;", '\U000025BF'}, + {"dtrif;", '\U000025BE'}, + {"duarr;", '\U000021F5'}, + {"duhar;", '\U0000296F'}, + {"dwangle;", '\U000029A6'}, + {"dzcy;", '\U0000045F'}, + {"dzigrarr;", '\U000027FF'}, + {"eDDot;", '\U00002A77'}, + {"eDot;", '\U00002251'}, + {"eacute;", '\U000000E9'}, + {"easter;", '\U00002A6E'}, + {"ecaron;", '\U0000011B'}, + {"ecir;", '\U00002256'}, + {"ecirc;", '\U000000EA'}, + {"ecolon;", '\U00002255'}, + {"ecy;", '\U0000044D'}, + {"edot;", '\U00000117'}, + {"ee;", '\U00002147'}, + {"efDot;", '\U00002252'}, + {"efr;", '\U0001D522'}, + {"eg;", '\U00002A9A'}, + {"egrave;", '\U000000E8'}, + {"egs;", '\U00002A96'}, + {"egsdot;", '\U00002A98'}, + {"el;", '\U00002A99'}, + {"elinters;", '\U000023E7'}, + {"ell;", '\U00002113'}, + {"els;", '\U00002A95'}, + {"elsdot;", '\U00002A97'}, + {"emacr;", '\U00000113'}, + {"empty;", '\U00002205'}, + {"emptyset;", '\U00002205'}, + {"emptyv;", '\U00002205'}, + {"emsp;", '\U00002003'}, + {"emsp13;", '\U00002004'}, + {"emsp14;", '\U00002005'}, + {"eng;", '\U0000014B'}, + {"ensp;", '\U00002002'}, + {"eogon;", '\U00000119'}, + {"eopf;", '\U0001D556'}, + {"epar;", '\U000022D5'}, + {"eparsl;", '\U000029E3'}, + {"eplus;", '\U00002A71'}, + {"epsi;", '\U000003B5'}, + {"epsilon;", '\U000003B5'}, + {"epsiv;", '\U000003F5'}, + {"eqcirc;", '\U00002256'}, + {"eqcolon;", '\U00002255'}, + {"eqsim;", '\U00002242'}, + {"eqslantgtr;", '\U00002A96'}, + {"eqslantless;", '\U00002A95'}, + {"equals;", '\U0000003D'}, + {"equest;", '\U0000225F'}, + {"equiv;", '\U00002261'}, + {"equivDD;", '\U00002A78'}, + {"eqvparsl;", '\U000029E5'}, + {"erDot;", '\U00002253'}, + {"erarr;", '\U00002971'}, + {"escr;", '\U0000212F'}, + {"esdot;", '\U00002250'}, + {"esim;", '\U00002242'}, + {"eta;", '\U000003B7'}, + {"eth;", '\U000000F0'}, + {"euml;", '\U000000EB'}, + {"euro;", '\U000020AC'}, + {"excl;", '\U00000021'}, + {"exist;", '\U00002203'}, + {"expectation;", '\U00002130'}, + {"exponentiale;", '\U00002147'}, + {"fallingdotseq;", '\U00002252'}, + {"fcy;", '\U00000444'}, + {"female;", '\U00002640'}, + {"ffilig;", '\U0000FB03'}, + {"fflig;", '\U0000FB00'}, + {"ffllig;", '\U0000FB04'}, + {"ffr;", '\U0001D523'}, + {"filig;", '\U0000FB01'}, + {"flat;", '\U0000266D'}, + {"fllig;", '\U0000FB02'}, + {"fltns;", '\U000025B1'}, + {"fnof;", '\U00000192'}, + {"fopf;", '\U0001D557'}, + {"forall;", '\U00002200'}, + {"fork;", '\U000022D4'}, + {"forkv;", '\U00002AD9'}, + {"fpartint;", '\U00002A0D'}, + {"frac12;", '\U000000BD'}, + {"frac13;", '\U00002153'}, + {"frac14;", '\U000000BC'}, + {"frac15;", '\U00002155'}, + {"frac16;", '\U00002159'}, + {"frac18;", '\U0000215B'}, + {"frac23;", '\U00002154'}, + {"frac25;", '\U00002156'}, + {"frac34;", '\U000000BE'}, + {"frac35;", '\U00002157'}, + {"frac38;", '\U0000215C'}, + {"frac45;", '\U00002158'}, + {"frac56;", '\U0000215A'}, + {"frac58;", '\U0000215D'}, + {"frac78;", '\U0000215E'}, + {"frasl;", '\U00002044'}, + {"frown;", '\U00002322'}, + {"fscr;", '\U0001D4BB'}, + {"gE;", '\U00002267'}, + {"gEl;", '\U00002A8C'}, + {"gacute;", '\U000001F5'}, + {"gamma;", '\U000003B3'}, + {"gammad;", '\U000003DD'}, + {"gap;", '\U00002A86'}, + {"gbreve;", '\U0000011F'}, + {"gcirc;", '\U0000011D'}, + {"gcy;", '\U00000433'}, + {"gdot;", '\U00000121'}, + {"ge;", '\U00002265'}, + {"gel;", '\U000022DB'}, + {"geq;", '\U00002265'}, + {"geqq;", '\U00002267'}, + {"geqslant;", '\U00002A7E'}, + {"ges;", '\U00002A7E'}, + {"gescc;", '\U00002AA9'}, + {"gesdot;", '\U00002A80'}, + {"gesdoto;", '\U00002A82'}, + {"gesdotol;", '\U00002A84'}, + {"gesles;", '\U00002A94'}, + {"gfr;", '\U0001D524'}, + {"gg;", '\U0000226B'}, + {"ggg;", '\U000022D9'}, + {"gimel;", '\U00002137'}, + {"gjcy;", '\U00000453'}, + {"gl;", '\U00002277'}, + {"glE;", '\U00002A92'}, + {"gla;", '\U00002AA5'}, + {"glj;", '\U00002AA4'}, + {"gnE;", '\U00002269'}, + {"gnap;", '\U00002A8A'}, + {"gnapprox;", '\U00002A8A'}, + {"gne;", '\U00002A88'}, + {"gneq;", '\U00002A88'}, + {"gneqq;", '\U00002269'}, + {"gnsim;", '\U000022E7'}, + {"gopf;", '\U0001D558'}, + {"grave;", '\U00000060'}, + {"gscr;", '\U0000210A'}, + {"gsim;", '\U00002273'}, + {"gsime;", '\U00002A8E'}, + {"gsiml;", '\U00002A90'}, + {"gt;", '\U0000003E'}, + {"gtcc;", '\U00002AA7'}, + {"gtcir;", '\U00002A7A'}, + {"gtdot;", '\U000022D7'}, + {"gtlPar;", '\U00002995'}, + {"gtquest;", '\U00002A7C'}, + {"gtrapprox;", '\U00002A86'}, + {"gtrarr;", '\U00002978'}, + {"gtrdot;", '\U000022D7'}, + {"gtreqless;", '\U000022DB'}, + {"gtreqqless;", '\U00002A8C'}, + {"gtrless;", '\U00002277'}, + {"gtrsim;", '\U00002273'}, + {"hArr;", '\U000021D4'}, + {"hairsp;", '\U0000200A'}, + {"half;", '\U000000BD'}, + {"hamilt;", '\U0000210B'}, + {"hardcy;", '\U0000044A'}, + {"harr;", '\U00002194'}, + {"harrcir;", '\U00002948'}, + {"harrw;", '\U000021AD'}, + {"hbar;", '\U0000210F'}, + {"hcirc;", '\U00000125'}, + {"hearts;", '\U00002665'}, + {"heartsuit;", '\U00002665'}, + {"hellip;", '\U00002026'}, + {"hercon;", '\U000022B9'}, + {"hfr;", '\U0001D525'}, + {"hksearow;", '\U00002925'}, + {"hkswarow;", '\U00002926'}, + {"hoarr;", '\U000021FF'}, + {"homtht;", '\U0000223B'}, + {"hookleftarrow;", '\U000021A9'}, + {"hookrightarrow;", '\U000021AA'}, + {"hopf;", '\U0001D559'}, + {"horbar;", '\U00002015'}, + {"hscr;", '\U0001D4BD'}, + {"hslash;", '\U0000210F'}, + {"hstrok;", '\U00000127'}, + {"hybull;", '\U00002043'}, + {"hyphen;", '\U00002010'}, + {"iacute;", '\U000000ED'}, + {"ic;", '\U00002063'}, + {"icirc;", '\U000000EE'}, + {"icy;", '\U00000438'}, + {"iecy;", '\U00000435'}, + {"iexcl;", '\U000000A1'}, + {"iff;", '\U000021D4'}, + {"ifr;", '\U0001D526'}, + {"igrave;", '\U000000EC'}, + {"ii;", '\U00002148'}, + {"iiiint;", '\U00002A0C'}, + {"iiint;", '\U0000222D'}, + {"iinfin;", '\U000029DC'}, + {"iiota;", '\U00002129'}, + {"ijlig;", '\U00000133'}, + {"imacr;", '\U0000012B'}, + {"image;", '\U00002111'}, + {"imagline;", '\U00002110'}, + {"imagpart;", '\U00002111'}, + {"imath;", '\U00000131'}, + {"imof;", '\U000022B7'}, + {"imped;", '\U000001B5'}, + {"in;", '\U00002208'}, + {"incare;", '\U00002105'}, + {"infin;", '\U0000221E'}, + {"infintie;", '\U000029DD'}, + {"inodot;", '\U00000131'}, + {"int;", '\U0000222B'}, + {"intcal;", '\U000022BA'}, + {"integers;", '\U00002124'}, + {"intercal;", '\U000022BA'}, + {"intlarhk;", '\U00002A17'}, + {"intprod;", '\U00002A3C'}, + {"iocy;", '\U00000451'}, + {"iogon;", '\U0000012F'}, + {"iopf;", '\U0001D55A'}, + {"iota;", '\U000003B9'}, + {"iprod;", '\U00002A3C'}, + {"iquest;", '\U000000BF'}, + {"iscr;", '\U0001D4BE'}, + {"isin;", '\U00002208'}, + {"isinE;", '\U000022F9'}, + {"isindot;", '\U000022F5'}, + {"isins;", '\U000022F4'}, + {"isinsv;", '\U000022F3'}, + {"isinv;", '\U00002208'}, + {"it;", '\U00002062'}, + {"itilde;", '\U00000129'}, + {"iukcy;", '\U00000456'}, + {"iuml;", '\U000000EF'}, + {"jcirc;", '\U00000135'}, + {"jcy;", '\U00000439'}, + {"jfr;", '\U0001D527'}, + {"jmath;", '\U00000237'}, + {"jopf;", '\U0001D55B'}, + {"jscr;", '\U0001D4BF'}, + {"jsercy;", '\U00000458'}, + {"jukcy;", '\U00000454'}, + {"kappa;", '\U000003BA'}, + {"kappav;", '\U000003F0'}, + {"kcedil;", '\U00000137'}, + {"kcy;", '\U0000043A'}, + {"kfr;", '\U0001D528'}, + {"kgreen;", '\U00000138'}, + {"khcy;", '\U00000445'}, + {"kjcy;", '\U0000045C'}, + {"kopf;", '\U0001D55C'}, + {"kscr;", '\U0001D4C0'}, + {"lAarr;", '\U000021DA'}, + {"lArr;", '\U000021D0'}, + {"lAtail;", '\U0000291B'}, + {"lBarr;", '\U0000290E'}, + {"lE;", '\U00002266'}, + {"lEg;", '\U00002A8B'}, + {"lHar;", '\U00002962'}, + {"lacute;", '\U0000013A'}, + {"laemptyv;", '\U000029B4'}, + {"lagran;", '\U00002112'}, + {"lambda;", '\U000003BB'}, + {"lang;", '\U000027E8'}, + {"langd;", '\U00002991'}, + {"langle;", '\U000027E8'}, + {"lap;", '\U00002A85'}, + {"laquo;", '\U000000AB'}, + {"larr;", '\U00002190'}, + {"larrb;", '\U000021E4'}, + {"larrbfs;", '\U0000291F'}, + {"larrfs;", '\U0000291D'}, + {"larrhk;", '\U000021A9'}, + {"larrlp;", '\U000021AB'}, + {"larrpl;", '\U00002939'}, + {"larrsim;", '\U00002973'}, + {"larrtl;", '\U000021A2'}, + {"lat;", '\U00002AAB'}, + {"latail;", '\U00002919'}, + {"late;", '\U00002AAD'}, + {"lbarr;", '\U0000290C'}, + {"lbbrk;", '\U00002772'}, + {"lbrace;", '\U0000007B'}, + {"lbrack;", '\U0000005B'}, + {"lbrke;", '\U0000298B'}, + {"lbrksld;", '\U0000298F'}, + {"lbrkslu;", '\U0000298D'}, + {"lcaron;", '\U0000013E'}, + {"lcedil;", '\U0000013C'}, + {"lceil;", '\U00002308'}, + {"lcub;", '\U0000007B'}, + {"lcy;", '\U0000043B'}, + {"ldca;", '\U00002936'}, + {"ldquo;", '\U0000201C'}, + {"ldquor;", '\U0000201E'}, + {"ldrdhar;", '\U00002967'}, + {"ldrushar;", '\U0000294B'}, + {"ldsh;", '\U000021B2'}, + {"le;", '\U00002264'}, + {"leftarrow;", '\U00002190'}, + {"leftarrowtail;", '\U000021A2'}, + {"leftharpoondown;", '\U000021BD'}, + {"leftharpoonup;", '\U000021BC'}, + {"leftleftarrows;", '\U000021C7'}, + {"leftrightarrow;", '\U00002194'}, + {"leftrightarrows;", '\U000021C6'}, + {"leftrightharpoons;", '\U000021CB'}, + {"leftrightsquigarrow;", '\U000021AD'}, + {"leftthreetimes;", '\U000022CB'}, + {"leg;", '\U000022DA'}, + {"leq;", '\U00002264'}, + {"leqq;", '\U00002266'}, + {"leqslant;", '\U00002A7D'}, + {"les;", '\U00002A7D'}, + {"lescc;", '\U00002AA8'}, + {"lesdot;", '\U00002A7F'}, + {"lesdoto;", '\U00002A81'}, + {"lesdotor;", '\U00002A83'}, + {"lesges;", '\U00002A93'}, + {"lessapprox;", '\U00002A85'}, + {"lessdot;", '\U000022D6'}, + {"lesseqgtr;", '\U000022DA'}, + {"lesseqqgtr;", '\U00002A8B'}, + {"lessgtr;", '\U00002276'}, + {"lesssim;", '\U00002272'}, + {"lfisht;", '\U0000297C'}, + {"lfloor;", '\U0000230A'}, + {"lfr;", '\U0001D529'}, + {"lg;", '\U00002276'}, + {"lgE;", '\U00002A91'}, + {"lhard;", '\U000021BD'}, + {"lharu;", '\U000021BC'}, + {"lharul;", '\U0000296A'}, + {"lhblk;", '\U00002584'}, + {"ljcy;", '\U00000459'}, + {"ll;", '\U0000226A'}, + {"llarr;", '\U000021C7'}, + {"llcorner;", '\U0000231E'}, + {"llhard;", '\U0000296B'}, + {"lltri;", '\U000025FA'}, + {"lmidot;", '\U00000140'}, + {"lmoust;", '\U000023B0'}, + {"lmoustache;", '\U000023B0'}, + {"lnE;", '\U00002268'}, + {"lnap;", '\U00002A89'}, + {"lnapprox;", '\U00002A89'}, + {"lne;", '\U00002A87'}, + {"lneq;", '\U00002A87'}, + {"lneqq;", '\U00002268'}, + {"lnsim;", '\U000022E6'}, + {"loang;", '\U000027EC'}, + {"loarr;", '\U000021FD'}, + {"lobrk;", '\U000027E6'}, + {"longleftarrow;", '\U000027F5'}, + {"longleftrightarrow;", '\U000027F7'}, + {"longmapsto;", '\U000027FC'}, + {"longrightarrow;", '\U000027F6'}, + {"looparrowleft;", '\U000021AB'}, + {"looparrowright;", '\U000021AC'}, + {"lopar;", '\U00002985'}, + {"lopf;", '\U0001D55D'}, + {"loplus;", '\U00002A2D'}, + {"lotimes;", '\U00002A34'}, + {"lowast;", '\U00002217'}, + {"lowbar;", '\U0000005F'}, + {"loz;", '\U000025CA'}, + {"lozenge;", '\U000025CA'}, + {"lozf;", '\U000029EB'}, + {"lpar;", '\U00000028'}, + {"lparlt;", '\U00002993'}, + {"lrarr;", '\U000021C6'}, + {"lrcorner;", '\U0000231F'}, + {"lrhar;", '\U000021CB'}, + {"lrhard;", '\U0000296D'}, + {"lrm;", '\U0000200E'}, + {"lrtri;", '\U000022BF'}, + {"lsaquo;", '\U00002039'}, + {"lscr;", '\U0001D4C1'}, + {"lsh;", '\U000021B0'}, + {"lsim;", '\U00002272'}, + {"lsime;", '\U00002A8D'}, + {"lsimg;", '\U00002A8F'}, + {"lsqb;", '\U0000005B'}, + {"lsquo;", '\U00002018'}, + {"lsquor;", '\U0000201A'}, + {"lstrok;", '\U00000142'}, + {"lt;", '\U0000003C'}, + {"ltcc;", '\U00002AA6'}, + {"ltcir;", '\U00002A79'}, + {"ltdot;", '\U000022D6'}, + {"lthree;", '\U000022CB'}, + {"ltimes;", '\U000022C9'}, + {"ltlarr;", '\U00002976'}, + {"ltquest;", '\U00002A7B'}, + {"ltrPar;", '\U00002996'}, + {"ltri;", '\U000025C3'}, + {"ltrie;", '\U000022B4'}, + {"ltrif;", '\U000025C2'}, + {"lurdshar;", '\U0000294A'}, + {"luruhar;", '\U00002966'}, + {"mDDot;", '\U0000223A'}, + {"macr;", '\U000000AF'}, + {"male;", '\U00002642'}, + {"malt;", '\U00002720'}, + {"maltese;", '\U00002720'}, + {"map;", '\U000021A6'}, + {"mapsto;", '\U000021A6'}, + {"mapstodown;", '\U000021A7'}, + {"mapstoleft;", '\U000021A4'}, + {"mapstoup;", '\U000021A5'}, + {"marker;", '\U000025AE'}, + {"mcomma;", '\U00002A29'}, + {"mcy;", '\U0000043C'}, + {"mdash;", '\U00002014'}, + {"measuredangle;", '\U00002221'}, + {"mfr;", '\U0001D52A'}, + {"mho;", '\U00002127'}, + {"micro;", '\U000000B5'}, + {"mid;", '\U00002223'}, + {"midast;", '\U0000002A'}, + {"midcir;", '\U00002AF0'}, + {"middot;", '\U000000B7'}, + {"minus;", '\U00002212'}, + {"minusb;", '\U0000229F'}, + {"minusd;", '\U00002238'}, + {"minusdu;", '\U00002A2A'}, + {"mlcp;", '\U00002ADB'}, + {"mldr;", '\U00002026'}, + {"mnplus;", '\U00002213'}, + {"models;", '\U000022A7'}, + {"mopf;", '\U0001D55E'}, + {"mp;", '\U00002213'}, + {"mscr;", '\U0001D4C2'}, + {"mstpos;", '\U0000223E'}, + {"mu;", '\U000003BC'}, + {"multimap;", '\U000022B8'}, + {"mumap;", '\U000022B8'}, + {"nLeftarrow;", '\U000021CD'}, + {"nLeftrightarrow;", '\U000021CE'}, + {"nRightarrow;", '\U000021CF'}, + {"nVDash;", '\U000022AF'}, + {"nVdash;", '\U000022AE'}, + {"nabla;", '\U00002207'}, + {"nacute;", '\U00000144'}, + {"nap;", '\U00002249'}, + {"napos;", '\U00000149'}, + {"napprox;", '\U00002249'}, + {"natur;", '\U0000266E'}, + {"natural;", '\U0000266E'}, + {"naturals;", '\U00002115'}, + {"nbsp;", '\U000000A0'}, + {"ncap;", '\U00002A43'}, + {"ncaron;", '\U00000148'}, + {"ncedil;", '\U00000146'}, + {"ncong;", '\U00002247'}, + {"ncup;", '\U00002A42'}, + {"ncy;", '\U0000043D'}, + {"ndash;", '\U00002013'}, + {"ne;", '\U00002260'}, + {"neArr;", '\U000021D7'}, + {"nearhk;", '\U00002924'}, + {"nearr;", '\U00002197'}, + {"nearrow;", '\U00002197'}, + {"nequiv;", '\U00002262'}, + {"nesear;", '\U00002928'}, + {"nexist;", '\U00002204'}, + {"nexists;", '\U00002204'}, + {"nfr;", '\U0001D52B'}, + {"nge;", '\U00002271'}, + {"ngeq;", '\U00002271'}, + {"ngsim;", '\U00002275'}, + {"ngt;", '\U0000226F'}, + {"ngtr;", '\U0000226F'}, + {"nhArr;", '\U000021CE'}, + {"nharr;", '\U000021AE'}, + {"nhpar;", '\U00002AF2'}, + {"ni;", '\U0000220B'}, + {"nis;", '\U000022FC'}, + {"nisd;", '\U000022FA'}, + {"niv;", '\U0000220B'}, + {"njcy;", '\U0000045A'}, + {"nlArr;", '\U000021CD'}, + {"nlarr;", '\U0000219A'}, + {"nldr;", '\U00002025'}, + {"nle;", '\U00002270'}, + {"nleftarrow;", '\U0000219A'}, + {"nleftrightarrow;", '\U000021AE'}, + {"nleq;", '\U00002270'}, + {"nless;", '\U0000226E'}, + {"nlsim;", '\U00002274'}, + {"nlt;", '\U0000226E'}, + {"nltri;", '\U000022EA'}, + {"nltrie;", '\U000022EC'}, + {"nmid;", '\U00002224'}, + {"nopf;", '\U0001D55F'}, + {"not;", '\U000000AC'}, + {"notin;", '\U00002209'}, + {"notinva;", '\U00002209'}, + {"notinvb;", '\U000022F7'}, + {"notinvc;", '\U000022F6'}, + {"notni;", '\U0000220C'}, + {"notniva;", '\U0000220C'}, + {"notnivb;", '\U000022FE'}, + {"notnivc;", '\U000022FD'}, + {"npar;", '\U00002226'}, + {"nparallel;", '\U00002226'}, + {"npolint;", '\U00002A14'}, + {"npr;", '\U00002280'}, + {"nprcue;", '\U000022E0'}, + {"nprec;", '\U00002280'}, + {"nrArr;", '\U000021CF'}, + {"nrarr;", '\U0000219B'}, + {"nrightarrow;", '\U0000219B'}, + {"nrtri;", '\U000022EB'}, + {"nrtrie;", '\U000022ED'}, + {"nsc;", '\U00002281'}, + {"nsccue;", '\U000022E1'}, + {"nscr;", '\U0001D4C3'}, + {"nshortmid;", '\U00002224'}, + {"nshortparallel;", '\U00002226'}, + {"nsim;", '\U00002241'}, + {"nsime;", '\U00002244'}, + {"nsimeq;", '\U00002244'}, + {"nsmid;", '\U00002224'}, + {"nspar;", '\U00002226'}, + {"nsqsube;", '\U000022E2'}, + {"nsqsupe;", '\U000022E3'}, + {"nsub;", '\U00002284'}, + {"nsube;", '\U00002288'}, + {"nsubseteq;", '\U00002288'}, + {"nsucc;", '\U00002281'}, + {"nsup;", '\U00002285'}, + {"nsupe;", '\U00002289'}, + {"nsupseteq;", '\U00002289'}, + {"ntgl;", '\U00002279'}, + {"ntilde;", '\U000000F1'}, + {"ntlg;", '\U00002278'}, + {"ntriangleleft;", '\U000022EA'}, + {"ntrianglelefteq;", '\U000022EC'}, + {"ntriangleright;", '\U000022EB'}, + {"ntrianglerighteq;", '\U000022ED'}, + {"nu;", '\U000003BD'}, + {"num;", '\U00000023'}, + {"numero;", '\U00002116'}, + {"numsp;", '\U00002007'}, + {"nvDash;", '\U000022AD'}, + {"nvHarr;", '\U00002904'}, + {"nvdash;", '\U000022AC'}, + {"nvinfin;", '\U000029DE'}, + {"nvlArr;", '\U00002902'}, + {"nvrArr;", '\U00002903'}, + {"nwArr;", '\U000021D6'}, + {"nwarhk;", '\U00002923'}, + {"nwarr;", '\U00002196'}, + {"nwarrow;", '\U00002196'}, + {"nwnear;", '\U00002927'}, + {"oS;", '\U000024C8'}, + {"oacute;", '\U000000F3'}, + {"oast;", '\U0000229B'}, + {"ocir;", '\U0000229A'}, + {"ocirc;", '\U000000F4'}, + {"ocy;", '\U0000043E'}, + {"odash;", '\U0000229D'}, + {"odblac;", '\U00000151'}, + {"odiv;", '\U00002A38'}, + {"odot;", '\U00002299'}, + {"odsold;", '\U000029BC'}, + {"oelig;", '\U00000153'}, + {"ofcir;", '\U000029BF'}, + {"ofr;", '\U0001D52C'}, + {"ogon;", '\U000002DB'}, + {"ograve;", '\U000000F2'}, + {"ogt;", '\U000029C1'}, + {"ohbar;", '\U000029B5'}, + {"ohm;", '\U000003A9'}, + {"oint;", '\U0000222E'}, + {"olarr;", '\U000021BA'}, + {"olcir;", '\U000029BE'}, + {"olcross;", '\U000029BB'}, + {"oline;", '\U0000203E'}, + {"olt;", '\U000029C0'}, + {"omacr;", '\U0000014D'}, + {"omega;", '\U000003C9'}, + {"omicron;", '\U000003BF'}, + {"omid;", '\U000029B6'}, + {"ominus;", '\U00002296'}, + {"oopf;", '\U0001D560'}, + {"opar;", '\U000029B7'}, + {"operp;", '\U000029B9'}, + {"oplus;", '\U00002295'}, + {"or;", '\U00002228'}, + {"orarr;", '\U000021BB'}, + {"ord;", '\U00002A5D'}, + {"order;", '\U00002134'}, + {"orderof;", '\U00002134'}, + {"ordf;", '\U000000AA'}, + {"ordm;", '\U000000BA'}, + {"origof;", '\U000022B6'}, + {"oror;", '\U00002A56'}, + {"orslope;", '\U00002A57'}, + {"orv;", '\U00002A5B'}, + {"oscr;", '\U00002134'}, + {"oslash;", '\U000000F8'}, + {"osol;", '\U00002298'}, + {"otilde;", '\U000000F5'}, + {"otimes;", '\U00002297'}, + {"otimesas;", '\U00002A36'}, + {"ouml;", '\U000000F6'}, + {"ovbar;", '\U0000233D'}, + {"par;", '\U00002225'}, + {"para;", '\U000000B6'}, + {"parallel;", '\U00002225'}, + {"parsim;", '\U00002AF3'}, + {"parsl;", '\U00002AFD'}, + {"part;", '\U00002202'}, + {"pcy;", '\U0000043F'}, + {"percnt;", '\U00000025'}, + {"period;", '\U0000002E'}, + {"permil;", '\U00002030'}, + {"perp;", '\U000022A5'}, + {"pertenk;", '\U00002031'}, + {"pfr;", '\U0001D52D'}, + {"phi;", '\U000003C6'}, + {"phiv;", '\U000003D5'}, + {"phmmat;", '\U00002133'}, + {"phone;", '\U0000260E'}, + {"pi;", '\U000003C0'}, + {"pitchfork;", '\U000022D4'}, + {"piv;", '\U000003D6'}, + {"planck;", '\U0000210F'}, + {"planckh;", '\U0000210E'}, + {"plankv;", '\U0000210F'}, + {"plus;", '\U0000002B'}, + {"plusacir;", '\U00002A23'}, + {"plusb;", '\U0000229E'}, + {"pluscir;", '\U00002A22'}, + {"plusdo;", '\U00002214'}, + {"plusdu;", '\U00002A25'}, + {"pluse;", '\U00002A72'}, + {"plusmn;", '\U000000B1'}, + {"plussim;", '\U00002A26'}, + {"plustwo;", '\U00002A27'}, + {"pm;", '\U000000B1'}, + {"pointint;", '\U00002A15'}, + {"popf;", '\U0001D561'}, + {"pound;", '\U000000A3'}, + {"pr;", '\U0000227A'}, + {"prE;", '\U00002AB3'}, + {"prap;", '\U00002AB7'}, + {"prcue;", '\U0000227C'}, + {"pre;", '\U00002AAF'}, + {"prec;", '\U0000227A'}, + {"precapprox;", '\U00002AB7'}, + {"preccurlyeq;", '\U0000227C'}, + {"preceq;", '\U00002AAF'}, + {"precnapprox;", '\U00002AB9'}, + {"precneqq;", '\U00002AB5'}, + {"precnsim;", '\U000022E8'}, + {"precsim;", '\U0000227E'}, + {"prime;", '\U00002032'}, + {"primes;", '\U00002119'}, + {"prnE;", '\U00002AB5'}, + {"prnap;", '\U00002AB9'}, + {"prnsim;", '\U000022E8'}, + {"prod;", '\U0000220F'}, + {"profalar;", '\U0000232E'}, + {"profline;", '\U00002312'}, + {"profsurf;", '\U00002313'}, + {"prop;", '\U0000221D'}, + {"propto;", '\U0000221D'}, + {"prsim;", '\U0000227E'}, + {"prurel;", '\U000022B0'}, + {"pscr;", '\U0001D4C5'}, + {"psi;", '\U000003C8'}, + {"puncsp;", '\U00002008'}, + {"qfr;", '\U0001D52E'}, + {"qint;", '\U00002A0C'}, + {"qopf;", '\U0001D562'}, + {"qprime;", '\U00002057'}, + {"qscr;", '\U0001D4C6'}, + {"quaternions;", '\U0000210D'}, + {"quatint;", '\U00002A16'}, + {"quest;", '\U0000003F'}, + {"questeq;", '\U0000225F'}, + {"quot;", '\U00000022'}, + {"rAarr;", '\U000021DB'}, + {"rArr;", '\U000021D2'}, + {"rAtail;", '\U0000291C'}, + {"rBarr;", '\U0000290F'}, + {"rHar;", '\U00002964'}, + {"racute;", '\U00000155'}, + {"radic;", '\U0000221A'}, + {"raemptyv;", '\U000029B3'}, + {"rang;", '\U000027E9'}, + {"rangd;", '\U00002992'}, + {"range;", '\U000029A5'}, + {"rangle;", '\U000027E9'}, + {"raquo;", '\U000000BB'}, + {"rarr;", '\U00002192'}, + {"rarrap;", '\U00002975'}, + {"rarrb;", '\U000021E5'}, + {"rarrbfs;", '\U00002920'}, + {"rarrc;", '\U00002933'}, + {"rarrfs;", '\U0000291E'}, + {"rarrhk;", '\U000021AA'}, + {"rarrlp;", '\U000021AC'}, + {"rarrpl;", '\U00002945'}, + {"rarrsim;", '\U00002974'}, + {"rarrtl;", '\U000021A3'}, + {"rarrw;", '\U0000219D'}, + {"ratail;", '\U0000291A'}, + {"ratio;", '\U00002236'}, + {"rationals;", '\U0000211A'}, + {"rbarr;", '\U0000290D'}, + {"rbbrk;", '\U00002773'}, + {"rbrace;", '\U0000007D'}, + {"rbrack;", '\U0000005D'}, + {"rbrke;", '\U0000298C'}, + {"rbrksld;", '\U0000298E'}, + {"rbrkslu;", '\U00002990'}, + {"rcaron;", '\U00000159'}, + {"rcedil;", '\U00000157'}, + {"rceil;", '\U00002309'}, + {"rcub;", '\U0000007D'}, + {"rcy;", '\U00000440'}, + {"rdca;", '\U00002937'}, + {"rdldhar;", '\U00002969'}, + {"rdquo;", '\U0000201D'}, + {"rdquor;", '\U0000201D'}, + {"rdsh;", '\U000021B3'}, + {"real;", '\U0000211C'}, + {"realine;", '\U0000211B'}, + {"realpart;", '\U0000211C'}, + {"reals;", '\U0000211D'}, + {"rect;", '\U000025AD'}, + {"reg;", '\U000000AE'}, + {"rfisht;", '\U0000297D'}, + {"rfloor;", '\U0000230B'}, + {"rfr;", '\U0001D52F'}, + {"rhard;", '\U000021C1'}, + {"rharu;", '\U000021C0'}, + {"rharul;", '\U0000296C'}, + {"rho;", '\U000003C1'}, + {"rhov;", '\U000003F1'}, + {"rightarrow;", '\U00002192'}, + {"rightarrowtail;", '\U000021A3'}, + {"rightharpoondown;", '\U000021C1'}, + {"rightharpoonup;", '\U000021C0'}, + {"rightleftarrows;", '\U000021C4'}, + {"rightleftharpoons;", '\U000021CC'}, + {"rightrightarrows;", '\U000021C9'}, + {"rightsquigarrow;", '\U0000219D'}, + {"rightthreetimes;", '\U000022CC'}, + {"ring;", '\U000002DA'}, + {"risingdotseq;", '\U00002253'}, + {"rlarr;", '\U000021C4'}, + {"rlhar;", '\U000021CC'}, + {"rlm;", '\U0000200F'}, + {"rmoust;", '\U000023B1'}, + {"rmoustache;", '\U000023B1'}, + {"rnmid;", '\U00002AEE'}, + {"roang;", '\U000027ED'}, + {"roarr;", '\U000021FE'}, + {"robrk;", '\U000027E7'}, + {"ropar;", '\U00002986'}, + {"ropf;", '\U0001D563'}, + {"roplus;", '\U00002A2E'}, + {"rotimes;", '\U00002A35'}, + {"rpar;", '\U00000029'}, + {"rpargt;", '\U00002994'}, + {"rppolint;", '\U00002A12'}, + {"rrarr;", '\U000021C9'}, + {"rsaquo;", '\U0000203A'}, + {"rscr;", '\U0001D4C7'}, + {"rsh;", '\U000021B1'}, + {"rsqb;", '\U0000005D'}, + {"rsquo;", '\U00002019'}, + {"rsquor;", '\U00002019'}, + {"rthree;", '\U000022CC'}, + {"rtimes;", '\U000022CA'}, + {"rtri;", '\U000025B9'}, + {"rtrie;", '\U000022B5'}, + {"rtrif;", '\U000025B8'}, + {"rtriltri;", '\U000029CE'}, + {"ruluhar;", '\U00002968'}, + {"rx;", '\U0000211E'}, + {"sacute;", '\U0000015B'}, + {"sbquo;", '\U0000201A'}, + {"sc;", '\U0000227B'}, + {"scE;", '\U00002AB4'}, + {"scap;", '\U00002AB8'}, + {"scaron;", '\U00000161'}, + {"sccue;", '\U0000227D'}, + {"sce;", '\U00002AB0'}, + {"scedil;", '\U0000015F'}, + {"scirc;", '\U0000015D'}, + {"scnE;", '\U00002AB6'}, + {"scnap;", '\U00002ABA'}, + {"scnsim;", '\U000022E9'}, + {"scpolint;", '\U00002A13'}, + {"scsim;", '\U0000227F'}, + {"scy;", '\U00000441'}, + {"sdot;", '\U000022C5'}, + {"sdotb;", '\U000022A1'}, + {"sdote;", '\U00002A66'}, + {"seArr;", '\U000021D8'}, + {"searhk;", '\U00002925'}, + {"searr;", '\U00002198'}, + {"searrow;", '\U00002198'}, + {"sect;", '\U000000A7'}, + {"semi;", '\U0000003B'}, + {"seswar;", '\U00002929'}, + {"setminus;", '\U00002216'}, + {"setmn;", '\U00002216'}, + {"sext;", '\U00002736'}, + {"sfr;", '\U0001D530'}, + {"sfrown;", '\U00002322'}, + {"sharp;", '\U0000266F'}, + {"shchcy;", '\U00000449'}, + {"shcy;", '\U00000448'}, + {"shortmid;", '\U00002223'}, + {"shortparallel;", '\U00002225'}, + {"shy;", '\U000000AD'}, + {"sigma;", '\U000003C3'}, + {"sigmaf;", '\U000003C2'}, + {"sigmav;", '\U000003C2'}, + {"sim;", '\U0000223C'}, + {"simdot;", '\U00002A6A'}, + {"sime;", '\U00002243'}, + {"simeq;", '\U00002243'}, + {"simg;", '\U00002A9E'}, + {"simgE;", '\U00002AA0'}, + {"siml;", '\U00002A9D'}, + {"simlE;", '\U00002A9F'}, + {"simne;", '\U00002246'}, + {"simplus;", '\U00002A24'}, + {"simrarr;", '\U00002972'}, + {"slarr;", '\U00002190'}, + {"smallsetminus;", '\U00002216'}, + {"smashp;", '\U00002A33'}, + {"smeparsl;", '\U000029E4'}, + {"smid;", '\U00002223'}, + {"smile;", '\U00002323'}, + {"smt;", '\U00002AAA'}, + {"smte;", '\U00002AAC'}, + {"softcy;", '\U0000044C'}, + {"sol;", '\U0000002F'}, + {"solb;", '\U000029C4'}, + {"solbar;", '\U0000233F'}, + {"sopf;", '\U0001D564'}, + {"spades;", '\U00002660'}, + {"spadesuit;", '\U00002660'}, + {"spar;", '\U00002225'}, + {"sqcap;", '\U00002293'}, + {"sqcup;", '\U00002294'}, + {"sqsub;", '\U0000228F'}, + {"sqsube;", '\U00002291'}, + {"sqsubset;", '\U0000228F'}, + {"sqsubseteq;", '\U00002291'}, + {"sqsup;", '\U00002290'}, + {"sqsupe;", '\U00002292'}, + {"sqsupset;", '\U00002290'}, + {"sqsupseteq;", '\U00002292'}, + {"squ;", '\U000025A1'}, + {"square;", '\U000025A1'}, + {"squarf;", '\U000025AA'}, + {"squf;", '\U000025AA'}, + {"srarr;", '\U00002192'}, + {"sscr;", '\U0001D4C8'}, + {"ssetmn;", '\U00002216'}, + {"ssmile;", '\U00002323'}, + {"sstarf;", '\U000022C6'}, + {"star;", '\U00002606'}, + {"starf;", '\U00002605'}, + {"straightepsilon;", '\U000003F5'}, + {"straightphi;", '\U000003D5'}, + {"strns;", '\U000000AF'}, + {"sub;", '\U00002282'}, + {"subE;", '\U00002AC5'}, + {"subdot;", '\U00002ABD'}, + {"sube;", '\U00002286'}, + {"subedot;", '\U00002AC3'}, + {"submult;", '\U00002AC1'}, + {"subnE;", '\U00002ACB'}, + {"subne;", '\U0000228A'}, + {"subplus;", '\U00002ABF'}, + {"subrarr;", '\U00002979'}, + {"subset;", '\U00002282'}, + {"subseteq;", '\U00002286'}, + {"subseteqq;", '\U00002AC5'}, + {"subsetneq;", '\U0000228A'}, + {"subsetneqq;", '\U00002ACB'}, + {"subsim;", '\U00002AC7'}, + {"subsub;", '\U00002AD5'}, + {"subsup;", '\U00002AD3'}, + {"succ;", '\U0000227B'}, + {"succapprox;", '\U00002AB8'}, + {"succcurlyeq;", '\U0000227D'}, + {"succeq;", '\U00002AB0'}, + {"succnapprox;", '\U00002ABA'}, + {"succneqq;", '\U00002AB6'}, + {"succnsim;", '\U000022E9'}, + {"succsim;", '\U0000227F'}, + {"sum;", '\U00002211'}, + {"sung;", '\U0000266A'}, + {"sup;", '\U00002283'}, + {"sup1;", '\U000000B9'}, + {"sup2;", '\U000000B2'}, + {"sup3;", '\U000000B3'}, + {"supE;", '\U00002AC6'}, + {"supdot;", '\U00002ABE'}, + {"supdsub;", '\U00002AD8'}, + {"supe;", '\U00002287'}, + {"supedot;", '\U00002AC4'}, + {"suphsol;", '\U000027C9'}, + {"suphsub;", '\U00002AD7'}, + {"suplarr;", '\U0000297B'}, + {"supmult;", '\U00002AC2'}, + {"supnE;", '\U00002ACC'}, + {"supne;", '\U0000228B'}, + {"supplus;", '\U00002AC0'}, + {"supset;", '\U00002283'}, + {"supseteq;", '\U00002287'}, + {"supseteqq;", '\U00002AC6'}, + {"supsetneq;", '\U0000228B'}, + {"supsetneqq;", '\U00002ACC'}, + {"supsim;", '\U00002AC8'}, + {"supsub;", '\U00002AD4'}, + {"supsup;", '\U00002AD6'}, + {"swArr;", '\U000021D9'}, + {"swarhk;", '\U00002926'}, + {"swarr;", '\U00002199'}, + {"swarrow;", '\U00002199'}, + {"swnwar;", '\U0000292A'}, + {"szlig;", '\U000000DF'}, + {"target;", '\U00002316'}, + {"tau;", '\U000003C4'}, + {"tbrk;", '\U000023B4'}, + {"tcaron;", '\U00000165'}, + {"tcedil;", '\U00000163'}, + {"tcy;", '\U00000442'}, + {"tdot;", '\U000020DB'}, + {"telrec;", '\U00002315'}, + {"tfr;", '\U0001D531'}, + {"there4;", '\U00002234'}, + {"therefore;", '\U00002234'}, + {"theta;", '\U000003B8'}, + {"thetasym;", '\U000003D1'}, + {"thetav;", '\U000003D1'}, + {"thickapprox;", '\U00002248'}, + {"thicksim;", '\U0000223C'}, + {"thinsp;", '\U00002009'}, + {"thkap;", '\U00002248'}, + {"thksim;", '\U0000223C'}, + {"thorn;", '\U000000FE'}, + {"tilde;", '\U000002DC'}, + {"times;", '\U000000D7'}, + {"timesb;", '\U000022A0'}, + {"timesbar;", '\U00002A31'}, + {"timesd;", '\U00002A30'}, + {"tint;", '\U0000222D'}, + {"toea;", '\U00002928'}, + {"top;", '\U000022A4'}, + {"topbot;", '\U00002336'}, + {"topcir;", '\U00002AF1'}, + {"topf;", '\U0001D565'}, + {"topfork;", '\U00002ADA'}, + {"tosa;", '\U00002929'}, + {"tprime;", '\U00002034'}, + {"trade;", '\U00002122'}, + {"triangle;", '\U000025B5'}, + {"triangledown;", '\U000025BF'}, + {"triangleleft;", '\U000025C3'}, + {"trianglelefteq;", '\U000022B4'}, + {"triangleq;", '\U0000225C'}, + {"triangleright;", '\U000025B9'}, + {"trianglerighteq;", '\U000022B5'}, + {"tridot;", '\U000025EC'}, + {"trie;", '\U0000225C'}, + {"triminus;", '\U00002A3A'}, + {"triplus;", '\U00002A39'}, + {"trisb;", '\U000029CD'}, + {"tritime;", '\U00002A3B'}, + {"trpezium;", '\U000023E2'}, + {"tscr;", '\U0001D4C9'}, + {"tscy;", '\U00000446'}, + {"tshcy;", '\U0000045B'}, + {"tstrok;", '\U00000167'}, + {"twixt;", '\U0000226C'}, + {"twoheadleftarrow;", '\U0000219E'}, + {"twoheadrightarrow;", '\U000021A0'}, + {"uArr;", '\U000021D1'}, + {"uHar;", '\U00002963'}, + {"uacute;", '\U000000FA'}, + {"uarr;", '\U00002191'}, + {"ubrcy;", '\U0000045E'}, + {"ubreve;", '\U0000016D'}, + {"ucirc;", '\U000000FB'}, + {"ucy;", '\U00000443'}, + {"udarr;", '\U000021C5'}, + {"udblac;", '\U00000171'}, + {"udhar;", '\U0000296E'}, + {"ufisht;", '\U0000297E'}, + {"ufr;", '\U0001D532'}, + {"ugrave;", '\U000000F9'}, + {"uharl;", '\U000021BF'}, + {"uharr;", '\U000021BE'}, + {"uhblk;", '\U00002580'}, + {"ulcorn;", '\U0000231C'}, + {"ulcorner;", '\U0000231C'}, + {"ulcrop;", '\U0000230F'}, + {"ultri;", '\U000025F8'}, + {"umacr;", '\U0000016B'}, + {"uml;", '\U000000A8'}, + {"uogon;", '\U00000173'}, + {"uopf;", '\U0001D566'}, + {"uparrow;", '\U00002191'}, + {"updownarrow;", '\U00002195'}, + {"upharpoonleft;", '\U000021BF'}, + {"upharpoonright;", '\U000021BE'}, + {"uplus;", '\U0000228E'}, + {"upsi;", '\U000003C5'}, + {"upsih;", '\U000003D2'}, + {"upsilon;", '\U000003C5'}, + {"upuparrows;", '\U000021C8'}, + {"urcorn;", '\U0000231D'}, + {"urcorner;", '\U0000231D'}, + {"urcrop;", '\U0000230E'}, + {"uring;", '\U0000016F'}, + {"urtri;", '\U000025F9'}, + {"uscr;", '\U0001D4CA'}, + {"utdot;", '\U000022F0'}, + {"utilde;", '\U00000169'}, + {"utri;", '\U000025B5'}, + {"utrif;", '\U000025B4'}, + {"uuarr;", '\U000021C8'}, + {"uuml;", '\U000000FC'}, + {"uwangle;", '\U000029A7'}, + {"vArr;", '\U000021D5'}, + {"vBar;", '\U00002AE8'}, + {"vBarv;", '\U00002AE9'}, + {"vDash;", '\U000022A8'}, + {"vangrt;", '\U0000299C'}, + {"varepsilon;", '\U000003F5'}, + {"varkappa;", '\U000003F0'}, + {"varnothing;", '\U00002205'}, + {"varphi;", '\U000003D5'}, + {"varpi;", '\U000003D6'}, + {"varpropto;", '\U0000221D'}, + {"varr;", '\U00002195'}, + {"varrho;", '\U000003F1'}, + {"varsigma;", '\U000003C2'}, + {"vartheta;", '\U000003D1'}, + {"vartriangleleft;", '\U000022B2'}, + {"vartriangleright;", '\U000022B3'}, + {"vcy;", '\U00000432'}, + {"vdash;", '\U000022A2'}, + {"vee;", '\U00002228'}, + {"veebar;", '\U000022BB'}, + {"veeeq;", '\U0000225A'}, + {"vellip;", '\U000022EE'}, + {"verbar;", '\U0000007C'}, + {"vert;", '\U0000007C'}, + {"vfr;", '\U0001D533'}, + {"vltri;", '\U000022B2'}, + {"vopf;", '\U0001D567'}, + {"vprop;", '\U0000221D'}, + {"vrtri;", '\U000022B3'}, + {"vscr;", '\U0001D4CB'}, + {"vzigzag;", '\U0000299A'}, + {"wcirc;", '\U00000175'}, + {"wedbar;", '\U00002A5F'}, + {"wedge;", '\U00002227'}, + {"wedgeq;", '\U00002259'}, + {"weierp;", '\U00002118'}, + {"wfr;", '\U0001D534'}, + {"wopf;", '\U0001D568'}, + {"wp;", '\U00002118'}, + {"wr;", '\U00002240'}, + {"wreath;", '\U00002240'}, + {"wscr;", '\U0001D4CC'}, + {"xcap;", '\U000022C2'}, + {"xcirc;", '\U000025EF'}, + {"xcup;", '\U000022C3'}, + {"xdtri;", '\U000025BD'}, + {"xfr;", '\U0001D535'}, + {"xhArr;", '\U000027FA'}, + {"xharr;", '\U000027F7'}, + {"xi;", '\U000003BE'}, + {"xlArr;", '\U000027F8'}, + {"xlarr;", '\U000027F5'}, + {"xmap;", '\U000027FC'}, + {"xnis;", '\U000022FB'}, + {"xodot;", '\U00002A00'}, + {"xopf;", '\U0001D569'}, + {"xoplus;", '\U00002A01'}, + {"xotime;", '\U00002A02'}, + {"xrArr;", '\U000027F9'}, + {"xrarr;", '\U000027F6'}, + {"xscr;", '\U0001D4CD'}, + {"xsqcup;", '\U00002A06'}, + {"xuplus;", '\U00002A04'}, + {"xutri;", '\U000025B3'}, + {"xvee;", '\U000022C1'}, + {"xwedge;", '\U000022C0'}, + {"yacute;", '\U000000FD'}, + {"yacy;", '\U0000044F'}, + {"ycirc;", '\U00000177'}, + {"ycy;", '\U0000044B'}, + {"yen;", '\U000000A5'}, + {"yfr;", '\U0001D536'}, + {"yicy;", '\U00000457'}, + {"yopf;", '\U0001D56A'}, + {"yscr;", '\U0001D4CE'}, + {"yucy;", '\U0000044E'}, + {"yuml;", '\U000000FF'}, + {"zacute;", '\U0000017A'}, + {"zcaron;", '\U0000017E'}, + {"zcy;", '\U00000437'}, + {"zdot;", '\U0000017C'}, + {"zeetrf;", '\U00002128'}, + {"zeta;", '\U000003B6'}, + {"zfr;", '\U0001D537'}, + {"zhcy;", '\U00000436'}, + {"zigrarr;", '\U000021DD'}, + {"zopf;", '\U0001D56B'}, + {"zscr;", '\U0001D4CF'}, + {"zwj;", '\U0000200D'}, + {"zwnj;", '\U0000200C'}, + + {"Aacute", '\U000000C1'}, + {"aacute", '\U000000E1'}, + {"Acirc", '\U000000C2'}, + {"acirc", '\U000000E2'}, + {"acute", '\U000000B4'}, + {"AElig", '\U000000C6'}, + {"aelig", '\U000000E6'}, + {"Agrave", '\U000000C0'}, + {"agrave", '\U000000E0'}, + {"AMP", '\U00000026'}, + {"amp", '\U00000026'}, + {"Aring", '\U000000C5'}, + {"aring", '\U000000E5'}, + {"Atilde", '\U000000C3'}, + {"atilde", '\U000000E3'}, + {"Auml", '\U000000C4'}, + {"auml", '\U000000E4'}, + {"brvbar", '\U000000A6'}, + {"Ccedil", '\U000000C7'}, + {"ccedil", '\U000000E7'}, + {"cedil", '\U000000B8'}, + {"cent", '\U000000A2'}, + {"COPY", '\U000000A9'}, + {"copy", '\U000000A9'}, + {"curren", '\U000000A4'}, + {"deg", '\U000000B0'}, + {"divide", '\U000000F7'}, + {"Eacute", '\U000000C9'}, + {"eacute", '\U000000E9'}, + {"Ecirc", '\U000000CA'}, + {"ecirc", '\U000000EA'}, + {"Egrave", '\U000000C8'}, + {"egrave", '\U000000E8'}, + {"ETH", '\U000000D0'}, + {"eth", '\U000000F0'}, + {"Euml", '\U000000CB'}, + {"euml", '\U000000EB'}, + {"frac12", '\U000000BD'}, + {"frac14", '\U000000BC'}, + {"frac34", '\U000000BE'}, + {"GT", '\U0000003E'}, + {"gt", '\U0000003E'}, + {"Iacute", '\U000000CD'}, + {"iacute", '\U000000ED'}, + {"Icirc", '\U000000CE'}, + {"icirc", '\U000000EE'}, + {"iexcl", '\U000000A1'}, + {"Igrave", '\U000000CC'}, + {"igrave", '\U000000EC'}, + {"iquest", '\U000000BF'}, + {"Iuml", '\U000000CF'}, + {"iuml", '\U000000EF'}, + {"laquo", '\U000000AB'}, + {"LT", '\U0000003C'}, + {"lt", '\U0000003C'}, + {"macr", '\U000000AF'}, + {"micro", '\U000000B5'}, + {"middot", '\U000000B7'}, + {"nbsp", '\U000000A0'}, + {"not", '\U000000AC'}, + {"Ntilde", '\U000000D1'}, + {"ntilde", '\U000000F1'}, + {"Oacute", '\U000000D3'}, + {"oacute", '\U000000F3'}, + {"Ocirc", '\U000000D4'}, + {"ocirc", '\U000000F4'}, + {"Ograve", '\U000000D2'}, + {"ograve", '\U000000F2'}, + {"ordf", '\U000000AA'}, + {"ordm", '\U000000BA'}, + {"Oslash", '\U000000D8'}, + {"oslash", '\U000000F8'}, + {"Otilde", '\U000000D5'}, + {"otilde", '\U000000F5'}, + {"Ouml", '\U000000D6'}, + {"ouml", '\U000000F6'}, + {"para", '\U000000B6'}, + {"plusmn", '\U000000B1'}, + {"pound", '\U000000A3'}, + {"QUOT", '\U00000022'}, + {"quot", '\U00000022'}, + {"raquo", '\U000000BB'}, + {"REG", '\U000000AE'}, + {"reg", '\U000000AE'}, + {"sect", '\U000000A7'}, + {"shy", '\U000000AD'}, + {"sup1", '\U000000B9'}, + {"sup2", '\U000000B2'}, + {"sup3", '\U000000B3'}, + {"szlig", '\U000000DF'}, + {"THORN", '\U000000DE'}, + {"thorn", '\U000000FE'}, + {"times", '\U000000D7'}, + {"Uacute", '\U000000DA'}, + {"uacute", '\U000000FA'}, + {"Ucirc", '\U000000DB'}, + {"ucirc", '\U000000FB'}, + {"Ugrave", '\U000000D9'}, + {"ugrave", '\U000000F9'}, + {"uml", '\U000000A8'}, + {"Uuml", '\U000000DC'}, + {"uuml", '\U000000FC'}, + {"Yacute", '\U000000DD'}, + {"yacute", '\U000000FD'}, + {"yen", '\U000000A5'}, + {"yuml", '\U000000FF'}, +} + +@(private="file", rodata) +_entity2 := [?]struct{n: string, r: [2]rune}{ + {"acE;", {'\u223E', '\u0333'}}, + {"bne;", {'\u003D', '\u20E5'}}, + {"bnequiv;", {'\u2261', '\u20E5'}}, + {"caps;", {'\u2229', '\uFE00'}}, + {"cups;", {'\u222A', '\uFE00'}}, + {"fjlig;", {'\u0066', '\u006A'}}, + {"gesl;", {'\u22DB', '\uFE00'}}, + {"gvertneqq;", {'\u2269', '\uFE00'}}, + {"gvnE;", {'\u2269', '\uFE00'}}, + {"lates;", {'\u2AAD', '\uFE00'}}, + {"lesg;", {'\u22DA', '\uFE00'}}, + {"lvertneqq;", {'\u2268', '\uFE00'}}, + {"lvnE;", {'\u2268', '\uFE00'}}, + {"nang;", {'\u2220', '\u20D2'}}, + {"napE;", {'\u2A70', '\u0338'}}, + {"napid;", {'\u224B', '\u0338'}}, + {"nbump;", {'\u224E', '\u0338'}}, + {"nbumpe;", {'\u224F', '\u0338'}}, + {"ncongdot;", {'\u2A6D', '\u0338'}}, + {"nedot;", {'\u2250', '\u0338'}}, + {"nesim;", {'\u2242', '\u0338'}}, + {"ngE;", {'\u2267', '\u0338'}}, + {"ngeqq;", {'\u2267', '\u0338'}}, + {"ngeqslant;", {'\u2A7E', '\u0338'}}, + {"nges;", {'\u2A7E', '\u0338'}}, + {"nGg;", {'\u22D9', '\u0338'}}, + {"nGt;", {'\u226B', '\u20D2'}}, + {"nGtv;", {'\u226B', '\u0338'}}, + {"nlE;", {'\u2266', '\u0338'}}, + {"nleqq;", {'\u2266', '\u0338'}}, + {"nleqslant;", {'\u2A7D', '\u0338'}}, + {"nles;", {'\u2A7D', '\u0338'}}, + {"nLl;", {'\u22D8', '\u0338'}}, + {"nLt;", {'\u226A', '\u20D2'}}, + {"nLtv;", {'\u226A', '\u0338'}}, + {"NotEqualTilde;", {'\u2242', '\u0338'}}, + {"NotGreaterFullEqual;", {'\u2267', '\u0338'}}, + {"NotGreaterGreater;", {'\u226B', '\u0338'}}, + {"NotGreaterSlantEqual;", {'\u2A7E', '\u0338'}}, + {"NotHumpDownHump;", {'\u224E', '\u0338'}}, + {"NotHumpEqual;", {'\u224F', '\u0338'}}, + {"notindot;", {'\u22F5', '\u0338'}}, + {"notinE;", {'\u22F9', '\u0338'}}, + {"NotLeftTriangleBar;", {'\u29CF', '\u0338'}}, + {"NotLessLess;", {'\u226A', '\u0338'}}, + {"NotLessSlantEqual;", {'\u2A7D', '\u0338'}}, + {"NotNestedGreaterGreater;", {'\u2AA2', '\u0338'}}, + {"NotNestedLessLess;", {'\u2AA1', '\u0338'}}, + {"NotPrecedesEqual;", {'\u2AAF', '\u0338'}}, + {"NotRightTriangleBar;", {'\u29D0', '\u0338'}}, + {"NotSquareSubset;", {'\u228F', '\u0338'}}, + {"NotSquareSuperset;", {'\u2290', '\u0338'}}, + {"NotSubset;", {'\u2282', '\u20D2'}}, + {"NotSucceedsEqual;", {'\u2AB0', '\u0338'}}, + {"NotSucceedsTilde;", {'\u227F', '\u0338'}}, + {"NotSuperset;", {'\u2283', '\u20D2'}}, + {"nparsl;", {'\u2AFD', '\u20E5'}}, + {"npart;", {'\u2202', '\u0338'}}, + {"npre;", {'\u2AAF', '\u0338'}}, + {"npreceq;", {'\u2AAF', '\u0338'}}, + {"nrarrc;", {'\u2933', '\u0338'}}, + {"nrarrw;", {'\u219D', '\u0338'}}, + {"nsce;", {'\u2AB0', '\u0338'}}, + {"nsubE;", {'\u2AC5', '\u0338'}}, + {"nsubset;", {'\u2282', '\u20D2'}}, + {"nsubseteqq;", {'\u2AC5', '\u0338'}}, + {"nsucceq;", {'\u2AB0', '\u0338'}}, + {"nsupE;", {'\u2AC6', '\u0338'}}, + {"nsupset;", {'\u2283', '\u20D2'}}, + {"nsupseteqq;", {'\u2AC6', '\u0338'}}, + {"nvap;", {'\u224D', '\u20D2'}}, + {"nvge;", {'\u2265', '\u20D2'}}, + {"nvgt;", {'\u003E', '\u20D2'}}, + {"nvle;", {'\u2264', '\u20D2'}}, + {"nvlt;", {'\u003C', '\u20D2'}}, + {"nvltrie;", {'\u22B4', '\u20D2'}}, + {"nvrtrie;", {'\u22B5', '\u20D2'}}, + {"nvsim;", {'\u223C', '\u20D2'}}, + {"race;", {'\u223D', '\u0331'}}, + {"smtes;", {'\u2AAC', '\uFE00'}}, + {"sqcaps;", {'\u2293', '\uFE00'}}, + {"sqcups;", {'\u2294', '\uFE00'}}, + {"ThickSpace;", {'\u205F', '\u200A'}}, + {"varsubsetneq;", {'\u228A', '\uFE00'}}, + {"varsubsetneqq;", {'\u2ACB', '\uFE00'}}, + {"varsupsetneq;", {'\u228B', '\uFE00'}}, + {"varsupsetneqq;", {'\u2ACC', '\uFE00'}}, + {"vnsub;", {'\u2282', '\u20D2'}}, + {"vnsup;", {'\u2283', '\u20D2'}}, + {"vsubne;", {'\u228A', '\uFE00'}}, + {"vsubnE;", {'\u2ACB', '\uFE00'}}, + {"vsupne;", {'\u228B', '\uFE00'}}, + {"vsupnE;", {'\u2ACC', '\uFE00'}}, +} \ No newline at end of file From 23198f79179075f05a965db7951613ef6bb3f9fd Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Jan 2026 11:45:40 +0000 Subject: [PATCH 136/212] Move html escaping calls and fix existing generator --- core/encoding/entity/entity.odin | 279 +- core/encoding/entity/generated.odin | 4828 ++++++++--------- core/html/escape.odin | 248 - core/html/html_entities.odin | 2275 -------- core/unicode/tools/generate_entity_table.odin | 49 +- 5 files changed, 2701 insertions(+), 4978 deletions(-) delete mode 100644 core/html/escape.odin delete mode 100644 core/html/html_entities.odin diff --git a/core/encoding/entity/entity.odin b/core/encoding/entity/entity.odin index e112eedf2..0d455ef88 100644 --- a/core/encoding/entity/entity.odin +++ b/core/encoding/entity/entity.odin @@ -21,6 +21,7 @@ package encoding_unicode_entity Jeroen van Rijn: Initial implementation. */ +import "base:runtime" import "core:unicode/utf8" import "core:unicode" import "core:strings" @@ -141,8 +142,10 @@ decode_xml :: proc(input: string, options := XML_Decode_Options{}, allocator := write_string(&builder, entity) } else { if .No_Entity_Decode not_in options { - if decoded, ok := xml_decode_entity(entity); ok { - write_rune(&builder, decoded) + if decoded, count, ok := xml_decode_entity(entity); ok { + for i in 0.. (err: Error) { } } -xml_decode_entity :: proc(entity: string) -> (decoded: rune, ok: bool) { +xml_decode_entity :: proc(entity: string) -> (decoded: [2]rune, rune_count: int, ok: bool) { entity := entity - if len(entity) == 0 { return -1, false } + if len(entity) == 0 { return } - switch entity[0] { - case '#': + if entity[0] == '#' { base := 10 val := 0 entity = entity[1:] - if len(entity) == 0 { return -1, false } + if len(entity) == 0 { return } if entity[0] == 'x' || entity[0] == 'X' { base = 16 @@ -237,30 +239,275 @@ xml_decode_entity :: proc(entity: string) -> (decoded: rune, ok: bool) { val += int(r - '0') case 'a'..='f': - if base == 10 { return -1, false } + if base == 10 { return } val *= base val += int(r - 'a' + 10) case 'A'..='F': - if base == 10 { return -1, false } + if base == 10 { return } val *= base val += int(r - 'A' + 10) case: - return -1, false + return } - if val > MAX_RUNE_CODEPOINT { return -1, false } + if val > MAX_RUNE_CODEPOINT { return } entity = entity[1:] } - return rune(val), true - - case: - // Named entity. - return named_xml_entity_to_rune(entity) + return rune(val), 1, true } + // Named entity. + return named_xml_entity_to_rune(entity) } + +// escape_html escapes special characters like '&' to become '&'. +// It escapes only 5 different characters: & ' < > and ". +@(require_results) +escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool) { + /* + & -> & + ' -> ' // ' is shorter than ' (NOTE: ' was not available until HTML 5) + < -> < + > -> > + " -> " // " is shorter than " + */ + + b := transmute([]byte)s + + extra_bytes_needed := 0 + + for c in b { + switch c { + case '&': extra_bytes_needed += 4 + case '\'': extra_bytes_needed += 4 + case '<': extra_bytes_needed += 3 + case '>': extra_bytes_needed += 3 + case '"': extra_bytes_needed += 4 + } + } + + if extra_bytes_needed == 0 { + return s, false + } + + t, err := make([]byte, len(s) + extra_bytes_needed, allocator, loc) + if err != nil { + return + } + was_allocation = true + + w := 0 + for c in b { + s := "" + switch c { + case '&': s = "&" + case '\'': s = "'" + case '<': s = "<" + case '>': s = ">" + case '"': s = """ + } + if s != "" { + copy(t[w:], s) + w += len(s) + } else { + t[w] = c + w += 1 + } + } + output = string(t[0:w]) + return +} + + +@(require_results) +unescape_html :: proc(s: string, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool, err: runtime.Allocator_Error) { + @(require_results) + do_append :: proc(s: string, amp_idx: int, buf: ^[dynamic]byte) -> (n: int) { + s, amp_idx := s, amp_idx + + n += len(s[:amp_idx]) + if buf != nil { append(buf, s[:amp_idx]) } + s = s[amp_idx:] + for len(s) > 0 { + b, w, j := unescape_entity(s) + n += w + if buf != nil { append(buf, ..b[:w]) } + + s = s[j:] + + amp_idx = strings.index_byte(s, '&') + if amp_idx < 0 { + n += len(s) + if buf != nil { append(buf, s) } + break + } + n += amp_idx + if buf != nil { append(buf, s[:amp_idx]) } + s = s[amp_idx:] + } + + return + } + + s := s + amp_idx := strings.index_byte(s, '&') + if amp_idx < 0 { + return s, false, nil + } + + // NOTE(bill): this does a two pass in order to minimize the allocations required + bytes_required := do_append(s, amp_idx, nil) + + buf := make([dynamic]byte, 0, bytes_required, allocator, loc) or_return + was_allocation = true + + _ = do_append(s, amp_idx, &buf) + + assert(len(buf) == cap(buf)) + output = string(buf[:]) + + return +} + +// Returns an unescaped string of an encoded XML/HTML entity. +@(require_results) +unescape_entity :: proc(s: string) -> (b: [8]byte, w: int, j: int) { + s := s + if len(s) < 2 { + return + } + if s[0] != '&' { + return + } + j = 1 + + if s[j] == '#' { // scan numbers + j += 1 + if len(s) <= 3 { // remove `&#.` + return + } + c := s[j] + hex := false + if c == 'x' || c == 'X' { + hex = true + j += 1 + } + + x := rune(0) + scan_number: for j < len(s) { + c = s[j] + j += 1 + if hex { + switch c { + case '0'..='9': x = 16*x + rune(c) - '0'; continue scan_number + case 'a'..='f': x = 16*x + rune(c) - 'a' + 10; continue scan_number + case 'A'..='F': x = 16*x + rune(c) - 'A' + 10; continue scan_number + } + } else { + switch c { + case '0'..='9': x = 10*x + rune(c) - '0'; continue scan_number + } + } + + // Keep the ';' to check for cases which require it and cases which might not + if c != ';' { + j -= 1 + } + break scan_number + } + + + if j <= 3 { // no replacement characters found + return + } + + @(static, rodata) + windows_1252_replacement_table := [0xa0 - 0x80]rune{ // Windows-1252 -> UTF-8 + '\u20ac', '\u0081', '\u201a', '\u0192', + '\u201e', '\u2026', '\u2020', '\u2021', + '\u02c6', '\u2030', '\u0160', '\u2039', + '\u0152', '\u008d', '\u017d', '\u008f', + '\u0090', '\u2018', '\u2019', '\u201c', + '\u201d', '\u2022', '\u2013', '\u2014', + '\u02dc', '\u2122', '\u0161', '\u203a', + '\u0153', '\u009d', '\u017e', '\u0178', + } + + switch x { + case 0x80..<0xa0: + x = windows_1252_replacement_table[x-0x80] + case 0, 0xd800..=0xdfff: + x = utf8.RUNE_ERROR + case: + if x > 0x10ffff { + x = utf8.RUNE_ERROR + } + + } + + b1, w1 := utf8.encode_rune(x) + w += copy(b[:], b1[:w1]) + return + } + + // Lookup by entity names + + scan_ident: for j < len(s) { // scan over letters and digits + c := s[j] + j += 1 + + switch c { + case 'a'..='z', 'A'..='Z', '0'..='9': + continue scan_ident + } + // Keep the ';' to check for cases which require it and cases which might not + if c != ';' { + j -= 1 + } + break scan_ident + } + + entity_name := s[1:j] + if len(entity_name) == 0 { + return + } + + if entity_name[len(entity_name)-1] == ';' { + entity_name = entity_name[:len(entity_name)-1] + } + + if r2, _, ok := named_xml_entity_to_rune(entity_name); ok { + b1, w1 := utf8.encode_rune(r2[0]) + w += copy(b[w:], b1[:w1]) + if r2[1] != 0 { + b2, w2 := utf8.encode_rune(r2[1]) + w += copy(b[w:], b2[:w2]) + } + return + } + + // The longest entities that do not end with a semicolon are <=6 bytes long + LONGEST_ENTITY_WITHOUT_SEMICOLON :: 6 + + n := min(len(entity_name)-1, LONGEST_ENTITY_WITHOUT_SEMICOLON) + for i := n; i > 1; i -= 1 { + if r2, _, ok := named_xml_entity_to_rune(entity_name[:i]); ok { + b1, w1 := utf8.encode_rune(r2[0]) + w += copy(b[w:], b1[:w1]) + if r2[1] != 0 { + b2, w2 := utf8.encode_rune(r2[1]) + w += copy(b[w:], b2[:w2]) + } + return + } + } + + return +} + + // Private XML helper to extract `&;` entity. @(private="file") _extract_xml_entity :: proc(t: ^Tokenizer) -> (entity: string, err: Error) { diff --git a/core/encoding/entity/generated.odin b/core/encoding/entity/generated.odin index 52027ae03..553554976 100644 --- a/core/encoding/entity/generated.odin +++ b/core/encoding/entity/generated.odin @@ -43,5047 +43,5047 @@ XML_NAME_TO_RUNE_MAX_LENGTH :: 31 entity_name - a string, like "copy" that describes a user-encoded Unicode entity as used in XML. Returns: - "decoded" - The decoded rune if found by name, or -1 otherwise. - "ok" - true if found, false if not. + "decoded" - The decoded runes if found by name, or all zero otherwise. + "rune_count" - The number of decoded runes + "ok" - true if found, false if not. IMPORTANT: XML processors (including browsers) treat these names as case-sensitive. So do we. */ -named_xml_entity_to_rune :: proc(name: string) -> (decoded: rune, ok: bool) { +named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: int, ok: bool) { /* Early out if the name is too short or too long. min as a precaution in case the generated table has a bogus value. */ if len(name) < min(1, XML_NAME_TO_RUNE_MIN_LENGTH) || len(name) > XML_NAME_TO_RUNE_MAX_LENGTH { - return -1, false + return } switch rune(name[0]) { - case 'A': switch name { case "AElig": // LATIN CAPITAL LETTER AE - return rune(0xc6), true + return {'Æ', 0}, 1, true case "AMP": // AMPERSAND - return rune(0x26), true + return {'&', 0}, 1, true case "Aacgr": // GREEK CAPITAL LETTER ALPHA WITH TONOS - return rune(0x0386), true + return {'\u0386', 0}, 1, true case "Aacute": // LATIN CAPITAL LETTER A WITH ACUTE - return rune(0xc1), true + return {'Á', 0}, 1, true case "Abreve": // LATIN CAPITAL LETTER A WITH BREVE - return rune(0x0102), true + return {'\u0102', 0}, 1, true case "Acirc": // LATIN CAPITAL LETTER A WITH CIRCUMFLEX - return rune(0xc2), true + return {'Â', 0}, 1, true case "Acy": // CYRILLIC CAPITAL LETTER A - return rune(0x0410), true + return {'\u0410', 0}, 1, true case "Afr": // MATHEMATICAL FRAKTUR CAPITAL A - return rune(0x01d504), true + return {'\U0001d504', 0}, 1, true case "Agr": // GREEK CAPITAL LETTER ALPHA - return rune(0x0391), true + return {'\u0391', 0}, 1, true case "Agrave": // LATIN CAPITAL LETTER A WITH GRAVE - return rune(0xc0), true + return {'À', 0}, 1, true case "Alpha": // GREEK CAPITAL LETTER ALPHA - return rune(0x0391), true + return {'\u0391', 0}, 1, true case "Amacr": // LATIN CAPITAL LETTER A WITH MACRON - return rune(0x0100), true + return {'\u0100', 0}, 1, true case "And": // DOUBLE LOGICAL AND - return rune(0x2a53), true + return {'\u2a53', 0}, 1, true case "Aogon": // LATIN CAPITAL LETTER A WITH OGONEK - return rune(0x0104), true + return {'\u0104', 0}, 1, true case "Aopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL A - return rune(0x01d538), true + return {'\U0001d538', 0}, 1, true case "ApplyFunction": // FUNCTION APPLICATION - return rune(0x2061), true + return {'\u2061', 0}, 1, true case "Aring": // LATIN CAPITAL LETTER A WITH RING ABOVE - return rune(0xc5), true + return {'Å', 0}, 1, true case "Ascr": // MATHEMATICAL SCRIPT CAPITAL A - return rune(0x01d49c), true + return {'\U0001d49c', 0}, 1, true case "Assign": // COLON EQUALS - return rune(0x2254), true + return {'\u2254', 0}, 1, true case "Ast": // TWO ASTERISKS ALIGNED VERTICALLY - return rune(0x2051), true + return {'\u2051', 0}, 1, true case "Atilde": // LATIN CAPITAL LETTER A WITH TILDE - return rune(0xc3), true + return {'Ã', 0}, 1, true case "Auml": // LATIN CAPITAL LETTER A WITH DIAERESIS - return rune(0xc4), true + return {'Ä', 0}, 1, true } case 'B': switch name { case "Backslash": // SET MINUS - return rune(0x2216), true + return {'\u2216', 0}, 1, true case "Barint": // INTEGRAL WITH DOUBLE STROKE - return rune(0x2a0e), true + return {'\u2a0e', 0}, 1, true case "Barv": // SHORT DOWN TACK WITH OVERBAR - return rune(0x2ae7), true + return {'\u2ae7', 0}, 1, true case "Barwed": // PERSPECTIVE - return rune(0x2306), true + return {'\u2306', 0}, 1, true case "Barwedl": // LOGICAL AND WITH DOUBLE OVERBAR - return rune(0x2a5e), true + return {'\u2a5e', 0}, 1, true case "Bcy": // CYRILLIC CAPITAL LETTER BE - return rune(0x0411), true + return {'\u0411', 0}, 1, true case "Because": // BECAUSE - return rune(0x2235), true + return {'\u2235', 0}, 1, true case "Bernoullis": // SCRIPT CAPITAL B - return rune(0x212c), true + return {'\u212c', 0}, 1, true case "Beta": // GREEK CAPITAL LETTER BETA - return rune(0x0392), true + return {'\u0392', 0}, 1, true case "Bfr": // MATHEMATICAL FRAKTUR CAPITAL B - return rune(0x01d505), true + return {'\U0001d505', 0}, 1, true case "Bgr": // GREEK CAPITAL LETTER BETA - return rune(0x0392), true + return {'\u0392', 0}, 1, true case "Bopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL B - return rune(0x01d539), true + return {'\U0001d539', 0}, 1, true case "Breve": // BREVE - return rune(0x02d8), true + return {'\u02d8', 0}, 1, true case "Bscr": // SCRIPT CAPITAL B - return rune(0x212c), true + return {'\u212c', 0}, 1, true case "Bumpeq": // GEOMETRICALLY EQUIVALENT TO - return rune(0x224e), true + return {'\u224e', 0}, 1, true case "Bvert": // BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL - return rune(0x2506), true + return {'\u2506', 0}, 1, true } case 'C': switch name { case "CHcy": // CYRILLIC CAPITAL LETTER CHE - return rune(0x0427), true + return {'\u0427', 0}, 1, true case "COPY": // COPYRIGHT SIGN - return rune(0xa9), true + return {'©', 0}, 1, true case "Cacute": // LATIN CAPITAL LETTER C WITH ACUTE - return rune(0x0106), true + return {'\u0106', 0}, 1, true case "Cap": // DOUBLE INTERSECTION - return rune(0x22d2), true + return {'\u22d2', 0}, 1, true case "CapitalDifferentialD": // DOUBLE-STRUCK ITALIC CAPITAL D - return rune(0x2145), true + return {'\u2145', 0}, 1, true case "Cayleys": // BLACK-LETTER CAPITAL C - return rune(0x212d), true + return {'\u212d', 0}, 1, true case "Ccaron": // LATIN CAPITAL LETTER C WITH CARON - return rune(0x010c), true + return {'\u010c', 0}, 1, true case "Ccedil": // LATIN CAPITAL LETTER C WITH CEDILLA - return rune(0xc7), true + return {'Ç', 0}, 1, true case "Ccirc": // LATIN CAPITAL LETTER C WITH CIRCUMFLEX - return rune(0x0108), true + return {'\u0108', 0}, 1, true case "Cconint": // VOLUME INTEGRAL - return rune(0x2230), true + return {'\u2230', 0}, 1, true case "Cdot": // LATIN CAPITAL LETTER C WITH DOT ABOVE - return rune(0x010a), true + return {'\u010a', 0}, 1, true case "Cedilla": // CEDILLA - return rune(0xb8), true + return {'¸', 0}, 1, true case "CenterDot": // MIDDLE DOT - return rune(0xb7), true + return {'·', 0}, 1, true case "Cfr": // BLACK-LETTER CAPITAL C - return rune(0x212d), true + return {'\u212d', 0}, 1, true case "Chi": // GREEK CAPITAL LETTER CHI - return rune(0x03a7), true + return {'\u03a7', 0}, 1, true case "CircleDot": // CIRCLED DOT OPERATOR - return rune(0x2299), true + return {'\u2299', 0}, 1, true case "CircleMinus": // CIRCLED MINUS - return rune(0x2296), true + return {'\u2296', 0}, 1, true case "CirclePlus": // CIRCLED PLUS - return rune(0x2295), true + return {'\u2295', 0}, 1, true case "CircleTimes": // CIRCLED TIMES - return rune(0x2297), true + return {'\u2297', 0}, 1, true case "ClockwiseContourIntegral": // CLOCKWISE CONTOUR INTEGRAL - return rune(0x2232), true + return {'\u2232', 0}, 1, true case "CloseCurlyDoubleQuote": // RIGHT DOUBLE QUOTATION MARK - return rune(0x201d), true + return {'\u201d', 0}, 1, true case "CloseCurlyQuote": // RIGHT SINGLE QUOTATION MARK - return rune(0x2019), true + return {'\u2019', 0}, 1, true case "Colon": // PROPORTION - return rune(0x2237), true + return {'\u2237', 0}, 1, true case "Colone": // DOUBLE COLON EQUAL - return rune(0x2a74), true + return {'\u2a74', 0}, 1, true case "Congruent": // IDENTICAL TO - return rune(0x2261), true + return {'\u2261', 0}, 1, true case "Conint": // SURFACE INTEGRAL - return rune(0x222f), true + return {'\u222f', 0}, 1, true case "ContourIntegral": // CONTOUR INTEGRAL - return rune(0x222e), true + return {'\u222e', 0}, 1, true case "Copf": // DOUBLE-STRUCK CAPITAL C - return rune(0x2102), true + return {'\u2102', 0}, 1, true case "Coproduct": // N-ARY COPRODUCT - return rune(0x2210), true + return {'\u2210', 0}, 1, true case "CounterClockwiseContourIntegral": // ANTICLOCKWISE CONTOUR INTEGRAL - return rune(0x2233), true + return {'\u2233', 0}, 1, true case "Cross": // VECTOR OR CROSS PRODUCT - return rune(0x2a2f), true + return {'\u2a2f', 0}, 1, true case "Cscr": // MATHEMATICAL SCRIPT CAPITAL C - return rune(0x01d49e), true + return {'\U0001d49e', 0}, 1, true case "Cup": // DOUBLE UNION - return rune(0x22d3), true + return {'\u22d3', 0}, 1, true case "CupCap": // EQUIVALENT TO - return rune(0x224d), true + return {'\u224d', 0}, 1, true } case 'D': switch name { case "DD": // DOUBLE-STRUCK ITALIC CAPITAL D - return rune(0x2145), true + return {'\u2145', 0}, 1, true case "DDotrahd": // RIGHTWARDS ARROW WITH DOTTED STEM - return rune(0x2911), true + return {'\u2911', 0}, 1, true case "DJcy": // CYRILLIC CAPITAL LETTER DJE - return rune(0x0402), true + return {'\u0402', 0}, 1, true case "DScy": // CYRILLIC CAPITAL LETTER DZE - return rune(0x0405), true + return {'\u0405', 0}, 1, true case "DZcy": // CYRILLIC CAPITAL LETTER DZHE - return rune(0x040f), true + return {'\u040f', 0}, 1, true case "Dagger": // DOUBLE DAGGER - return rune(0x2021), true + return {'\u2021', 0}, 1, true case "Darr": // DOWNWARDS TWO HEADED ARROW - return rune(0x21a1), true + return {'\u21a1', 0}, 1, true case "Dashv": // VERTICAL BAR DOUBLE LEFT TURNSTILE - return rune(0x2ae4), true + return {'\u2ae4', 0}, 1, true case "Dcaron": // LATIN CAPITAL LETTER D WITH CARON - return rune(0x010e), true + return {'\u010e', 0}, 1, true case "Dcy": // CYRILLIC CAPITAL LETTER DE - return rune(0x0414), true + return {'\u0414', 0}, 1, true case "Del": // NABLA - return rune(0x2207), true + return {'\u2207', 0}, 1, true case "Delta": // GREEK CAPITAL LETTER DELTA - return rune(0x0394), true + return {'\u0394', 0}, 1, true case "Dfr": // MATHEMATICAL FRAKTUR CAPITAL D - return rune(0x01d507), true + return {'\U0001d507', 0}, 1, true case "Dgr": // GREEK CAPITAL LETTER DELTA - return rune(0x0394), true + return {'\u0394', 0}, 1, true case "DiacriticalAcute": // ACUTE ACCENT - return rune(0xb4), true + return {'´', 0}, 1, true case "DiacriticalDot": // DOT ABOVE - return rune(0x02d9), true + return {'\u02d9', 0}, 1, true case "DiacriticalDoubleAcute": // DOUBLE ACUTE ACCENT - return rune(0x02dd), true + return {'\u02dd', 0}, 1, true case "DiacriticalGrave": // GRAVE ACCENT - return rune(0x60), true + return {'`', 0}, 1, true case "DiacriticalTilde": // SMALL TILDE - return rune(0x02dc), true + return {'\u02dc', 0}, 1, true case "Diamond": // DIAMOND OPERATOR - return rune(0x22c4), true + return {'\u22c4', 0}, 1, true case "DifferentialD": // DOUBLE-STRUCK ITALIC SMALL D - return rune(0x2146), true + return {'\u2146', 0}, 1, true case "Dopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL D - return rune(0x01d53b), true + return {'\U0001d53b', 0}, 1, true case "Dot": // DIAERESIS - return rune(0xa8), true + return {'¨', 0}, 1, true case "DotDot": // COMBINING FOUR DOTS ABOVE - return rune(0x20dc), true + return {'\u20dc', 0}, 1, true case "DotEqual": // APPROACHES THE LIMIT - return rune(0x2250), true + return {'\u2250', 0}, 1, true case "DoubleContourIntegral": // SURFACE INTEGRAL - return rune(0x222f), true + return {'\u222f', 0}, 1, true case "DoubleDot": // DIAERESIS - return rune(0xa8), true + return {'¨', 0}, 1, true case "DoubleDownArrow": // DOWNWARDS DOUBLE ARROW - return rune(0x21d3), true + return {'\u21d3', 0}, 1, true case "DoubleLeftArrow": // LEFTWARDS DOUBLE ARROW - return rune(0x21d0), true + return {'\u21d0', 0}, 1, true case "DoubleLeftRightArrow": // LEFT RIGHT DOUBLE ARROW - return rune(0x21d4), true + return {'\u21d4', 0}, 1, true case "DoubleLeftTee": // VERTICAL BAR DOUBLE LEFT TURNSTILE - return rune(0x2ae4), true + return {'\u2ae4', 0}, 1, true case "DoubleLongLeftArrow": // LONG LEFTWARDS DOUBLE ARROW - return rune(0x27f8), true + return {'\u27f8', 0}, 1, true case "DoubleLongLeftRightArrow": // LONG LEFT RIGHT DOUBLE ARROW - return rune(0x27fa), true + return {'\u27fa', 0}, 1, true case "DoubleLongRightArrow": // LONG RIGHTWARDS DOUBLE ARROW - return rune(0x27f9), true + return {'\u27f9', 0}, 1, true case "DoubleRightArrow": // RIGHTWARDS DOUBLE ARROW - return rune(0x21d2), true + return {'\u21d2', 0}, 1, true case "DoubleRightTee": // TRUE - return rune(0x22a8), true + return {'\u22a8', 0}, 1, true case "DoubleUpArrow": // UPWARDS DOUBLE ARROW - return rune(0x21d1), true + return {'\u21d1', 0}, 1, true case "DoubleUpDownArrow": // UP DOWN DOUBLE ARROW - return rune(0x21d5), true + return {'\u21d5', 0}, 1, true case "DoubleVerticalBar": // PARALLEL TO - return rune(0x2225), true + return {'\u2225', 0}, 1, true case "DownArrow": // DOWNWARDS ARROW - return rune(0x2193), true + return {'\u2193', 0}, 1, true case "DownArrowBar": // DOWNWARDS ARROW TO BAR - return rune(0x2913), true + return {'\u2913', 0}, 1, true case "DownArrowUpArrow": // DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW - return rune(0x21f5), true + return {'\u21f5', 0}, 1, true case "DownBreve": // COMBINING INVERTED BREVE - return rune(0x0311), true + return {'\u0311', 0}, 1, true case "DownLeftRightVector": // LEFT BARB DOWN RIGHT BARB DOWN HARPOON - return rune(0x2950), true + return {'\u2950', 0}, 1, true case "DownLeftTeeVector": // LEFTWARDS HARPOON WITH BARB DOWN FROM BAR - return rune(0x295e), true + return {'\u295e', 0}, 1, true case "DownLeftVector": // LEFTWARDS HARPOON WITH BARB DOWNWARDS - return rune(0x21bd), true + return {'\u21bd', 0}, 1, true case "DownLeftVectorBar": // LEFTWARDS HARPOON WITH BARB DOWN TO BAR - return rune(0x2956), true + return {'\u2956', 0}, 1, true case "DownRightTeeVector": // RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR - return rune(0x295f), true + return {'\u295f', 0}, 1, true case "DownRightVector": // RIGHTWARDS HARPOON WITH BARB DOWNWARDS - return rune(0x21c1), true + return {'\u21c1', 0}, 1, true case "DownRightVectorBar": // RIGHTWARDS HARPOON WITH BARB DOWN TO BAR - return rune(0x2957), true + return {'\u2957', 0}, 1, true case "DownTee": // DOWN TACK - return rune(0x22a4), true + return {'\u22a4', 0}, 1, true case "DownTeeArrow": // DOWNWARDS ARROW FROM BAR - return rune(0x21a7), true + return {'\u21a7', 0}, 1, true case "Downarrow": // DOWNWARDS DOUBLE ARROW - return rune(0x21d3), true + return {'\u21d3', 0}, 1, true case "Dscr": // MATHEMATICAL SCRIPT CAPITAL D - return rune(0x01d49f), true + return {'\U0001d49f', 0}, 1, true case "Dstrok": // LATIN CAPITAL LETTER D WITH STROKE - return rune(0x0110), true + return {'\u0110', 0}, 1, true } case 'E': switch name { case "EEacgr": // GREEK CAPITAL LETTER ETA WITH TONOS - return rune(0x0389), true + return {'\u0389', 0}, 1, true case "EEgr": // GREEK CAPITAL LETTER ETA - return rune(0x0397), true + return {'\u0397', 0}, 1, true case "ENG": // LATIN CAPITAL LETTER ENG - return rune(0x014a), true + return {'\u014a', 0}, 1, true case "ETH": // LATIN CAPITAL LETTER ETH - return rune(0xd0), true + return {'Ð', 0}, 1, true case "Eacgr": // GREEK CAPITAL LETTER EPSILON WITH TONOS - return rune(0x0388), true + return {'\u0388', 0}, 1, true case "Eacute": // LATIN CAPITAL LETTER E WITH ACUTE - return rune(0xc9), true + return {'É', 0}, 1, true case "Ecaron": // LATIN CAPITAL LETTER E WITH CARON - return rune(0x011a), true + return {'\u011a', 0}, 1, true case "Ecirc": // LATIN CAPITAL LETTER E WITH CIRCUMFLEX - return rune(0xca), true + return {'Ê', 0}, 1, true case "Ecy": // CYRILLIC CAPITAL LETTER E - return rune(0x042d), true + return {'\u042d', 0}, 1, true case "Edot": // LATIN CAPITAL LETTER E WITH DOT ABOVE - return rune(0x0116), true + return {'\u0116', 0}, 1, true case "Efr": // MATHEMATICAL FRAKTUR CAPITAL E - return rune(0x01d508), true + return {'\U0001d508', 0}, 1, true case "Egr": // GREEK CAPITAL LETTER EPSILON - return rune(0x0395), true + return {'\u0395', 0}, 1, true case "Egrave": // LATIN CAPITAL LETTER E WITH GRAVE - return rune(0xc8), true + return {'È', 0}, 1, true case "Element": // ELEMENT OF - return rune(0x2208), true + return {'\u2208', 0}, 1, true case "Emacr": // LATIN CAPITAL LETTER E WITH MACRON - return rune(0x0112), true + return {'\u0112', 0}, 1, true case "EmptySmallSquare": // WHITE MEDIUM SQUARE - return rune(0x25fb), true + return {'\u25fb', 0}, 1, true case "EmptyVerySmallSquare": // WHITE SMALL SQUARE - return rune(0x25ab), true + return {'\u25ab', 0}, 1, true case "Eogon": // LATIN CAPITAL LETTER E WITH OGONEK - return rune(0x0118), true + return {'\u0118', 0}, 1, true case "Eopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL E - return rune(0x01d53c), true + return {'\U0001d53c', 0}, 1, true case "Epsilon": // GREEK CAPITAL LETTER EPSILON - return rune(0x0395), true + return {'\u0395', 0}, 1, true case "Equal": // TWO CONSECUTIVE EQUALS SIGNS - return rune(0x2a75), true + return {'\u2a75', 0}, 1, true case "EqualTilde": // MINUS TILDE - return rune(0x2242), true + return {'\u2242', 0}, 1, true case "Equilibrium": // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON - return rune(0x21cc), true + return {'\u21cc', 0}, 1, true case "Escr": // SCRIPT CAPITAL E - return rune(0x2130), true + return {'\u2130', 0}, 1, true case "Esim": // EQUALS SIGN ABOVE TILDE OPERATOR - return rune(0x2a73), true + return {'\u2a73', 0}, 1, true case "Eta": // GREEK CAPITAL LETTER ETA - return rune(0x0397), true + return {'\u0397', 0}, 1, true case "Euml": // LATIN CAPITAL LETTER E WITH DIAERESIS - return rune(0xcb), true + return {'Ë', 0}, 1, true case "Exists": // THERE EXISTS - return rune(0x2203), true + return {'\u2203', 0}, 1, true case "ExponentialE": // DOUBLE-STRUCK ITALIC SMALL E - return rune(0x2147), true + return {'\u2147', 0}, 1, true } case 'F': switch name { case "Fcy": // CYRILLIC CAPITAL LETTER EF - return rune(0x0424), true + return {'\u0424', 0}, 1, true case "Ffr": // MATHEMATICAL FRAKTUR CAPITAL F - return rune(0x01d509), true + return {'\U0001d509', 0}, 1, true case "FilledSmallSquare": // BLACK MEDIUM SQUARE - return rune(0x25fc), true + return {'\u25fc', 0}, 1, true case "FilledVerySmallSquare": // BLACK SMALL SQUARE - return rune(0x25aa), true + return {'\u25aa', 0}, 1, true case "Fopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL F - return rune(0x01d53d), true + return {'\U0001d53d', 0}, 1, true case "ForAll": // FOR ALL - return rune(0x2200), true + return {'\u2200', 0}, 1, true case "Fouriertrf": // SCRIPT CAPITAL F - return rune(0x2131), true + return {'\u2131', 0}, 1, true case "Fscr": // SCRIPT CAPITAL F - return rune(0x2131), true + return {'\u2131', 0}, 1, true } case 'G': switch name { case "GJcy": // CYRILLIC CAPITAL LETTER GJE - return rune(0x0403), true + return {'\u0403', 0}, 1, true case "GT": // GREATER-THAN SIGN - return rune(0x3e), true + return {'>', 0}, 1, true case "Game": // TURNED SANS-SERIF CAPITAL G - return rune(0x2141), true + return {'\u2141', 0}, 1, true case "Gamma": // GREEK CAPITAL LETTER GAMMA - return rune(0x0393), true + return {'\u0393', 0}, 1, true case "Gammad": // GREEK LETTER DIGAMMA - return rune(0x03dc), true + return {'\u03dc', 0}, 1, true case "Gbreve": // LATIN CAPITAL LETTER G WITH BREVE - return rune(0x011e), true + return {'\u011e', 0}, 1, true case "Gcedil": // LATIN CAPITAL LETTER G WITH CEDILLA - return rune(0x0122), true + return {'\u0122', 0}, 1, true case "Gcirc": // LATIN CAPITAL LETTER G WITH CIRCUMFLEX - return rune(0x011c), true + return {'\u011c', 0}, 1, true case "Gcy": // CYRILLIC CAPITAL LETTER GHE - return rune(0x0413), true + return {'\u0413', 0}, 1, true case "Gdot": // LATIN CAPITAL LETTER G WITH DOT ABOVE - return rune(0x0120), true + return {'\u0120', 0}, 1, true case "Gfr": // MATHEMATICAL FRAKTUR CAPITAL G - return rune(0x01d50a), true + return {'\U0001d50a', 0}, 1, true case "Gg": // VERY MUCH GREATER-THAN - return rune(0x22d9), true + return {'\u22d9', 0}, 1, true case "Ggr": // GREEK CAPITAL LETTER GAMMA - return rune(0x0393), true + return {'\u0393', 0}, 1, true case "Gopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL G - return rune(0x01d53e), true + return {'\U0001d53e', 0}, 1, true case "GreaterEqual": // GREATER-THAN OR EQUAL TO - return rune(0x2265), true + return {'\u2265', 0}, 1, true case "GreaterEqualLess": // GREATER-THAN EQUAL TO OR LESS-THAN - return rune(0x22db), true + return {'\u22db', 0}, 1, true case "GreaterFullEqual": // GREATER-THAN OVER EQUAL TO - return rune(0x2267), true + return {'\u2267', 0}, 1, true case "GreaterGreater": // DOUBLE NESTED GREATER-THAN - return rune(0x2aa2), true + return {'\u2aa2', 0}, 1, true case "GreaterLess": // GREATER-THAN OR LESS-THAN - return rune(0x2277), true + return {'\u2277', 0}, 1, true case "GreaterSlantEqual": // GREATER-THAN OR SLANTED EQUAL TO - return rune(0x2a7e), true + return {'\u2a7e', 0}, 1, true case "GreaterTilde": // GREATER-THAN OR EQUIVALENT TO - return rune(0x2273), true + return {'\u2273', 0}, 1, true case "Gscr": // MATHEMATICAL SCRIPT CAPITAL G - return rune(0x01d4a2), true + return {'\U0001d4a2', 0}, 1, true case "Gt": // MUCH GREATER-THAN - return rune(0x226b), true + return {'\u226b', 0}, 1, true } case 'H': switch name { case "HARDcy": // CYRILLIC CAPITAL LETTER HARD SIGN - return rune(0x042a), true + return {'\u042a', 0}, 1, true case "Hacek": // CARON - return rune(0x02c7), true + return {'\u02c7', 0}, 1, true case "Hat": // CIRCUMFLEX ACCENT - return rune(0x5e), true + return {'^', 0}, 1, true case "Hcirc": // LATIN CAPITAL LETTER H WITH CIRCUMFLEX - return rune(0x0124), true + return {'\u0124', 0}, 1, true case "Hfr": // BLACK-LETTER CAPITAL H - return rune(0x210c), true + return {'\u210c', 0}, 1, true case "HilbertSpace": // SCRIPT CAPITAL H - return rune(0x210b), true + return {'\u210b', 0}, 1, true case "Hopf": // DOUBLE-STRUCK CAPITAL H - return rune(0x210d), true + return {'\u210d', 0}, 1, true case "HorizontalLine": // BOX DRAWINGS LIGHT HORIZONTAL - return rune(0x2500), true + return {'\u2500', 0}, 1, true case "Hscr": // SCRIPT CAPITAL H - return rune(0x210b), true + return {'\u210b', 0}, 1, true case "Hstrok": // LATIN CAPITAL LETTER H WITH STROKE - return rune(0x0126), true + return {'\u0126', 0}, 1, true case "HumpDownHump": // GEOMETRICALLY EQUIVALENT TO - return rune(0x224e), true + return {'\u224e', 0}, 1, true case "HumpEqual": // DIFFERENCE BETWEEN - return rune(0x224f), true + return {'\u224f', 0}, 1, true } case 'I': switch name { case "IEcy": // CYRILLIC CAPITAL LETTER IE - return rune(0x0415), true + return {'\u0415', 0}, 1, true case "IJlig": // LATIN CAPITAL LIGATURE IJ - return rune(0x0132), true + return {'\u0132', 0}, 1, true case "IOcy": // CYRILLIC CAPITAL LETTER IO - return rune(0x0401), true + return {'\u0401', 0}, 1, true case "Iacgr": // GREEK CAPITAL LETTER IOTA WITH TONOS - return rune(0x038a), true + return {'\u038a', 0}, 1, true case "Iacute": // LATIN CAPITAL LETTER I WITH ACUTE - return rune(0xcd), true + return {'Í', 0}, 1, true case "Icirc": // LATIN CAPITAL LETTER I WITH CIRCUMFLEX - return rune(0xce), true + return {'Î', 0}, 1, true case "Icy": // CYRILLIC CAPITAL LETTER I - return rune(0x0418), true + return {'\u0418', 0}, 1, true case "Idigr": // GREEK CAPITAL LETTER IOTA WITH DIALYTIKA - return rune(0x03aa), true + return {'\u03aa', 0}, 1, true case "Idot": // LATIN CAPITAL LETTER I WITH DOT ABOVE - return rune(0x0130), true + return {'\u0130', 0}, 1, true case "Ifr": // BLACK-LETTER CAPITAL I - return rune(0x2111), true + return {'\u2111', 0}, 1, true case "Igr": // GREEK CAPITAL LETTER IOTA - return rune(0x0399), true + return {'\u0399', 0}, 1, true case "Igrave": // LATIN CAPITAL LETTER I WITH GRAVE - return rune(0xcc), true + return {'Ì', 0}, 1, true case "Im": // BLACK-LETTER CAPITAL I - return rune(0x2111), true + return {'\u2111', 0}, 1, true case "Imacr": // LATIN CAPITAL LETTER I WITH MACRON - return rune(0x012a), true + return {'\u012a', 0}, 1, true case "ImaginaryI": // DOUBLE-STRUCK ITALIC SMALL I - return rune(0x2148), true + return {'\u2148', 0}, 1, true case "Implies": // RIGHTWARDS DOUBLE ARROW - return rune(0x21d2), true + return {'\u21d2', 0}, 1, true case "Int": // DOUBLE INTEGRAL - return rune(0x222c), true + return {'\u222c', 0}, 1, true case "Integral": // INTEGRAL - return rune(0x222b), true + return {'\u222b', 0}, 1, true case "Intersection": // N-ARY INTERSECTION - return rune(0x22c2), true + return {'\u22c2', 0}, 1, true case "InvisibleComma": // INVISIBLE SEPARATOR - return rune(0x2063), true + return {'\u2063', 0}, 1, true case "InvisibleTimes": // INVISIBLE TIMES - return rune(0x2062), true + return {'\u2062', 0}, 1, true case "Iogon": // LATIN CAPITAL LETTER I WITH OGONEK - return rune(0x012e), true + return {'\u012e', 0}, 1, true case "Iopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL I - return rune(0x01d540), true + return {'\U0001d540', 0}, 1, true case "Iota": // GREEK CAPITAL LETTER IOTA - return rune(0x0399), true + return {'\u0399', 0}, 1, true case "Iscr": // SCRIPT CAPITAL I - return rune(0x2110), true + return {'\u2110', 0}, 1, true case "Itilde": // LATIN CAPITAL LETTER I WITH TILDE - return rune(0x0128), true + return {'\u0128', 0}, 1, true case "Iukcy": // CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I - return rune(0x0406), true + return {'\u0406', 0}, 1, true case "Iuml": // LATIN CAPITAL LETTER I WITH DIAERESIS - return rune(0xcf), true + return {'Ï', 0}, 1, true } case 'J': switch name { case "Jcirc": // LATIN CAPITAL LETTER J WITH CIRCUMFLEX - return rune(0x0134), true + return {'\u0134', 0}, 1, true case "Jcy": // CYRILLIC CAPITAL LETTER SHORT I - return rune(0x0419), true + return {'\u0419', 0}, 1, true case "Jfr": // MATHEMATICAL FRAKTUR CAPITAL J - return rune(0x01d50d), true + return {'\U0001d50d', 0}, 1, true case "Jopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL J - return rune(0x01d541), true + return {'\U0001d541', 0}, 1, true case "Jscr": // MATHEMATICAL SCRIPT CAPITAL J - return rune(0x01d4a5), true + return {'\U0001d4a5', 0}, 1, true case "Jsercy": // CYRILLIC CAPITAL LETTER JE - return rune(0x0408), true + return {'\u0408', 0}, 1, true case "Jukcy": // CYRILLIC CAPITAL LETTER UKRAINIAN IE - return rune(0x0404), true + return {'\u0404', 0}, 1, true } case 'K': switch name { case "KHcy": // CYRILLIC CAPITAL LETTER HA - return rune(0x0425), true + return {'\u0425', 0}, 1, true case "KHgr": // GREEK CAPITAL LETTER CHI - return rune(0x03a7), true + return {'\u03a7', 0}, 1, true case "KJcy": // CYRILLIC CAPITAL LETTER KJE - return rune(0x040c), true + return {'\u040c', 0}, 1, true case "Kappa": // GREEK CAPITAL LETTER KAPPA - return rune(0x039a), true + return {'\u039a', 0}, 1, true case "Kcedil": // LATIN CAPITAL LETTER K WITH CEDILLA - return rune(0x0136), true + return {'\u0136', 0}, 1, true case "Kcy": // CYRILLIC CAPITAL LETTER KA - return rune(0x041a), true + return {'\u041a', 0}, 1, true case "Kfr": // MATHEMATICAL FRAKTUR CAPITAL K - return rune(0x01d50e), true + return {'\U0001d50e', 0}, 1, true case "Kgr": // GREEK CAPITAL LETTER KAPPA - return rune(0x039a), true + return {'\u039a', 0}, 1, true case "Kopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL K - return rune(0x01d542), true + return {'\U0001d542', 0}, 1, true case "Kscr": // MATHEMATICAL SCRIPT CAPITAL K - return rune(0x01d4a6), true + return {'\U0001d4a6', 0}, 1, true } case 'L': switch name { case "LJcy": // CYRILLIC CAPITAL LETTER LJE - return rune(0x0409), true + return {'\u0409', 0}, 1, true case "LT": // LESS-THAN SIGN - return rune(0x3c), true + return {'<', 0}, 1, true case "Lacute": // LATIN CAPITAL LETTER L WITH ACUTE - return rune(0x0139), true + return {'\u0139', 0}, 1, true case "Lambda": // GREEK CAPITAL LETTER LAMDA - return rune(0x039b), true + return {'\u039b', 0}, 1, true case "Lang": // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET - return rune(0x27ea), true + return {'\u27ea', 0}, 1, true case "Laplacetrf": // SCRIPT CAPITAL L - return rune(0x2112), true + return {'\u2112', 0}, 1, true case "Larr": // LEFTWARDS TWO HEADED ARROW - return rune(0x219e), true + return {'\u219e', 0}, 1, true case "Lcaron": // LATIN CAPITAL LETTER L WITH CARON - return rune(0x013d), true + return {'\u013d', 0}, 1, true case "Lcedil": // LATIN CAPITAL LETTER L WITH CEDILLA - return rune(0x013b), true + return {'\u013b', 0}, 1, true case "Lcy": // CYRILLIC CAPITAL LETTER EL - return rune(0x041b), true + return {'\u041b', 0}, 1, true case "LeftAngleBracket": // MATHEMATICAL LEFT ANGLE BRACKET - return rune(0x27e8), true + return {'\u27e8', 0}, 1, true case "LeftArrow": // LEFTWARDS ARROW - return rune(0x2190), true + return {'\u2190', 0}, 1, true case "LeftArrowBar": // LEFTWARDS ARROW TO BAR - return rune(0x21e4), true + return {'\u21e4', 0}, 1, true case "LeftArrowRightArrow": // LEFTWARDS ARROW OVER RIGHTWARDS ARROW - return rune(0x21c6), true + return {'\u21c6', 0}, 1, true case "LeftCeiling": // LEFT CEILING - return rune(0x2308), true + return {'\u2308', 0}, 1, true case "LeftDoubleBracket": // MATHEMATICAL LEFT WHITE SQUARE BRACKET - return rune(0x27e6), true + return {'\u27e6', 0}, 1, true case "LeftDownTeeVector": // DOWNWARDS HARPOON WITH BARB LEFT FROM BAR - return rune(0x2961), true + return {'\u2961', 0}, 1, true case "LeftDownVector": // DOWNWARDS HARPOON WITH BARB LEFTWARDS - return rune(0x21c3), true + return {'\u21c3', 0}, 1, true case "LeftDownVectorBar": // DOWNWARDS HARPOON WITH BARB LEFT TO BAR - return rune(0x2959), true + return {'\u2959', 0}, 1, true case "LeftFloor": // LEFT FLOOR - return rune(0x230a), true + return {'\u230a', 0}, 1, true case "LeftRightArrow": // LEFT RIGHT ARROW - return rune(0x2194), true + return {'\u2194', 0}, 1, true case "LeftRightVector": // LEFT BARB UP RIGHT BARB UP HARPOON - return rune(0x294e), true + return {'\u294e', 0}, 1, true case "LeftTee": // LEFT TACK - return rune(0x22a3), true + return {'\u22a3', 0}, 1, true case "LeftTeeArrow": // LEFTWARDS ARROW FROM BAR - return rune(0x21a4), true + return {'\u21a4', 0}, 1, true case "LeftTeeVector": // LEFTWARDS HARPOON WITH BARB UP FROM BAR - return rune(0x295a), true + return {'\u295a', 0}, 1, true case "LeftTriangle": // NORMAL SUBGROUP OF - return rune(0x22b2), true + return {'\u22b2', 0}, 1, true case "LeftTriangleBar": // LEFT TRIANGLE BESIDE VERTICAL BAR - return rune(0x29cf), true + return {'\u29cf', 0}, 1, true case "LeftTriangleEqual": // NORMAL SUBGROUP OF OR EQUAL TO - return rune(0x22b4), true + return {'\u22b4', 0}, 1, true case "LeftUpDownVector": // UP BARB LEFT DOWN BARB LEFT HARPOON - return rune(0x2951), true + return {'\u2951', 0}, 1, true case "LeftUpTeeVector": // UPWARDS HARPOON WITH BARB LEFT FROM BAR - return rune(0x2960), true + return {'\u2960', 0}, 1, true case "LeftUpVector": // UPWARDS HARPOON WITH BARB LEFTWARDS - return rune(0x21bf), true + return {'\u21bf', 0}, 1, true case "LeftUpVectorBar": // UPWARDS HARPOON WITH BARB LEFT TO BAR - return rune(0x2958), true + return {'\u2958', 0}, 1, true case "LeftVector": // LEFTWARDS HARPOON WITH BARB UPWARDS - return rune(0x21bc), true + return {'\u21bc', 0}, 1, true case "LeftVectorBar": // LEFTWARDS HARPOON WITH BARB UP TO BAR - return rune(0x2952), true + return {'\u2952', 0}, 1, true case "Leftarrow": // LEFTWARDS DOUBLE ARROW - return rune(0x21d0), true + return {'\u21d0', 0}, 1, true case "Leftrightarrow": // LEFT RIGHT DOUBLE ARROW - return rune(0x21d4), true + return {'\u21d4', 0}, 1, true case "LessEqualGreater": // LESS-THAN EQUAL TO OR GREATER-THAN - return rune(0x22da), true + return {'\u22da', 0}, 1, true case "LessFullEqual": // LESS-THAN OVER EQUAL TO - return rune(0x2266), true + return {'\u2266', 0}, 1, true case "LessGreater": // LESS-THAN OR GREATER-THAN - return rune(0x2276), true + return {'\u2276', 0}, 1, true case "LessLess": // DOUBLE NESTED LESS-THAN - return rune(0x2aa1), true + return {'\u2aa1', 0}, 1, true case "LessSlantEqual": // LESS-THAN OR SLANTED EQUAL TO - return rune(0x2a7d), true + return {'\u2a7d', 0}, 1, true case "LessTilde": // LESS-THAN OR EQUIVALENT TO - return rune(0x2272), true + return {'\u2272', 0}, 1, true case "Lfr": // MATHEMATICAL FRAKTUR CAPITAL L - return rune(0x01d50f), true + return {'\U0001d50f', 0}, 1, true case "Lgr": // GREEK CAPITAL LETTER LAMDA - return rune(0x039b), true + return {'\u039b', 0}, 1, true case "Ll": // VERY MUCH LESS-THAN - return rune(0x22d8), true + return {'\u22d8', 0}, 1, true case "Lleftarrow": // LEFTWARDS TRIPLE ARROW - return rune(0x21da), true + return {'\u21da', 0}, 1, true case "Lmidot": // LATIN CAPITAL LETTER L WITH MIDDLE DOT - return rune(0x013f), true + return {'\u013f', 0}, 1, true case "LongLeftArrow": // LONG LEFTWARDS ARROW - return rune(0x27f5), true + return {'\u27f5', 0}, 1, true case "LongLeftRightArrow": // LONG LEFT RIGHT ARROW - return rune(0x27f7), true + return {'\u27f7', 0}, 1, true case "LongRightArrow": // LONG RIGHTWARDS ARROW - return rune(0x27f6), true + return {'\u27f6', 0}, 1, true case "Longleftarrow": // LONG LEFTWARDS DOUBLE ARROW - return rune(0x27f8), true + return {'\u27f8', 0}, 1, true case "Longleftrightarrow": // LONG LEFT RIGHT DOUBLE ARROW - return rune(0x27fa), true + return {'\u27fa', 0}, 1, true case "Longrightarrow": // LONG RIGHTWARDS DOUBLE ARROW - return rune(0x27f9), true + return {'\u27f9', 0}, 1, true case "Lopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL L - return rune(0x01d543), true + return {'\U0001d543', 0}, 1, true case "LowerLeftArrow": // SOUTH WEST ARROW - return rune(0x2199), true + return {'\u2199', 0}, 1, true case "LowerRightArrow": // SOUTH EAST ARROW - return rune(0x2198), true + return {'\u2198', 0}, 1, true case "Lscr": // SCRIPT CAPITAL L - return rune(0x2112), true + return {'\u2112', 0}, 1, true case "Lsh": // UPWARDS ARROW WITH TIP LEFTWARDS - return rune(0x21b0), true + return {'\u21b0', 0}, 1, true case "Lstrok": // LATIN CAPITAL LETTER L WITH STROKE - return rune(0x0141), true + return {'\u0141', 0}, 1, true case "Lt": // MUCH LESS-THAN - return rune(0x226a), true + return {'\u226a', 0}, 1, true case "Ltbar": // DOUBLE NESTED LESS-THAN WITH UNDERBAR - return rune(0x2aa3), true + return {'\u2aa3', 0}, 1, true } case 'M': switch name { case "Map": // RIGHTWARDS TWO-HEADED ARROW FROM BAR - return rune(0x2905), true + return {'\u2905', 0}, 1, true case "Mapfrom": // LEFTWARDS DOUBLE ARROW FROM BAR - return rune(0x2906), true + return {'\u2906', 0}, 1, true case "Mapto": // RIGHTWARDS DOUBLE ARROW FROM BAR - return rune(0x2907), true + return {'\u2907', 0}, 1, true case "Mcy": // CYRILLIC CAPITAL LETTER EM - return rune(0x041c), true + return {'\u041c', 0}, 1, true case "MediumSpace": // MEDIUM MATHEMATICAL SPACE - return rune(0x205f), true + return {'\u205f', 0}, 1, true case "Mellintrf": // SCRIPT CAPITAL M - return rune(0x2133), true + return {'\u2133', 0}, 1, true case "Mfr": // MATHEMATICAL FRAKTUR CAPITAL M - return rune(0x01d510), true + return {'\U0001d510', 0}, 1, true case "Mgr": // GREEK CAPITAL LETTER MU - return rune(0x039c), true + return {'\u039c', 0}, 1, true case "MinusPlus": // MINUS-OR-PLUS SIGN - return rune(0x2213), true + return {'\u2213', 0}, 1, true case "Mopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL M - return rune(0x01d544), true + return {'\U0001d544', 0}, 1, true case "Mscr": // SCRIPT CAPITAL M - return rune(0x2133), true + return {'\u2133', 0}, 1, true case "Mu": // GREEK CAPITAL LETTER MU - return rune(0x039c), true + return {'\u039c', 0}, 1, true } case 'N': switch name { case "NJcy": // CYRILLIC CAPITAL LETTER NJE - return rune(0x040a), true + return {'\u040a', 0}, 1, true case "Nacute": // LATIN CAPITAL LETTER N WITH ACUTE - return rune(0x0143), true + return {'\u0143', 0}, 1, true case "Ncaron": // LATIN CAPITAL LETTER N WITH CARON - return rune(0x0147), true + return {'\u0147', 0}, 1, true case "Ncedil": // LATIN CAPITAL LETTER N WITH CEDILLA - return rune(0x0145), true + return {'\u0145', 0}, 1, true case "Ncy": // CYRILLIC CAPITAL LETTER EN - return rune(0x041d), true + return {'\u041d', 0}, 1, true case "NegativeMediumSpace": // ZERO WIDTH SPACE - return rune(0x200b), true + return {'\u200b', 0}, 1, true case "NegativeThickSpace": // ZERO WIDTH SPACE - return rune(0x200b), true + return {'\u200b', 0}, 1, true case "NegativeThinSpace": // ZERO WIDTH SPACE - return rune(0x200b), true + return {'\u200b', 0}, 1, true case "NegativeVeryThinSpace": // ZERO WIDTH SPACE - return rune(0x200b), true + return {'\u200b', 0}, 1, true case "NestedGreaterGreater": // MUCH GREATER-THAN - return rune(0x226b), true + return {'\u226b', 0}, 1, true case "NestedLessLess": // MUCH LESS-THAN - return rune(0x226a), true + return {'\u226a', 0}, 1, true case "NewLine": // LINE FEED (LF) - return rune(0x0a), true + return {'\n', 0}, 1, true case "Nfr": // MATHEMATICAL FRAKTUR CAPITAL N - return rune(0x01d511), true + return {'\U0001d511', 0}, 1, true case "Ngr": // GREEK CAPITAL LETTER NU - return rune(0x039d), true + return {'\u039d', 0}, 1, true case "NoBreak": // WORD JOINER - return rune(0x2060), true + return {'\u2060', 0}, 1, true case "NonBreakingSpace": // NO-BREAK SPACE - return rune(0xa0), true + return {'\u00a0', 0}, 1, true case "Nopf": // DOUBLE-STRUCK CAPITAL N - return rune(0x2115), true + return {'\u2115', 0}, 1, true case "Not": // DOUBLE STROKE NOT SIGN - return rune(0x2aec), true + return {'\u2aec', 0}, 1, true case "NotCongruent": // NOT IDENTICAL TO - return rune(0x2262), true + return {'\u2262', 0}, 1, true case "NotCupCap": // NOT EQUIVALENT TO - return rune(0x226d), true + return {'\u226d', 0}, 1, true case "NotDoubleVerticalBar": // NOT PARALLEL TO - return rune(0x2226), true + return {'\u2226', 0}, 1, true case "NotElement": // NOT AN ELEMENT OF - return rune(0x2209), true + return {'\u2209', 0}, 1, true case "NotEqual": // NOT EQUAL TO - return rune(0x2260), true + return {'\u2260', 0}, 1, true case "NotEqualTilde": // MINUS TILDE with slash - return rune(0x2242), true + return {'\u2242', '\u2242'}, 2, true case "NotExists": // THERE DOES NOT EXIST - return rune(0x2204), true + return {'\u2204', 0}, 1, true case "NotGreater": // NOT GREATER-THAN - return rune(0x226f), true + return {'\u226f', 0}, 1, true case "NotGreaterEqual": // NEITHER GREATER-THAN NOR EQUAL TO - return rune(0x2271), true + return {'\u2271', 0}, 1, true case "NotGreaterFullEqual": // GREATER-THAN OVER EQUAL TO with slash - return rune(0x2267), true + return {'\u2267', '\u2267'}, 2, true case "NotGreaterGreater": // MUCH GREATER THAN with slash - return rune(0x226b), true + return {'\u226b', '\u226b'}, 2, true case "NotGreaterLess": // NEITHER GREATER-THAN NOR LESS-THAN - return rune(0x2279), true + return {'\u2279', 0}, 1, true case "NotGreaterSlantEqual": // GREATER-THAN OR SLANTED EQUAL TO with slash - return rune(0x2a7e), true + return {'\u2a7e', '\u2a7e'}, 2, true case "NotGreaterTilde": // NEITHER GREATER-THAN NOR EQUIVALENT TO - return rune(0x2275), true + return {'\u2275', 0}, 1, true case "NotHumpDownHump": // GEOMETRICALLY EQUIVALENT TO with slash - return rune(0x224e), true + return {'\u224e', '\u224e'}, 2, true case "NotHumpEqual": // DIFFERENCE BETWEEN with slash - return rune(0x224f), true + return {'\u224f', '\u224f'}, 2, true case "NotLeftTriangle": // NOT NORMAL SUBGROUP OF - return rune(0x22ea), true + return {'\u22ea', 0}, 1, true case "NotLeftTriangleBar": // LEFT TRIANGLE BESIDE VERTICAL BAR with slash - return rune(0x29cf), true + return {'\u29cf', '\u29cf'}, 2, true case "NotLeftTriangleEqual": // NOT NORMAL SUBGROUP OF OR EQUAL TO - return rune(0x22ec), true + return {'\u22ec', 0}, 1, true case "NotLess": // NOT LESS-THAN - return rune(0x226e), true + return {'\u226e', 0}, 1, true case "NotLessEqual": // NEITHER LESS-THAN NOR EQUAL TO - return rune(0x2270), true + return {'\u2270', 0}, 1, true case "NotLessGreater": // NEITHER LESS-THAN NOR GREATER-THAN - return rune(0x2278), true + return {'\u2278', 0}, 1, true case "NotLessLess": // MUCH LESS THAN with slash - return rune(0x226a), true + return {'\u226a', '\u226a'}, 2, true case "NotLessSlantEqual": // LESS-THAN OR SLANTED EQUAL TO with slash - return rune(0x2a7d), true + return {'\u2a7d', '\u2a7d'}, 2, true case "NotLessTilde": // NEITHER LESS-THAN NOR EQUIVALENT TO - return rune(0x2274), true + return {'\u2274', 0}, 1, true case "NotNestedGreaterGreater": // DOUBLE NESTED GREATER-THAN with slash - return rune(0x2aa2), true + return {'\u2aa2', '\u2aa2'}, 2, true case "NotNestedLessLess": // DOUBLE NESTED LESS-THAN with slash - return rune(0x2aa1), true + return {'\u2aa1', '\u2aa1'}, 2, true case "NotPrecedes": // DOES NOT PRECEDE - return rune(0x2280), true + return {'\u2280', 0}, 1, true case "NotPrecedesEqual": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash - return rune(0x2aaf), true + return {'\u2aaf', '\u2aaf'}, 2, true case "NotPrecedesSlantEqual": // DOES NOT PRECEDE OR EQUAL - return rune(0x22e0), true + return {'\u22e0', 0}, 1, true case "NotReverseElement": // DOES NOT CONTAIN AS MEMBER - return rune(0x220c), true + return {'\u220c', 0}, 1, true case "NotRightTriangle": // DOES NOT CONTAIN AS NORMAL SUBGROUP - return rune(0x22eb), true + return {'\u22eb', 0}, 1, true case "NotRightTriangleBar": // VERTICAL BAR BESIDE RIGHT TRIANGLE with slash - return rune(0x29d0), true + return {'\u29d0', '\u29d0'}, 2, true case "NotRightTriangleEqual": // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL - return rune(0x22ed), true + return {'\u22ed', 0}, 1, true case "NotSquareSubset": // SQUARE IMAGE OF with slash - return rune(0x228f), true + return {'\u228f', '\u228f'}, 2, true case "NotSquareSubsetEqual": // NOT SQUARE IMAGE OF OR EQUAL TO - return rune(0x22e2), true + return {'\u22e2', 0}, 1, true case "NotSquareSuperset": // SQUARE ORIGINAL OF with slash - return rune(0x2290), true + return {'\u2290', '\u2290'}, 2, true case "NotSquareSupersetEqual": // NOT SQUARE ORIGINAL OF OR EQUAL TO - return rune(0x22e3), true + return {'\u22e3', 0}, 1, true case "NotSubset": // SUBSET OF with vertical line - return rune(0x2282), true + return {'\u2282', '\u2282'}, 2, true case "NotSubsetEqual": // NEITHER A SUBSET OF NOR EQUAL TO - return rune(0x2288), true + return {'\u2288', 0}, 1, true case "NotSucceeds": // DOES NOT SUCCEED - return rune(0x2281), true + return {'\u2281', 0}, 1, true case "NotSucceedsEqual": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash - return rune(0x2ab0), true + return {'\u2ab0', '\u2ab0'}, 2, true case "NotSucceedsSlantEqual": // DOES NOT SUCCEED OR EQUAL - return rune(0x22e1), true + return {'\u22e1', 0}, 1, true case "NotSucceedsTilde": // SUCCEEDS OR EQUIVALENT TO with slash - return rune(0x227f), true + return {'\u227f', '\u227f'}, 2, true case "NotSuperset": // SUPERSET OF with vertical line - return rune(0x2283), true + return {'\u2283', '\u2283'}, 2, true case "NotSupersetEqual": // NEITHER A SUPERSET OF NOR EQUAL TO - return rune(0x2289), true + return {'\u2289', 0}, 1, true case "NotTilde": // NOT TILDE - return rune(0x2241), true + return {'\u2241', 0}, 1, true case "NotTildeEqual": // NOT ASYMPTOTICALLY EQUAL TO - return rune(0x2244), true + return {'\u2244', 0}, 1, true case "NotTildeFullEqual": // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO - return rune(0x2247), true + return {'\u2247', 0}, 1, true case "NotTildeTilde": // NOT ALMOST EQUAL TO - return rune(0x2249), true + return {'\u2249', 0}, 1, true case "NotVerticalBar": // DOES NOT DIVIDE - return rune(0x2224), true + return {'\u2224', 0}, 1, true case "Nscr": // MATHEMATICAL SCRIPT CAPITAL N - return rune(0x01d4a9), true + return {'\U0001d4a9', 0}, 1, true case "Ntilde": // LATIN CAPITAL LETTER N WITH TILDE - return rune(0xd1), true + return {'Ñ', 0}, 1, true case "Nu": // GREEK CAPITAL LETTER NU - return rune(0x039d), true + return {'\u039d', 0}, 1, true } case 'O': switch name { case "OElig": // LATIN CAPITAL LIGATURE OE - return rune(0x0152), true + return {'\u0152', 0}, 1, true case "OHacgr": // GREEK CAPITAL LETTER OMEGA WITH TONOS - return rune(0x038f), true + return {'\u038f', 0}, 1, true case "OHgr": // GREEK CAPITAL LETTER OMEGA - return rune(0x03a9), true + return {'\u03a9', 0}, 1, true case "Oacgr": // GREEK CAPITAL LETTER OMICRON WITH TONOS - return rune(0x038c), true + return {'\u038c', 0}, 1, true case "Oacute": // LATIN CAPITAL LETTER O WITH ACUTE - return rune(0xd3), true + return {'Ó', 0}, 1, true case "Ocirc": // LATIN CAPITAL LETTER O WITH CIRCUMFLEX - return rune(0xd4), true + return {'Ô', 0}, 1, true case "Ocy": // CYRILLIC CAPITAL LETTER O - return rune(0x041e), true + return {'\u041e', 0}, 1, true case "Odblac": // LATIN CAPITAL LETTER O WITH DOUBLE ACUTE - return rune(0x0150), true + return {'\u0150', 0}, 1, true case "Ofr": // MATHEMATICAL FRAKTUR CAPITAL O - return rune(0x01d512), true + return {'\U0001d512', 0}, 1, true case "Ogr": // GREEK CAPITAL LETTER OMICRON - return rune(0x039f), true + return {'\u039f', 0}, 1, true case "Ograve": // LATIN CAPITAL LETTER O WITH GRAVE - return rune(0xd2), true + return {'Ò', 0}, 1, true case "Omacr": // LATIN CAPITAL LETTER O WITH MACRON - return rune(0x014c), true + return {'\u014c', 0}, 1, true case "Omega": // GREEK CAPITAL LETTER OMEGA - return rune(0x03a9), true + return {'\u03a9', 0}, 1, true case "Omicron": // GREEK CAPITAL LETTER OMICRON - return rune(0x039f), true + return {'\u039f', 0}, 1, true case "Oopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL O - return rune(0x01d546), true + return {'\U0001d546', 0}, 1, true case "OpenCurlyDoubleQuote": // LEFT DOUBLE QUOTATION MARK - return rune(0x201c), true + return {'\u201c', 0}, 1, true case "OpenCurlyQuote": // LEFT SINGLE QUOTATION MARK - return rune(0x2018), true + return {'\u2018', 0}, 1, true case "Or": // DOUBLE LOGICAL OR - return rune(0x2a54), true + return {'\u2a54', 0}, 1, true case "Oscr": // MATHEMATICAL SCRIPT CAPITAL O - return rune(0x01d4aa), true + return {'\U0001d4aa', 0}, 1, true case "Oslash": // LATIN CAPITAL LETTER O WITH STROKE - return rune(0xd8), true + return {'Ø', 0}, 1, true case "Otilde": // LATIN CAPITAL LETTER O WITH TILDE - return rune(0xd5), true + return {'Õ', 0}, 1, true case "Otimes": // MULTIPLICATION SIGN IN DOUBLE CIRCLE - return rune(0x2a37), true + return {'\u2a37', 0}, 1, true case "Ouml": // LATIN CAPITAL LETTER O WITH DIAERESIS - return rune(0xd6), true + return {'Ö', 0}, 1, true case "OverBar": // OVERLINE - return rune(0x203e), true + return {'\u203e', 0}, 1, true case "OverBrace": // TOP CURLY BRACKET - return rune(0x23de), true + return {'\u23de', 0}, 1, true case "OverBracket": // TOP SQUARE BRACKET - return rune(0x23b4), true + return {'\u23b4', 0}, 1, true case "OverParenthesis": // TOP PARENTHESIS - return rune(0x23dc), true + return {'\u23dc', 0}, 1, true } case 'P': switch name { case "PHgr": // GREEK CAPITAL LETTER PHI - return rune(0x03a6), true + return {'\u03a6', 0}, 1, true case "PSgr": // GREEK CAPITAL LETTER PSI - return rune(0x03a8), true + return {'\u03a8', 0}, 1, true case "PartialD": // PARTIAL DIFFERENTIAL - return rune(0x2202), true + return {'\u2202', 0}, 1, true case "Pcy": // CYRILLIC CAPITAL LETTER PE - return rune(0x041f), true + return {'\u041f', 0}, 1, true case "Pfr": // MATHEMATICAL FRAKTUR CAPITAL P - return rune(0x01d513), true + return {'\U0001d513', 0}, 1, true case "Pgr": // GREEK CAPITAL LETTER PI - return rune(0x03a0), true + return {'\u03a0', 0}, 1, true case "Phi": // GREEK CAPITAL LETTER PHI - return rune(0x03a6), true + return {'\u03a6', 0}, 1, true case "Pi": // GREEK CAPITAL LETTER PI - return rune(0x03a0), true + return {'\u03a0', 0}, 1, true case "PlusMinus": // PLUS-MINUS SIGN - return rune(0xb1), true + return {'±', 0}, 1, true case "Poincareplane": // BLACK-LETTER CAPITAL H - return rune(0x210c), true + return {'\u210c', 0}, 1, true case "Popf": // DOUBLE-STRUCK CAPITAL P - return rune(0x2119), true + return {'\u2119', 0}, 1, true case "Pr": // DOUBLE PRECEDES - return rune(0x2abb), true + return {'\u2abb', 0}, 1, true case "Precedes": // PRECEDES - return rune(0x227a), true + return {'\u227a', 0}, 1, true case "PrecedesEqual": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN - return rune(0x2aaf), true + return {'\u2aaf', 0}, 1, true case "PrecedesSlantEqual": // PRECEDES OR EQUAL TO - return rune(0x227c), true + return {'\u227c', 0}, 1, true case "PrecedesTilde": // PRECEDES OR EQUIVALENT TO - return rune(0x227e), true + return {'\u227e', 0}, 1, true case "Prime": // DOUBLE PRIME - return rune(0x2033), true + return {'\u2033', 0}, 1, true case "Product": // N-ARY PRODUCT - return rune(0x220f), true + return {'\u220f', 0}, 1, true case "Proportion": // PROPORTION - return rune(0x2237), true + return {'\u2237', 0}, 1, true case "Proportional": // PROPORTIONAL TO - return rune(0x221d), true + return {'\u221d', 0}, 1, true case "Pscr": // MATHEMATICAL SCRIPT CAPITAL P - return rune(0x01d4ab), true + return {'\U0001d4ab', 0}, 1, true case "Psi": // GREEK CAPITAL LETTER PSI - return rune(0x03a8), true + return {'\u03a8', 0}, 1, true } case 'Q': switch name { case "QUOT": // QUOTATION MARK - return rune(0x22), true + return {'"', 0}, 1, true case "Qfr": // MATHEMATICAL FRAKTUR CAPITAL Q - return rune(0x01d514), true + return {'\U0001d514', 0}, 1, true case "Qopf": // DOUBLE-STRUCK CAPITAL Q - return rune(0x211a), true + return {'\u211a', 0}, 1, true case "Qscr": // MATHEMATICAL SCRIPT CAPITAL Q - return rune(0x01d4ac), true + return {'\U0001d4ac', 0}, 1, true } case 'R': switch name { case "RBarr": // RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW - return rune(0x2910), true + return {'\u2910', 0}, 1, true case "REG": // REGISTERED SIGN - return rune(0xae), true + return {'®', 0}, 1, true case "Racute": // LATIN CAPITAL LETTER R WITH ACUTE - return rune(0x0154), true + return {'\u0154', 0}, 1, true case "Rang": // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET - return rune(0x27eb), true + return {'\u27eb', 0}, 1, true case "Rarr": // RIGHTWARDS TWO HEADED ARROW - return rune(0x21a0), true + return {'\u21a0', 0}, 1, true case "Rarrtl": // RIGHTWARDS TWO-HEADED ARROW WITH TAIL - return rune(0x2916), true + return {'\u2916', 0}, 1, true case "Rcaron": // LATIN CAPITAL LETTER R WITH CARON - return rune(0x0158), true + return {'\u0158', 0}, 1, true case "Rcedil": // LATIN CAPITAL LETTER R WITH CEDILLA - return rune(0x0156), true + return {'\u0156', 0}, 1, true case "Rcy": // CYRILLIC CAPITAL LETTER ER - return rune(0x0420), true + return {'\u0420', 0}, 1, true case "Re": // BLACK-LETTER CAPITAL R - return rune(0x211c), true + return {'\u211c', 0}, 1, true case "ReverseElement": // CONTAINS AS MEMBER - return rune(0x220b), true + return {'\u220b', 0}, 1, true case "ReverseEquilibrium": // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON - return rune(0x21cb), true + return {'\u21cb', 0}, 1, true case "ReverseUpEquilibrium": // DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT - return rune(0x296f), true + return {'\u296f', 0}, 1, true case "Rfr": // BLACK-LETTER CAPITAL R - return rune(0x211c), true + return {'\u211c', 0}, 1, true case "Rgr": // GREEK CAPITAL LETTER RHO - return rune(0x03a1), true + return {'\u03a1', 0}, 1, true case "Rho": // GREEK CAPITAL LETTER RHO - return rune(0x03a1), true + return {'\u03a1', 0}, 1, true case "RightAngleBracket": // MATHEMATICAL RIGHT ANGLE BRACKET - return rune(0x27e9), true + return {'\u27e9', 0}, 1, true case "RightArrow": // RIGHTWARDS ARROW - return rune(0x2192), true + return {'\u2192', 0}, 1, true case "RightArrowBar": // RIGHTWARDS ARROW TO BAR - return rune(0x21e5), true + return {'\u21e5', 0}, 1, true case "RightArrowLeftArrow": // RIGHTWARDS ARROW OVER LEFTWARDS ARROW - return rune(0x21c4), true + return {'\u21c4', 0}, 1, true case "RightCeiling": // RIGHT CEILING - return rune(0x2309), true + return {'\u2309', 0}, 1, true case "RightDoubleBracket": // MATHEMATICAL RIGHT WHITE SQUARE BRACKET - return rune(0x27e7), true + return {'\u27e7', 0}, 1, true case "RightDownTeeVector": // DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR - return rune(0x295d), true + return {'\u295d', 0}, 1, true case "RightDownVector": // DOWNWARDS HARPOON WITH BARB RIGHTWARDS - return rune(0x21c2), true + return {'\u21c2', 0}, 1, true case "RightDownVectorBar": // DOWNWARDS HARPOON WITH BARB RIGHT TO BAR - return rune(0x2955), true + return {'\u2955', 0}, 1, true case "RightFloor": // RIGHT FLOOR - return rune(0x230b), true + return {'\u230b', 0}, 1, true case "RightTee": // RIGHT TACK - return rune(0x22a2), true + return {'\u22a2', 0}, 1, true case "RightTeeArrow": // RIGHTWARDS ARROW FROM BAR - return rune(0x21a6), true + return {'\u21a6', 0}, 1, true case "RightTeeVector": // RIGHTWARDS HARPOON WITH BARB UP FROM BAR - return rune(0x295b), true + return {'\u295b', 0}, 1, true case "RightTriangle": // CONTAINS AS NORMAL SUBGROUP - return rune(0x22b3), true + return {'\u22b3', 0}, 1, true case "RightTriangleBar": // VERTICAL BAR BESIDE RIGHT TRIANGLE - return rune(0x29d0), true + return {'\u29d0', 0}, 1, true case "RightTriangleEqual": // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO - return rune(0x22b5), true + return {'\u22b5', 0}, 1, true case "RightUpDownVector": // UP BARB RIGHT DOWN BARB RIGHT HARPOON - return rune(0x294f), true + return {'\u294f', 0}, 1, true case "RightUpTeeVector": // UPWARDS HARPOON WITH BARB RIGHT FROM BAR - return rune(0x295c), true + return {'\u295c', 0}, 1, true case "RightUpVector": // UPWARDS HARPOON WITH BARB RIGHTWARDS - return rune(0x21be), true + return {'\u21be', 0}, 1, true case "RightUpVectorBar": // UPWARDS HARPOON WITH BARB RIGHT TO BAR - return rune(0x2954), true + return {'\u2954', 0}, 1, true case "RightVector": // RIGHTWARDS HARPOON WITH BARB UPWARDS - return rune(0x21c0), true + return {'\u21c0', 0}, 1, true case "RightVectorBar": // RIGHTWARDS HARPOON WITH BARB UP TO BAR - return rune(0x2953), true + return {'\u2953', 0}, 1, true case "Rightarrow": // RIGHTWARDS DOUBLE ARROW - return rune(0x21d2), true + return {'\u21d2', 0}, 1, true case "Ropf": // DOUBLE-STRUCK CAPITAL R - return rune(0x211d), true + return {'\u211d', 0}, 1, true case "RoundImplies": // RIGHT DOUBLE ARROW WITH ROUNDED HEAD - return rune(0x2970), true + return {'\u2970', 0}, 1, true case "Rrightarrow": // RIGHTWARDS TRIPLE ARROW - return rune(0x21db), true + return {'\u21db', 0}, 1, true case "Rscr": // SCRIPT CAPITAL R - return rune(0x211b), true + return {'\u211b', 0}, 1, true case "Rsh": // UPWARDS ARROW WITH TIP RIGHTWARDS - return rune(0x21b1), true + return {'\u21b1', 0}, 1, true case "RuleDelayed": // RULE-DELAYED - return rune(0x29f4), true + return {'\u29f4', 0}, 1, true } case 'S': switch name { case "SHCHcy": // CYRILLIC CAPITAL LETTER SHCHA - return rune(0x0429), true + return {'\u0429', 0}, 1, true case "SHcy": // CYRILLIC CAPITAL LETTER SHA - return rune(0x0428), true + return {'\u0428', 0}, 1, true case "SOFTcy": // CYRILLIC CAPITAL LETTER SOFT SIGN - return rune(0x042c), true + return {'\u042c', 0}, 1, true case "Sacute": // LATIN CAPITAL LETTER S WITH ACUTE - return rune(0x015a), true + return {'\u015a', 0}, 1, true case "Sc": // DOUBLE SUCCEEDS - return rune(0x2abc), true + return {'\u2abc', 0}, 1, true case "Scaron": // LATIN CAPITAL LETTER S WITH CARON - return rune(0x0160), true + return {'\u0160', 0}, 1, true case "Scedil": // LATIN CAPITAL LETTER S WITH CEDILLA - return rune(0x015e), true + return {'\u015e', 0}, 1, true case "Scirc": // LATIN CAPITAL LETTER S WITH CIRCUMFLEX - return rune(0x015c), true + return {'\u015c', 0}, 1, true case "Scy": // CYRILLIC CAPITAL LETTER ES - return rune(0x0421), true + return {'\u0421', 0}, 1, true case "Sfr": // MATHEMATICAL FRAKTUR CAPITAL S - return rune(0x01d516), true + return {'\U0001d516', 0}, 1, true case "Sgr": // GREEK CAPITAL LETTER SIGMA - return rune(0x03a3), true + return {'\u03a3', 0}, 1, true case "ShortDownArrow": // DOWNWARDS ARROW - return rune(0x2193), true + return {'\u2193', 0}, 1, true case "ShortLeftArrow": // LEFTWARDS ARROW - return rune(0x2190), true + return {'\u2190', 0}, 1, true case "ShortRightArrow": // RIGHTWARDS ARROW - return rune(0x2192), true + return {'\u2192', 0}, 1, true case "ShortUpArrow": // UPWARDS ARROW - return rune(0x2191), true + return {'\u2191', 0}, 1, true case "Sigma": // GREEK CAPITAL LETTER SIGMA - return rune(0x03a3), true + return {'\u03a3', 0}, 1, true case "SmallCircle": // RING OPERATOR - return rune(0x2218), true + return {'\u2218', 0}, 1, true case "Sopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL S - return rune(0x01d54a), true + return {'\U0001d54a', 0}, 1, true case "Sqrt": // SQUARE ROOT - return rune(0x221a), true + return {'\u221a', 0}, 1, true case "Square": // WHITE SQUARE - return rune(0x25a1), true + return {'\u25a1', 0}, 1, true case "SquareIntersection": // SQUARE CAP - return rune(0x2293), true + return {'\u2293', 0}, 1, true case "SquareSubset": // SQUARE IMAGE OF - return rune(0x228f), true + return {'\u228f', 0}, 1, true case "SquareSubsetEqual": // SQUARE IMAGE OF OR EQUAL TO - return rune(0x2291), true + return {'\u2291', 0}, 1, true case "SquareSuperset": // SQUARE ORIGINAL OF - return rune(0x2290), true + return {'\u2290', 0}, 1, true case "SquareSupersetEqual": // SQUARE ORIGINAL OF OR EQUAL TO - return rune(0x2292), true + return {'\u2292', 0}, 1, true case "SquareUnion": // SQUARE CUP - return rune(0x2294), true + return {'\u2294', 0}, 1, true case "Sscr": // MATHEMATICAL SCRIPT CAPITAL S - return rune(0x01d4ae), true + return {'\U0001d4ae', 0}, 1, true case "Star": // STAR OPERATOR - return rune(0x22c6), true + return {'\u22c6', 0}, 1, true case "Sub": // DOUBLE SUBSET - return rune(0x22d0), true + return {'\u22d0', 0}, 1, true case "Subset": // DOUBLE SUBSET - return rune(0x22d0), true + return {'\u22d0', 0}, 1, true case "SubsetEqual": // SUBSET OF OR EQUAL TO - return rune(0x2286), true + return {'\u2286', 0}, 1, true case "Succeeds": // SUCCEEDS - return rune(0x227b), true + return {'\u227b', 0}, 1, true case "SucceedsEqual": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN - return rune(0x2ab0), true + return {'\u2ab0', 0}, 1, true case "SucceedsSlantEqual": // SUCCEEDS OR EQUAL TO - return rune(0x227d), true + return {'\u227d', 0}, 1, true case "SucceedsTilde": // SUCCEEDS OR EQUIVALENT TO - return rune(0x227f), true + return {'\u227f', 0}, 1, true case "SuchThat": // CONTAINS AS MEMBER - return rune(0x220b), true + return {'\u220b', 0}, 1, true case "Sum": // N-ARY SUMMATION - return rune(0x2211), true + return {'\u2211', 0}, 1, true case "Sup": // DOUBLE SUPERSET - return rune(0x22d1), true + return {'\u22d1', 0}, 1, true case "Superset": // SUPERSET OF - return rune(0x2283), true + return {'\u2283', 0}, 1, true case "SupersetEqual": // SUPERSET OF OR EQUAL TO - return rune(0x2287), true + return {'\u2287', 0}, 1, true case "Supset": // DOUBLE SUPERSET - return rune(0x22d1), true + return {'\u22d1', 0}, 1, true } case 'T': switch name { case "THORN": // LATIN CAPITAL LETTER THORN - return rune(0xde), true + return {'Þ', 0}, 1, true case "THgr": // GREEK CAPITAL LETTER THETA - return rune(0x0398), true + return {'\u0398', 0}, 1, true case "TRADE": // TRADE MARK SIGN - return rune(0x2122), true + return {'\u2122', 0}, 1, true case "TSHcy": // CYRILLIC CAPITAL LETTER TSHE - return rune(0x040b), true + return {'\u040b', 0}, 1, true case "TScy": // CYRILLIC CAPITAL LETTER TSE - return rune(0x0426), true + return {'\u0426', 0}, 1, true case "Tab": // CHARACTER TABULATION - return rune(0x09), true + return {'\t', 0}, 1, true case "Tau": // GREEK CAPITAL LETTER TAU - return rune(0x03a4), true + return {'\u03a4', 0}, 1, true case "Tcaron": // LATIN CAPITAL LETTER T WITH CARON - return rune(0x0164), true + return {'\u0164', 0}, 1, true case "Tcedil": // LATIN CAPITAL LETTER T WITH CEDILLA - return rune(0x0162), true + return {'\u0162', 0}, 1, true case "Tcy": // CYRILLIC CAPITAL LETTER TE - return rune(0x0422), true + return {'\u0422', 0}, 1, true case "Tfr": // MATHEMATICAL FRAKTUR CAPITAL T - return rune(0x01d517), true + return {'\U0001d517', 0}, 1, true case "Tgr": // GREEK CAPITAL LETTER TAU - return rune(0x03a4), true + return {'\u03a4', 0}, 1, true case "Therefore": // THEREFORE - return rune(0x2234), true + return {'\u2234', 0}, 1, true case "Theta": // GREEK CAPITAL LETTER THETA - return rune(0x0398), true + return {'\u0398', 0}, 1, true case "Thetav": // GREEK CAPITAL THETA SYMBOL - return rune(0x03f4), true + return {'\u03f4', 0}, 1, true case "ThickSpace": // space of width 5/18 em - return rune(0x205f), true + return {'\u205f', '\u205f'}, 2, true case "ThinSpace": // THIN SPACE - return rune(0x2009), true + return {'\u2009', 0}, 1, true case "Tilde": // TILDE OPERATOR - return rune(0x223c), true + return {'\u223c', 0}, 1, true case "TildeEqual": // ASYMPTOTICALLY EQUAL TO - return rune(0x2243), true + return {'\u2243', 0}, 1, true case "TildeFullEqual": // APPROXIMATELY EQUAL TO - return rune(0x2245), true + return {'\u2245', 0}, 1, true case "TildeTilde": // ALMOST EQUAL TO - return rune(0x2248), true + return {'\u2248', 0}, 1, true case "Topf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL T - return rune(0x01d54b), true + return {'\U0001d54b', 0}, 1, true case "TripleDot": // COMBINING THREE DOTS ABOVE - return rune(0x20db), true + return {'\u20db', 0}, 1, true case "Tscr": // MATHEMATICAL SCRIPT CAPITAL T - return rune(0x01d4af), true + return {'\U0001d4af', 0}, 1, true case "Tstrok": // LATIN CAPITAL LETTER T WITH STROKE - return rune(0x0166), true + return {'\u0166', 0}, 1, true } case 'U': switch name { case "Uacgr": // GREEK CAPITAL LETTER UPSILON WITH TONOS - return rune(0x038e), true + return {'\u038e', 0}, 1, true case "Uacute": // LATIN CAPITAL LETTER U WITH ACUTE - return rune(0xda), true + return {'Ú', 0}, 1, true case "Uarr": // UPWARDS TWO HEADED ARROW - return rune(0x219f), true + return {'\u219f', 0}, 1, true case "Uarrocir": // UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE - return rune(0x2949), true + return {'\u2949', 0}, 1, true case "Ubrcy": // CYRILLIC CAPITAL LETTER SHORT U - return rune(0x040e), true + return {'\u040e', 0}, 1, true case "Ubreve": // LATIN CAPITAL LETTER U WITH BREVE - return rune(0x016c), true + return {'\u016c', 0}, 1, true case "Ucirc": // LATIN CAPITAL LETTER U WITH CIRCUMFLEX - return rune(0xdb), true + return {'Û', 0}, 1, true case "Ucy": // CYRILLIC CAPITAL LETTER U - return rune(0x0423), true + return {'\u0423', 0}, 1, true case "Udblac": // LATIN CAPITAL LETTER U WITH DOUBLE ACUTE - return rune(0x0170), true + return {'\u0170', 0}, 1, true case "Udigr": // GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA - return rune(0x03ab), true + return {'\u03ab', 0}, 1, true case "Ufr": // MATHEMATICAL FRAKTUR CAPITAL U - return rune(0x01d518), true + return {'\U0001d518', 0}, 1, true case "Ugr": // GREEK CAPITAL LETTER UPSILON - return rune(0x03a5), true + return {'\u03a5', 0}, 1, true case "Ugrave": // LATIN CAPITAL LETTER U WITH GRAVE - return rune(0xd9), true + return {'Ù', 0}, 1, true case "Umacr": // LATIN CAPITAL LETTER U WITH MACRON - return rune(0x016a), true + return {'\u016a', 0}, 1, true case "UnderBar": // LOW LINE - return rune(0x5f), true + return {'_', 0}, 1, true case "UnderBrace": // BOTTOM CURLY BRACKET - return rune(0x23df), true + return {'\u23df', 0}, 1, true case "UnderBracket": // BOTTOM SQUARE BRACKET - return rune(0x23b5), true + return {'\u23b5', 0}, 1, true case "UnderParenthesis": // BOTTOM PARENTHESIS - return rune(0x23dd), true + return {'\u23dd', 0}, 1, true case "Union": // N-ARY UNION - return rune(0x22c3), true + return {'\u22c3', 0}, 1, true case "UnionPlus": // MULTISET UNION - return rune(0x228e), true + return {'\u228e', 0}, 1, true case "Uogon": // LATIN CAPITAL LETTER U WITH OGONEK - return rune(0x0172), true + return {'\u0172', 0}, 1, true case "Uopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL U - return rune(0x01d54c), true + return {'\U0001d54c', 0}, 1, true case "UpArrow": // UPWARDS ARROW - return rune(0x2191), true + return {'\u2191', 0}, 1, true case "UpArrowBar": // UPWARDS ARROW TO BAR - return rune(0x2912), true + return {'\u2912', 0}, 1, true case "UpArrowDownArrow": // UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW - return rune(0x21c5), true + return {'\u21c5', 0}, 1, true case "UpDownArrow": // UP DOWN ARROW - return rune(0x2195), true + return {'\u2195', 0}, 1, true case "UpEquilibrium": // UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT - return rune(0x296e), true + return {'\u296e', 0}, 1, true case "UpTee": // UP TACK - return rune(0x22a5), true + return {'\u22a5', 0}, 1, true case "UpTeeArrow": // UPWARDS ARROW FROM BAR - return rune(0x21a5), true + return {'\u21a5', 0}, 1, true case "Uparrow": // UPWARDS DOUBLE ARROW - return rune(0x21d1), true + return {'\u21d1', 0}, 1, true case "Updownarrow": // UP DOWN DOUBLE ARROW - return rune(0x21d5), true + return {'\u21d5', 0}, 1, true case "UpperLeftArrow": // NORTH WEST ARROW - return rune(0x2196), true + return {'\u2196', 0}, 1, true case "UpperRightArrow": // NORTH EAST ARROW - return rune(0x2197), true + return {'\u2197', 0}, 1, true case "Upsi": // GREEK UPSILON WITH HOOK SYMBOL - return rune(0x03d2), true + return {'\u03d2', 0}, 1, true case "Upsilon": // GREEK CAPITAL LETTER UPSILON - return rune(0x03a5), true + return {'\u03a5', 0}, 1, true case "Uring": // LATIN CAPITAL LETTER U WITH RING ABOVE - return rune(0x016e), true + return {'\u016e', 0}, 1, true case "Uscr": // MATHEMATICAL SCRIPT CAPITAL U - return rune(0x01d4b0), true + return {'\U0001d4b0', 0}, 1, true case "Utilde": // LATIN CAPITAL LETTER U WITH TILDE - return rune(0x0168), true + return {'\u0168', 0}, 1, true case "Uuml": // LATIN CAPITAL LETTER U WITH DIAERESIS - return rune(0xdc), true + return {'Ü', 0}, 1, true } case 'V': switch name { case "VDash": // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE - return rune(0x22ab), true + return {'\u22ab', 0}, 1, true case "Vbar": // DOUBLE UP TACK - return rune(0x2aeb), true + return {'\u2aeb', 0}, 1, true case "Vcy": // CYRILLIC CAPITAL LETTER VE - return rune(0x0412), true + return {'\u0412', 0}, 1, true case "Vdash": // FORCES - return rune(0x22a9), true + return {'\u22a9', 0}, 1, true case "Vdashl": // LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL - return rune(0x2ae6), true + return {'\u2ae6', 0}, 1, true case "Vee": // N-ARY LOGICAL OR - return rune(0x22c1), true + return {'\u22c1', 0}, 1, true case "Verbar": // DOUBLE VERTICAL LINE - return rune(0x2016), true + return {'\u2016', 0}, 1, true case "Vert": // DOUBLE VERTICAL LINE - return rune(0x2016), true + return {'\u2016', 0}, 1, true case "VerticalBar": // DIVIDES - return rune(0x2223), true + return {'\u2223', 0}, 1, true case "VerticalLine": // VERTICAL LINE - return rune(0x7c), true + return {'|', 0}, 1, true case "VerticalSeparator": // LIGHT VERTICAL BAR - return rune(0x2758), true + return {'\u2758', 0}, 1, true case "VerticalTilde": // WREATH PRODUCT - return rune(0x2240), true + return {'\u2240', 0}, 1, true case "VeryThinSpace": // HAIR SPACE - return rune(0x200a), true + return {'\u200a', 0}, 1, true case "Vfr": // MATHEMATICAL FRAKTUR CAPITAL V - return rune(0x01d519), true + return {'\U0001d519', 0}, 1, true case "Vopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL V - return rune(0x01d54d), true + return {'\U0001d54d', 0}, 1, true case "Vscr": // MATHEMATICAL SCRIPT CAPITAL V - return rune(0x01d4b1), true + return {'\U0001d4b1', 0}, 1, true case "Vvdash": // TRIPLE VERTICAL BAR RIGHT TURNSTILE - return rune(0x22aa), true + return {'\u22aa', 0}, 1, true } case 'W': switch name { case "Wcirc": // LATIN CAPITAL LETTER W WITH CIRCUMFLEX - return rune(0x0174), true + return {'\u0174', 0}, 1, true case "Wedge": // N-ARY LOGICAL AND - return rune(0x22c0), true + return {'\u22c0', 0}, 1, true case "Wfr": // MATHEMATICAL FRAKTUR CAPITAL W - return rune(0x01d51a), true + return {'\U0001d51a', 0}, 1, true case "Wopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL W - return rune(0x01d54e), true + return {'\U0001d54e', 0}, 1, true case "Wscr": // MATHEMATICAL SCRIPT CAPITAL W - return rune(0x01d4b2), true + return {'\U0001d4b2', 0}, 1, true } case 'X': switch name { case "Xfr": // MATHEMATICAL FRAKTUR CAPITAL X - return rune(0x01d51b), true + return {'\U0001d51b', 0}, 1, true case "Xgr": // GREEK CAPITAL LETTER XI - return rune(0x039e), true + return {'\u039e', 0}, 1, true case "Xi": // GREEK CAPITAL LETTER XI - return rune(0x039e), true + return {'\u039e', 0}, 1, true case "Xopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL X - return rune(0x01d54f), true + return {'\U0001d54f', 0}, 1, true case "Xscr": // MATHEMATICAL SCRIPT CAPITAL X - return rune(0x01d4b3), true + return {'\U0001d4b3', 0}, 1, true } case 'Y': switch name { case "YAcy": // CYRILLIC CAPITAL LETTER YA - return rune(0x042f), true + return {'\u042f', 0}, 1, true case "YIcy": // CYRILLIC CAPITAL LETTER YI - return rune(0x0407), true + return {'\u0407', 0}, 1, true case "YUcy": // CYRILLIC CAPITAL LETTER YU - return rune(0x042e), true + return {'\u042e', 0}, 1, true case "Yacute": // LATIN CAPITAL LETTER Y WITH ACUTE - return rune(0xdd), true + return {'Ý', 0}, 1, true case "Ycirc": // LATIN CAPITAL LETTER Y WITH CIRCUMFLEX - return rune(0x0176), true + return {'\u0176', 0}, 1, true case "Ycy": // CYRILLIC CAPITAL LETTER YERU - return rune(0x042b), true + return {'\u042b', 0}, 1, true case "Yfr": // MATHEMATICAL FRAKTUR CAPITAL Y - return rune(0x01d51c), true + return {'\U0001d51c', 0}, 1, true case "Yopf": // MATHEMATICAL DOUBLE-STRUCK CAPITAL Y - return rune(0x01d550), true + return {'\U0001d550', 0}, 1, true case "Yscr": // MATHEMATICAL SCRIPT CAPITAL Y - return rune(0x01d4b4), true + return {'\U0001d4b4', 0}, 1, true case "Yuml": // LATIN CAPITAL LETTER Y WITH DIAERESIS - return rune(0x0178), true + return {'\u0178', 0}, 1, true } case 'Z': switch name { case "ZHcy": // CYRILLIC CAPITAL LETTER ZHE - return rune(0x0416), true + return {'\u0416', 0}, 1, true case "Zacute": // LATIN CAPITAL LETTER Z WITH ACUTE - return rune(0x0179), true + return {'\u0179', 0}, 1, true case "Zcaron": // LATIN CAPITAL LETTER Z WITH CARON - return rune(0x017d), true + return {'\u017d', 0}, 1, true case "Zcy": // CYRILLIC CAPITAL LETTER ZE - return rune(0x0417), true + return {'\u0417', 0}, 1, true case "Zdot": // LATIN CAPITAL LETTER Z WITH DOT ABOVE - return rune(0x017b), true + return {'\u017b', 0}, 1, true case "ZeroWidthSpace": // ZERO WIDTH SPACE - return rune(0x200b), true + return {'\u200b', 0}, 1, true case "Zeta": // GREEK CAPITAL LETTER ZETA - return rune(0x0396), true + return {'\u0396', 0}, 1, true case "Zfr": // BLACK-LETTER CAPITAL Z - return rune(0x2128), true + return {'\u2128', 0}, 1, true case "Zgr": // GREEK CAPITAL LETTER ZETA - return rune(0x0396), true + return {'\u0396', 0}, 1, true case "Zopf": // DOUBLE-STRUCK CAPITAL Z - return rune(0x2124), true + return {'\u2124', 0}, 1, true case "Zscr": // MATHEMATICAL SCRIPT CAPITAL Z - return rune(0x01d4b5), true + return {'\U0001d4b5', 0}, 1, true } case 'a': switch name { case "aacgr": // GREEK SMALL LETTER ALPHA WITH TONOS - return rune(0x03ac), true + return {'\u03ac', 0}, 1, true case "aacute": // LATIN SMALL LETTER A WITH ACUTE - return rune(0xe1), true + return {'á', 0}, 1, true case "abreve": // LATIN SMALL LETTER A WITH BREVE - return rune(0x0103), true + return {'\u0103', 0}, 1, true case "ac": // INVERTED LAZY S - return rune(0x223e), true + return {'\u223e', 0}, 1, true case "acE": // INVERTED LAZY S with double underline - return rune(0x223e), true + return {'\u223e', '\u223e'}, 2, true case "acd": // SINE WAVE - return rune(0x223f), true + return {'\u223f', 0}, 1, true case "acirc": // LATIN SMALL LETTER A WITH CIRCUMFLEX - return rune(0xe2), true + return {'â', 0}, 1, true case "actuary": // COMBINING ANNUITY SYMBOL - return rune(0x20e7), true + return {'\u20e7', 0}, 1, true case "acute": // ACUTE ACCENT - return rune(0xb4), true + return {'´', 0}, 1, true case "acy": // CYRILLIC SMALL LETTER A - return rune(0x0430), true + return {'\u0430', 0}, 1, true case "aelig": // LATIN SMALL LETTER AE - return rune(0xe6), true + return {'æ', 0}, 1, true case "af": // FUNCTION APPLICATION - return rune(0x2061), true + return {'\u2061', 0}, 1, true case "afr": // MATHEMATICAL FRAKTUR SMALL A - return rune(0x01d51e), true + return {'\U0001d51e', 0}, 1, true case "agr": // GREEK SMALL LETTER ALPHA - return rune(0x03b1), true + return {'\u03b1', 0}, 1, true case "agrave": // LATIN SMALL LETTER A WITH GRAVE - return rune(0xe0), true + return {'à', 0}, 1, true case "alefsym": // ALEF SYMBOL - return rune(0x2135), true + return {'\u2135', 0}, 1, true case "aleph": // ALEF SYMBOL - return rune(0x2135), true + return {'\u2135', 0}, 1, true case "alpha": // GREEK SMALL LETTER ALPHA - return rune(0x03b1), true + return {'\u03b1', 0}, 1, true case "amacr": // LATIN SMALL LETTER A WITH MACRON - return rune(0x0101), true + return {'\u0101', 0}, 1, true case "amalg": // AMALGAMATION OR COPRODUCT - return rune(0x2a3f), true + return {'\u2a3f', 0}, 1, true case "amp": // AMPERSAND - return rune(0x26), true + return {'&', 0}, 1, true case "and": // LOGICAL AND - return rune(0x2227), true + return {'\u2227', 0}, 1, true case "andand": // TWO INTERSECTING LOGICAL AND - return rune(0x2a55), true + return {'\u2a55', 0}, 1, true case "andd": // LOGICAL AND WITH HORIZONTAL DASH - return rune(0x2a5c), true + return {'\u2a5c', 0}, 1, true case "andslope": // SLOPING LARGE AND - return rune(0x2a58), true + return {'\u2a58', 0}, 1, true case "andv": // LOGICAL AND WITH MIDDLE STEM - return rune(0x2a5a), true + return {'\u2a5a', 0}, 1, true case "ang": // ANGLE - return rune(0x2220), true + return {'\u2220', 0}, 1, true case "ang90": // RIGHT ANGLE - return rune(0x221f), true + return {'\u221f', 0}, 1, true case "angdnl": // TURNED ANGLE - return rune(0x29a2), true + return {'\u29a2', 0}, 1, true case "angdnr": // ACUTE ANGLE - return rune(0x299f), true + return {'\u299f', 0}, 1, true case "ange": // ANGLE WITH UNDERBAR - return rune(0x29a4), true + return {'\u29a4', 0}, 1, true case "angle": // ANGLE - return rune(0x2220), true + return {'\u2220', 0}, 1, true case "angles": // ANGLE WITH S INSIDE - return rune(0x299e), true + return {'\u299e', 0}, 1, true case "angmsd": // MEASURED ANGLE - return rune(0x2221), true + return {'\u2221', 0}, 1, true case "angmsdaa": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT - return rune(0x29a8), true + return {'\u29a8', 0}, 1, true case "angmsdab": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT - return rune(0x29a9), true + return {'\u29a9', 0}, 1, true case "angmsdac": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT - return rune(0x29aa), true + return {'\u29aa', 0}, 1, true case "angmsdad": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT - return rune(0x29ab), true + return {'\u29ab', 0}, 1, true case "angmsdae": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP - return rune(0x29ac), true + return {'\u29ac', 0}, 1, true case "angmsdaf": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP - return rune(0x29ad), true + return {'\u29ad', 0}, 1, true case "angmsdag": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN - return rune(0x29ae), true + return {'\u29ae', 0}, 1, true case "angmsdah": // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN - return rune(0x29af), true + return {'\u29af', 0}, 1, true case "angrt": // RIGHT ANGLE - return rune(0x221f), true + return {'\u221f', 0}, 1, true case "angrtvb": // RIGHT ANGLE WITH ARC - return rune(0x22be), true + return {'\u22be', 0}, 1, true case "angrtvbd": // MEASURED RIGHT ANGLE WITH DOT - return rune(0x299d), true + return {'\u299d', 0}, 1, true case "angsph": // SPHERICAL ANGLE - return rune(0x2222), true + return {'\u2222', 0}, 1, true case "angst": // LATIN CAPITAL LETTER A WITH RING ABOVE - return rune(0xc5), true + return {'Å', 0}, 1, true case "angupl": // REVERSED ANGLE - return rune(0x29a3), true + return {'\u29a3', 0}, 1, true case "angzarr": // RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW - return rune(0x237c), true + return {'\u237c', 0}, 1, true case "aogon": // LATIN SMALL LETTER A WITH OGONEK - return rune(0x0105), true + return {'\u0105', 0}, 1, true case "aopf": // MATHEMATICAL DOUBLE-STRUCK SMALL A - return rune(0x01d552), true + return {'\U0001d552', 0}, 1, true case "ap": // ALMOST EQUAL TO - return rune(0x2248), true + return {'\u2248', 0}, 1, true case "apE": // APPROXIMATELY EQUAL OR EQUAL TO - return rune(0x2a70), true + return {'\u2a70', 0}, 1, true case "apacir": // ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT - return rune(0x2a6f), true + return {'\u2a6f', 0}, 1, true case "ape": // ALMOST EQUAL OR EQUAL TO - return rune(0x224a), true + return {'\u224a', 0}, 1, true case "apid": // TRIPLE TILDE - return rune(0x224b), true + return {'\u224b', 0}, 1, true case "apos": // APOSTROPHE - return rune(0x27), true + return {'\'', 0}, 1, true case "approx": // ALMOST EQUAL TO - return rune(0x2248), true + return {'\u2248', 0}, 1, true case "approxeq": // ALMOST EQUAL OR EQUAL TO - return rune(0x224a), true + return {'\u224a', 0}, 1, true case "aring": // LATIN SMALL LETTER A WITH RING ABOVE - return rune(0xe5), true + return {'å', 0}, 1, true case "arrllsr": // LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW - return rune(0x2943), true + return {'\u2943', 0}, 1, true case "arrlrsl": // RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW - return rune(0x2942), true + return {'\u2942', 0}, 1, true case "arrsrll": // SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW - return rune(0x2944), true + return {'\u2944', 0}, 1, true case "ascr": // MATHEMATICAL SCRIPT SMALL A - return rune(0x01d4b6), true + return {'\U0001d4b6', 0}, 1, true case "ast": // ASTERISK - return rune(0x2a), true + return {'*', 0}, 1, true case "astb": // SQUARED ASTERISK - return rune(0x29c6), true + return {'\u29c6', 0}, 1, true case "asymp": // ALMOST EQUAL TO - return rune(0x2248), true + return {'\u2248', 0}, 1, true case "asympeq": // EQUIVALENT TO - return rune(0x224d), true + return {'\u224d', 0}, 1, true case "atilde": // LATIN SMALL LETTER A WITH TILDE - return rune(0xe3), true + return {'ã', 0}, 1, true case "auml": // LATIN SMALL LETTER A WITH DIAERESIS - return rune(0xe4), true + return {'ä', 0}, 1, true case "awconint": // ANTICLOCKWISE CONTOUR INTEGRAL - return rune(0x2233), true + return {'\u2233', 0}, 1, true case "awint": // ANTICLOCKWISE INTEGRATION - return rune(0x2a11), true + return {'\u2a11', 0}, 1, true } case 'b': switch name { case "b.Delta": // MATHEMATICAL BOLD CAPITAL DELTA - return rune(0x01d6ab), true + return {'\U0001d6ab', 0}, 1, true case "b.Gamma": // MATHEMATICAL BOLD CAPITAL GAMMA - return rune(0x01d6aa), true + return {'\U0001d6aa', 0}, 1, true case "b.Gammad": // MATHEMATICAL BOLD CAPITAL DIGAMMA - return rune(0x01d7ca), true + return {'\U0001d7ca', 0}, 1, true case "b.Lambda": // MATHEMATICAL BOLD CAPITAL LAMDA - return rune(0x01d6b2), true + return {'\U0001d6b2', 0}, 1, true case "b.Omega": // MATHEMATICAL BOLD CAPITAL OMEGA - return rune(0x01d6c0), true + return {'\U0001d6c0', 0}, 1, true case "b.Phi": // MATHEMATICAL BOLD CAPITAL PHI - return rune(0x01d6bd), true + return {'\U0001d6bd', 0}, 1, true case "b.Pi": // MATHEMATICAL BOLD CAPITAL PI - return rune(0x01d6b7), true + return {'\U0001d6b7', 0}, 1, true case "b.Psi": // MATHEMATICAL BOLD CAPITAL PSI - return rune(0x01d6bf), true + return {'\U0001d6bf', 0}, 1, true case "b.Sigma": // MATHEMATICAL BOLD CAPITAL SIGMA - return rune(0x01d6ba), true + return {'\U0001d6ba', 0}, 1, true case "b.Theta": // MATHEMATICAL BOLD CAPITAL THETA - return rune(0x01d6af), true + return {'\U0001d6af', 0}, 1, true case "b.Upsi": // MATHEMATICAL BOLD CAPITAL UPSILON - return rune(0x01d6bc), true + return {'\U0001d6bc', 0}, 1, true case "b.Xi": // MATHEMATICAL BOLD CAPITAL XI - return rune(0x01d6b5), true + return {'\U0001d6b5', 0}, 1, true case "b.alpha": // MATHEMATICAL BOLD SMALL ALPHA - return rune(0x01d6c2), true + return {'\U0001d6c2', 0}, 1, true case "b.beta": // MATHEMATICAL BOLD SMALL BETA - return rune(0x01d6c3), true + return {'\U0001d6c3', 0}, 1, true case "b.chi": // MATHEMATICAL BOLD SMALL CHI - return rune(0x01d6d8), true + return {'\U0001d6d8', 0}, 1, true case "b.delta": // MATHEMATICAL BOLD SMALL DELTA - return rune(0x01d6c5), true + return {'\U0001d6c5', 0}, 1, true case "b.epsi": // MATHEMATICAL BOLD SMALL EPSILON - return rune(0x01d6c6), true + return {'\U0001d6c6', 0}, 1, true case "b.epsiv": // MATHEMATICAL BOLD EPSILON SYMBOL - return rune(0x01d6dc), true + return {'\U0001d6dc', 0}, 1, true case "b.eta": // MATHEMATICAL BOLD SMALL ETA - return rune(0x01d6c8), true + return {'\U0001d6c8', 0}, 1, true case "b.gamma": // MATHEMATICAL BOLD SMALL GAMMA - return rune(0x01d6c4), true + return {'\U0001d6c4', 0}, 1, true case "b.gammad": // MATHEMATICAL BOLD SMALL DIGAMMA - return rune(0x01d7cb), true + return {'\U0001d7cb', 0}, 1, true case "b.iota": // MATHEMATICAL BOLD SMALL IOTA - return rune(0x01d6ca), true + return {'\U0001d6ca', 0}, 1, true case "b.kappa": // MATHEMATICAL BOLD SMALL KAPPA - return rune(0x01d6cb), true + return {'\U0001d6cb', 0}, 1, true case "b.kappav": // MATHEMATICAL BOLD KAPPA SYMBOL - return rune(0x01d6de), true + return {'\U0001d6de', 0}, 1, true case "b.lambda": // MATHEMATICAL BOLD SMALL LAMDA - return rune(0x01d6cc), true + return {'\U0001d6cc', 0}, 1, true case "b.mu": // MATHEMATICAL BOLD SMALL MU - return rune(0x01d6cd), true + return {'\U0001d6cd', 0}, 1, true case "b.nu": // MATHEMATICAL BOLD SMALL NU - return rune(0x01d6ce), true + return {'\U0001d6ce', 0}, 1, true case "b.omega": // MATHEMATICAL BOLD SMALL OMEGA - return rune(0x01d6da), true + return {'\U0001d6da', 0}, 1, true case "b.phi": // MATHEMATICAL BOLD SMALL PHI - return rune(0x01d6d7), true + return {'\U0001d6d7', 0}, 1, true case "b.phiv": // MATHEMATICAL BOLD PHI SYMBOL - return rune(0x01d6df), true + return {'\U0001d6df', 0}, 1, true case "b.pi": // MATHEMATICAL BOLD SMALL PI - return rune(0x01d6d1), true + return {'\U0001d6d1', 0}, 1, true case "b.piv": // MATHEMATICAL BOLD PI SYMBOL - return rune(0x01d6e1), true + return {'\U0001d6e1', 0}, 1, true case "b.psi": // MATHEMATICAL BOLD SMALL PSI - return rune(0x01d6d9), true + return {'\U0001d6d9', 0}, 1, true case "b.rho": // MATHEMATICAL BOLD SMALL RHO - return rune(0x01d6d2), true + return {'\U0001d6d2', 0}, 1, true case "b.rhov": // MATHEMATICAL BOLD RHO SYMBOL - return rune(0x01d6e0), true + return {'\U0001d6e0', 0}, 1, true case "b.sigma": // MATHEMATICAL BOLD SMALL SIGMA - return rune(0x01d6d4), true + return {'\U0001d6d4', 0}, 1, true case "b.sigmav": // MATHEMATICAL BOLD SMALL FINAL SIGMA - return rune(0x01d6d3), true + return {'\U0001d6d3', 0}, 1, true case "b.tau": // MATHEMATICAL BOLD SMALL TAU - return rune(0x01d6d5), true + return {'\U0001d6d5', 0}, 1, true case "b.thetas": // MATHEMATICAL BOLD SMALL THETA - return rune(0x01d6c9), true + return {'\U0001d6c9', 0}, 1, true case "b.thetav": // MATHEMATICAL BOLD THETA SYMBOL - return rune(0x01d6dd), true + return {'\U0001d6dd', 0}, 1, true case "b.upsi": // MATHEMATICAL BOLD SMALL UPSILON - return rune(0x01d6d6), true + return {'\U0001d6d6', 0}, 1, true case "b.xi": // MATHEMATICAL BOLD SMALL XI - return rune(0x01d6cf), true + return {'\U0001d6cf', 0}, 1, true case "b.zeta": // MATHEMATICAL BOLD SMALL ZETA - return rune(0x01d6c7), true + return {'\U0001d6c7', 0}, 1, true case "bNot": // REVERSED DOUBLE STROKE NOT SIGN - return rune(0x2aed), true + return {'\u2aed', 0}, 1, true case "backcong": // ALL EQUAL TO - return rune(0x224c), true + return {'\u224c', 0}, 1, true case "backepsilon": // GREEK REVERSED LUNATE EPSILON SYMBOL - return rune(0x03f6), true + return {'\u03f6', 0}, 1, true case "backprime": // REVERSED PRIME - return rune(0x2035), true + return {'\u2035', 0}, 1, true case "backsim": // REVERSED TILDE - return rune(0x223d), true + return {'\u223d', 0}, 1, true case "backsimeq": // REVERSED TILDE EQUALS - return rune(0x22cd), true + return {'\u22cd', 0}, 1, true case "barV": // DOUBLE DOWN TACK - return rune(0x2aea), true + return {'\u2aea', 0}, 1, true case "barvee": // NOR - return rune(0x22bd), true + return {'\u22bd', 0}, 1, true case "barwed": // PROJECTIVE - return rune(0x2305), true + return {'\u2305', 0}, 1, true case "barwedge": // PROJECTIVE - return rune(0x2305), true + return {'\u2305', 0}, 1, true case "bbrk": // BOTTOM SQUARE BRACKET - return rune(0x23b5), true + return {'\u23b5', 0}, 1, true case "bbrktbrk": // BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET - return rune(0x23b6), true + return {'\u23b6', 0}, 1, true case "bcong": // ALL EQUAL TO - return rune(0x224c), true + return {'\u224c', 0}, 1, true case "bcy": // CYRILLIC SMALL LETTER BE - return rune(0x0431), true + return {'\u0431', 0}, 1, true case "bdlhar": // DOWNWARDS HARPOON WITH BARB LEFT FROM BAR - return rune(0x2961), true + return {'\u2961', 0}, 1, true case "bdquo": // DOUBLE LOW-9 QUOTATION MARK - return rune(0x201e), true + return {'\u201e', 0}, 1, true case "bdrhar": // DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR - return rune(0x295d), true + return {'\u295d', 0}, 1, true case "becaus": // BECAUSE - return rune(0x2235), true + return {'\u2235', 0}, 1, true case "because": // BECAUSE - return rune(0x2235), true + return {'\u2235', 0}, 1, true case "bemptyv": // REVERSED EMPTY SET - return rune(0x29b0), true + return {'\u29b0', 0}, 1, true case "bepsi": // GREEK REVERSED LUNATE EPSILON SYMBOL - return rune(0x03f6), true + return {'\u03f6', 0}, 1, true case "bernou": // SCRIPT CAPITAL B - return rune(0x212c), true + return {'\u212c', 0}, 1, true case "beta": // GREEK SMALL LETTER BETA - return rune(0x03b2), true + return {'\u03b2', 0}, 1, true case "beth": // BET SYMBOL - return rune(0x2136), true + return {'\u2136', 0}, 1, true case "between": // BETWEEN - return rune(0x226c), true + return {'\u226c', 0}, 1, true case "bfr": // MATHEMATICAL FRAKTUR SMALL B - return rune(0x01d51f), true + return {'\U0001d51f', 0}, 1, true case "bgr": // GREEK SMALL LETTER BETA - return rune(0x03b2), true + return {'\u03b2', 0}, 1, true case "bigcap": // N-ARY INTERSECTION - return rune(0x22c2), true + return {'\u22c2', 0}, 1, true case "bigcirc": // LARGE CIRCLE - return rune(0x25ef), true + return {'\u25ef', 0}, 1, true case "bigcup": // N-ARY UNION - return rune(0x22c3), true + return {'\u22c3', 0}, 1, true case "bigodot": // N-ARY CIRCLED DOT OPERATOR - return rune(0x2a00), true + return {'\u2a00', 0}, 1, true case "bigoplus": // N-ARY CIRCLED PLUS OPERATOR - return rune(0x2a01), true + return {'\u2a01', 0}, 1, true case "bigotimes": // N-ARY CIRCLED TIMES OPERATOR - return rune(0x2a02), true + return {'\u2a02', 0}, 1, true case "bigsqcup": // N-ARY SQUARE UNION OPERATOR - return rune(0x2a06), true + return {'\u2a06', 0}, 1, true case "bigstar": // BLACK STAR - return rune(0x2605), true + return {'\u2605', 0}, 1, true case "bigtriangledown": // WHITE DOWN-POINTING TRIANGLE - return rune(0x25bd), true + return {'\u25bd', 0}, 1, true case "bigtriangleup": // WHITE UP-POINTING TRIANGLE - return rune(0x25b3), true + return {'\u25b3', 0}, 1, true case "biguplus": // N-ARY UNION OPERATOR WITH PLUS - return rune(0x2a04), true + return {'\u2a04', 0}, 1, true case "bigvee": // N-ARY LOGICAL OR - return rune(0x22c1), true + return {'\u22c1', 0}, 1, true case "bigwedge": // N-ARY LOGICAL AND - return rune(0x22c0), true + return {'\u22c0', 0}, 1, true case "bkarow": // RIGHTWARDS DOUBLE DASH ARROW - return rune(0x290d), true + return {'\u290d', 0}, 1, true case "blacklozenge": // BLACK LOZENGE - return rune(0x29eb), true + return {'\u29eb', 0}, 1, true case "blacksquare": // BLACK SMALL SQUARE - return rune(0x25aa), true + return {'\u25aa', 0}, 1, true case "blacktriangle": // BLACK UP-POINTING SMALL TRIANGLE - return rune(0x25b4), true + return {'\u25b4', 0}, 1, true case "blacktriangledown": // BLACK DOWN-POINTING SMALL TRIANGLE - return rune(0x25be), true + return {'\u25be', 0}, 1, true case "blacktriangleleft": // BLACK LEFT-POINTING SMALL TRIANGLE - return rune(0x25c2), true + return {'\u25c2', 0}, 1, true case "blacktriangleright": // BLACK RIGHT-POINTING SMALL TRIANGLE - return rune(0x25b8), true + return {'\u25b8', 0}, 1, true case "blank": // BLANK SYMBOL - return rune(0x2422), true + return {'\u2422', 0}, 1, true case "bldhar": // LEFTWARDS HARPOON WITH BARB DOWN FROM BAR - return rune(0x295e), true + return {'\u295e', 0}, 1, true case "blk12": // MEDIUM SHADE - return rune(0x2592), true + return {'\u2592', 0}, 1, true case "blk14": // LIGHT SHADE - return rune(0x2591), true + return {'\u2591', 0}, 1, true case "blk34": // DARK SHADE - return rune(0x2593), true + return {'\u2593', 0}, 1, true case "block": // FULL BLOCK - return rune(0x2588), true + return {'\u2588', 0}, 1, true case "bluhar": // LEFTWARDS HARPOON WITH BARB UP FROM BAR - return rune(0x295a), true + return {'\u295a', 0}, 1, true case "bne": // EQUALS SIGN with reverse slash - return rune(0x3d), true + return {'=', '='}, 2, true case "bnequiv": // IDENTICAL TO with reverse slash - return rune(0x2261), true + return {'\u2261', '\u2261'}, 2, true case "bnot": // REVERSED NOT SIGN - return rune(0x2310), true + return {'\u2310', 0}, 1, true case "bopf": // MATHEMATICAL DOUBLE-STRUCK SMALL B - return rune(0x01d553), true + return {'\U0001d553', 0}, 1, true case "bot": // UP TACK - return rune(0x22a5), true + return {'\u22a5', 0}, 1, true case "bottom": // UP TACK - return rune(0x22a5), true + return {'\u22a5', 0}, 1, true case "bowtie": // BOWTIE - return rune(0x22c8), true + return {'\u22c8', 0}, 1, true case "boxDL": // BOX DRAWINGS DOUBLE DOWN AND LEFT - return rune(0x2557), true + return {'\u2557', 0}, 1, true case "boxDR": // BOX DRAWINGS DOUBLE DOWN AND RIGHT - return rune(0x2554), true + return {'\u2554', 0}, 1, true case "boxDl": // BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE - return rune(0x2556), true + return {'\u2556', 0}, 1, true case "boxDr": // BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE - return rune(0x2553), true + return {'\u2553', 0}, 1, true case "boxH": // BOX DRAWINGS DOUBLE HORIZONTAL - return rune(0x2550), true + return {'\u2550', 0}, 1, true case "boxHD": // BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL - return rune(0x2566), true + return {'\u2566', 0}, 1, true case "boxHU": // BOX DRAWINGS DOUBLE UP AND HORIZONTAL - return rune(0x2569), true + return {'\u2569', 0}, 1, true case "boxHd": // BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE - return rune(0x2564), true + return {'\u2564', 0}, 1, true case "boxHu": // BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE - return rune(0x2567), true + return {'\u2567', 0}, 1, true case "boxUL": // BOX DRAWINGS DOUBLE UP AND LEFT - return rune(0x255d), true + return {'\u255d', 0}, 1, true case "boxUR": // BOX DRAWINGS DOUBLE UP AND RIGHT - return rune(0x255a), true + return {'\u255a', 0}, 1, true case "boxUl": // BOX DRAWINGS UP DOUBLE AND LEFT SINGLE - return rune(0x255c), true + return {'\u255c', 0}, 1, true case "boxUr": // BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE - return rune(0x2559), true + return {'\u2559', 0}, 1, true case "boxV": // BOX DRAWINGS DOUBLE VERTICAL - return rune(0x2551), true + return {'\u2551', 0}, 1, true case "boxVH": // BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL - return rune(0x256c), true + return {'\u256c', 0}, 1, true case "boxVL": // BOX DRAWINGS DOUBLE VERTICAL AND LEFT - return rune(0x2563), true + return {'\u2563', 0}, 1, true case "boxVR": // BOX DRAWINGS DOUBLE VERTICAL AND RIGHT - return rune(0x2560), true + return {'\u2560', 0}, 1, true case "boxVh": // BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE - return rune(0x256b), true + return {'\u256b', 0}, 1, true case "boxVl": // BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE - return rune(0x2562), true + return {'\u2562', 0}, 1, true case "boxVr": // BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE - return rune(0x255f), true + return {'\u255f', 0}, 1, true case "boxbox": // TWO JOINED SQUARES - return rune(0x29c9), true + return {'\u29c9', 0}, 1, true case "boxdL": // BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE - return rune(0x2555), true + return {'\u2555', 0}, 1, true case "boxdR": // BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE - return rune(0x2552), true + return {'\u2552', 0}, 1, true case "boxdl": // BOX DRAWINGS LIGHT DOWN AND LEFT - return rune(0x2510), true + return {'\u2510', 0}, 1, true case "boxdr": // BOX DRAWINGS LIGHT DOWN AND RIGHT - return rune(0x250c), true + return {'\u250c', 0}, 1, true case "boxh": // BOX DRAWINGS LIGHT HORIZONTAL - return rune(0x2500), true + return {'\u2500', 0}, 1, true case "boxhD": // BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE - return rune(0x2565), true + return {'\u2565', 0}, 1, true case "boxhU": // BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE - return rune(0x2568), true + return {'\u2568', 0}, 1, true case "boxhd": // BOX DRAWINGS LIGHT DOWN AND HORIZONTAL - return rune(0x252c), true + return {'\u252c', 0}, 1, true case "boxhu": // BOX DRAWINGS LIGHT UP AND HORIZONTAL - return rune(0x2534), true + return {'\u2534', 0}, 1, true case "boxminus": // SQUARED MINUS - return rune(0x229f), true + return {'\u229f', 0}, 1, true case "boxplus": // SQUARED PLUS - return rune(0x229e), true + return {'\u229e', 0}, 1, true case "boxtimes": // SQUARED TIMES - return rune(0x22a0), true + return {'\u22a0', 0}, 1, true case "boxuL": // BOX DRAWINGS UP SINGLE AND LEFT DOUBLE - return rune(0x255b), true + return {'\u255b', 0}, 1, true case "boxuR": // BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE - return rune(0x2558), true + return {'\u2558', 0}, 1, true case "boxul": // BOX DRAWINGS LIGHT UP AND LEFT - return rune(0x2518), true + return {'\u2518', 0}, 1, true case "boxur": // BOX DRAWINGS LIGHT UP AND RIGHT - return rune(0x2514), true + return {'\u2514', 0}, 1, true case "boxv": // BOX DRAWINGS LIGHT VERTICAL - return rune(0x2502), true + return {'\u2502', 0}, 1, true case "boxvH": // BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE - return rune(0x256a), true + return {'\u256a', 0}, 1, true case "boxvL": // BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE - return rune(0x2561), true + return {'\u2561', 0}, 1, true case "boxvR": // BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE - return rune(0x255e), true + return {'\u255e', 0}, 1, true case "boxvh": // BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL - return rune(0x253c), true + return {'\u253c', 0}, 1, true case "boxvl": // BOX DRAWINGS LIGHT VERTICAL AND LEFT - return rune(0x2524), true + return {'\u2524', 0}, 1, true case "boxvr": // BOX DRAWINGS LIGHT VERTICAL AND RIGHT - return rune(0x251c), true + return {'\u251c', 0}, 1, true case "bprime": // REVERSED PRIME - return rune(0x2035), true + return {'\u2035', 0}, 1, true case "brdhar": // RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR - return rune(0x295f), true + return {'\u295f', 0}, 1, true case "breve": // BREVE - return rune(0x02d8), true + return {'\u02d8', 0}, 1, true case "bruhar": // RIGHTWARDS HARPOON WITH BARB UP FROM BAR - return rune(0x295b), true + return {'\u295b', 0}, 1, true case "brvbar": // BROKEN BAR - return rune(0xa6), true + return {'¦', 0}, 1, true case "bscr": // MATHEMATICAL SCRIPT SMALL B - return rune(0x01d4b7), true + return {'\U0001d4b7', 0}, 1, true case "bsemi": // REVERSED SEMICOLON - return rune(0x204f), true + return {'\u204f', 0}, 1, true case "bsim": // REVERSED TILDE - return rune(0x223d), true + return {'\u223d', 0}, 1, true case "bsime": // REVERSED TILDE EQUALS - return rune(0x22cd), true + return {'\u22cd', 0}, 1, true case "bsol": // REVERSE SOLIDUS - return rune(0x5c), true + return {'\\', 0}, 1, true case "bsolb": // SQUARED FALLING DIAGONAL SLASH - return rune(0x29c5), true + return {'\u29c5', 0}, 1, true case "bsolhsub": // REVERSE SOLIDUS PRECEDING SUBSET - return rune(0x27c8), true + return {'\u27c8', 0}, 1, true case "btimes": // SEMIDIRECT PRODUCT WITH BOTTOM CLOSED - return rune(0x2a32), true + return {'\u2a32', 0}, 1, true case "bulhar": // UPWARDS HARPOON WITH BARB LEFT FROM BAR - return rune(0x2960), true + return {'\u2960', 0}, 1, true case "bull": // BULLET - return rune(0x2022), true + return {'\u2022', 0}, 1, true case "bullet": // BULLET - return rune(0x2022), true + return {'\u2022', 0}, 1, true case "bump": // GEOMETRICALLY EQUIVALENT TO - return rune(0x224e), true + return {'\u224e', 0}, 1, true case "bumpE": // EQUALS SIGN WITH BUMPY ABOVE - return rune(0x2aae), true + return {'\u2aae', 0}, 1, true case "bumpe": // DIFFERENCE BETWEEN - return rune(0x224f), true + return {'\u224f', 0}, 1, true case "bumpeq": // DIFFERENCE BETWEEN - return rune(0x224f), true + return {'\u224f', 0}, 1, true case "burhar": // UPWARDS HARPOON WITH BARB RIGHT FROM BAR - return rune(0x295c), true + return {'\u295c', 0}, 1, true } case 'c': switch name { case "cacute": // LATIN SMALL LETTER C WITH ACUTE - return rune(0x0107), true + return {'\u0107', 0}, 1, true case "cap": // INTERSECTION - return rune(0x2229), true + return {'\u2229', 0}, 1, true case "capand": // INTERSECTION WITH LOGICAL AND - return rune(0x2a44), true + return {'\u2a44', 0}, 1, true case "capbrcup": // INTERSECTION ABOVE BAR ABOVE UNION - return rune(0x2a49), true + return {'\u2a49', 0}, 1, true case "capcap": // INTERSECTION BESIDE AND JOINED WITH INTERSECTION - return rune(0x2a4b), true + return {'\u2a4b', 0}, 1, true case "capcup": // INTERSECTION ABOVE UNION - return rune(0x2a47), true + return {'\u2a47', 0}, 1, true case "capdot": // INTERSECTION WITH DOT - return rune(0x2a40), true + return {'\u2a40', 0}, 1, true case "capint": // INTEGRAL WITH INTERSECTION - return rune(0x2a19), true + return {'\u2a19', 0}, 1, true case "caps": // INTERSECTION with serifs - return rune(0x2229), true + return {'\u2229', '\u2229'}, 2, true case "caret": // CARET INSERTION POINT - return rune(0x2041), true + return {'\u2041', 0}, 1, true case "caron": // CARON - return rune(0x02c7), true + return {'\u02c7', 0}, 1, true case "ccaps": // CLOSED INTERSECTION WITH SERIFS - return rune(0x2a4d), true + return {'\u2a4d', 0}, 1, true case "ccaron": // LATIN SMALL LETTER C WITH CARON - return rune(0x010d), true + return {'\u010d', 0}, 1, true case "ccedil": // LATIN SMALL LETTER C WITH CEDILLA - return rune(0xe7), true + return {'ç', 0}, 1, true case "ccirc": // LATIN SMALL LETTER C WITH CIRCUMFLEX - return rune(0x0109), true + return {'\u0109', 0}, 1, true case "ccups": // CLOSED UNION WITH SERIFS - return rune(0x2a4c), true + return {'\u2a4c', 0}, 1, true case "ccupssm": // CLOSED UNION WITH SERIFS AND SMASH PRODUCT - return rune(0x2a50), true + return {'\u2a50', 0}, 1, true case "cdot": // LATIN SMALL LETTER C WITH DOT ABOVE - return rune(0x010b), true + return {'\u010b', 0}, 1, true case "cedil": // CEDILLA - return rune(0xb8), true + return {'¸', 0}, 1, true case "cemptyv": // EMPTY SET WITH SMALL CIRCLE ABOVE - return rune(0x29b2), true + return {'\u29b2', 0}, 1, true case "cent": // CENT SIGN - return rune(0xa2), true + return {'¢', 0}, 1, true case "centerdot": // MIDDLE DOT - return rune(0xb7), true + return {'·', 0}, 1, true case "cfr": // MATHEMATICAL FRAKTUR SMALL C - return rune(0x01d520), true + return {'\U0001d520', 0}, 1, true case "chcy": // CYRILLIC SMALL LETTER CHE - return rune(0x0447), true + return {'\u0447', 0}, 1, true case "check": // CHECK MARK - return rune(0x2713), true + return {'\u2713', 0}, 1, true case "checkmark": // CHECK MARK - return rune(0x2713), true + return {'\u2713', 0}, 1, true case "chi": // GREEK SMALL LETTER CHI - return rune(0x03c7), true + return {'\u03c7', 0}, 1, true case "cir": // WHITE CIRCLE - return rune(0x25cb), true + return {'\u25cb', 0}, 1, true case "cirE": // CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT - return rune(0x29c3), true + return {'\u29c3', 0}, 1, true case "cirb": // SQUARED SMALL CIRCLE - return rune(0x29c7), true + return {'\u29c7', 0}, 1, true case "circ": // MODIFIER LETTER CIRCUMFLEX ACCENT - return rune(0x02c6), true + return {'\u02c6', 0}, 1, true case "circeq": // RING EQUAL TO - return rune(0x2257), true + return {'\u2257', 0}, 1, true case "circlearrowleft": // ANTICLOCKWISE OPEN CIRCLE ARROW - return rune(0x21ba), true + return {'\u21ba', 0}, 1, true case "circlearrowright": // CLOCKWISE OPEN CIRCLE ARROW - return rune(0x21bb), true + return {'\u21bb', 0}, 1, true case "circledR": // REGISTERED SIGN - return rune(0xae), true + return {'®', 0}, 1, true case "circledS": // CIRCLED LATIN CAPITAL LETTER S - return rune(0x24c8), true + return {'\u24c8', 0}, 1, true case "circledast": // CIRCLED ASTERISK OPERATOR - return rune(0x229b), true + return {'\u229b', 0}, 1, true case "circledcirc": // CIRCLED RING OPERATOR - return rune(0x229a), true + return {'\u229a', 0}, 1, true case "circleddash": // CIRCLED DASH - return rune(0x229d), true + return {'\u229d', 0}, 1, true case "cirdarr": // WHITE CIRCLE WITH DOWN ARROW - return rune(0x29ec), true + return {'\u29ec', 0}, 1, true case "cire": // RING EQUAL TO - return rune(0x2257), true + return {'\u2257', 0}, 1, true case "cirerr": // ERROR-BARRED WHITE CIRCLE - return rune(0x29f2), true + return {'\u29f2', 0}, 1, true case "cirfdarr": // BLACK CIRCLE WITH DOWN ARROW - return rune(0x29ed), true + return {'\u29ed', 0}, 1, true case "cirferr": // ERROR-BARRED BLACK CIRCLE - return rune(0x29f3), true + return {'\u29f3', 0}, 1, true case "cirfnint": // CIRCULATION FUNCTION - return rune(0x2a10), true + return {'\u2a10', 0}, 1, true case "cirmid": // VERTICAL LINE WITH CIRCLE ABOVE - return rune(0x2aef), true + return {'\u2aef', 0}, 1, true case "cirscir": // CIRCLE WITH SMALL CIRCLE TO THE RIGHT - return rune(0x29c2), true + return {'\u29c2', 0}, 1, true case "closur": // CLOSE UP - return rune(0x2050), true + return {'\u2050', 0}, 1, true case "clubs": // BLACK CLUB SUIT - return rune(0x2663), true + return {'\u2663', 0}, 1, true case "clubsuit": // BLACK CLUB SUIT - return rune(0x2663), true + return {'\u2663', 0}, 1, true case "colon": // COLON - return rune(0x3a), true + return {':', 0}, 1, true case "colone": // COLON EQUALS - return rune(0x2254), true + return {'\u2254', 0}, 1, true case "coloneq": // COLON EQUALS - return rune(0x2254), true + return {'\u2254', 0}, 1, true case "comma": // COMMA - return rune(0x2c), true + return {',', 0}, 1, true case "commat": // COMMERCIAL AT - return rune(0x40), true + return {'@', 0}, 1, true case "comp": // COMPLEMENT - return rune(0x2201), true + return {'\u2201', 0}, 1, true case "compfn": // RING OPERATOR - return rune(0x2218), true + return {'\u2218', 0}, 1, true case "complement": // COMPLEMENT - return rune(0x2201), true + return {'\u2201', 0}, 1, true case "complexes": // DOUBLE-STRUCK CAPITAL C - return rune(0x2102), true + return {'\u2102', 0}, 1, true case "cong": // APPROXIMATELY EQUAL TO - return rune(0x2245), true + return {'\u2245', 0}, 1, true case "congdot": // CONGRUENT WITH DOT ABOVE - return rune(0x2a6d), true + return {'\u2a6d', 0}, 1, true case "conint": // CONTOUR INTEGRAL - return rune(0x222e), true + return {'\u222e', 0}, 1, true case "copf": // MATHEMATICAL DOUBLE-STRUCK SMALL C - return rune(0x01d554), true + return {'\U0001d554', 0}, 1, true case "coprod": // N-ARY COPRODUCT - return rune(0x2210), true + return {'\u2210', 0}, 1, true case "copy": // COPYRIGHT SIGN - return rune(0xa9), true + return {'©', 0}, 1, true case "copysr": // SOUND RECORDING COPYRIGHT - return rune(0x2117), true + return {'\u2117', 0}, 1, true case "crarr": // DOWNWARDS ARROW WITH CORNER LEFTWARDS - return rune(0x21b5), true + return {'\u21b5', 0}, 1, true case "cross": // BALLOT X - return rune(0x2717), true + return {'\u2717', 0}, 1, true case "cscr": // MATHEMATICAL SCRIPT SMALL C - return rune(0x01d4b8), true + return {'\U0001d4b8', 0}, 1, true case "csub": // CLOSED SUBSET - return rune(0x2acf), true + return {'\u2acf', 0}, 1, true case "csube": // CLOSED SUBSET OR EQUAL TO - return rune(0x2ad1), true + return {'\u2ad1', 0}, 1, true case "csup": // CLOSED SUPERSET - return rune(0x2ad0), true + return {'\u2ad0', 0}, 1, true case "csupe": // CLOSED SUPERSET OR EQUAL TO - return rune(0x2ad2), true + return {'\u2ad2', 0}, 1, true case "ctdot": // MIDLINE HORIZONTAL ELLIPSIS - return rune(0x22ef), true + return {'\u22ef', 0}, 1, true case "cudarrl": // RIGHT-SIDE ARC CLOCKWISE ARROW - return rune(0x2938), true + return {'\u2938', 0}, 1, true case "cudarrr": // ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS - return rune(0x2935), true + return {'\u2935', 0}, 1, true case "cuepr": // EQUAL TO OR PRECEDES - return rune(0x22de), true + return {'\u22de', 0}, 1, true case "cuesc": // EQUAL TO OR SUCCEEDS - return rune(0x22df), true + return {'\u22df', 0}, 1, true case "cularr": // ANTICLOCKWISE TOP SEMICIRCLE ARROW - return rune(0x21b6), true + return {'\u21b6', 0}, 1, true case "cularrp": // TOP ARC ANTICLOCKWISE ARROW WITH PLUS - return rune(0x293d), true + return {'\u293d', 0}, 1, true case "cup": // UNION - return rune(0x222a), true + return {'\u222a', 0}, 1, true case "cupbrcap": // UNION ABOVE BAR ABOVE INTERSECTION - return rune(0x2a48), true + return {'\u2a48', 0}, 1, true case "cupcap": // UNION ABOVE INTERSECTION - return rune(0x2a46), true + return {'\u2a46', 0}, 1, true case "cupcup": // UNION BESIDE AND JOINED WITH UNION - return rune(0x2a4a), true + return {'\u2a4a', 0}, 1, true case "cupdot": // MULTISET MULTIPLICATION - return rune(0x228d), true + return {'\u228d', 0}, 1, true case "cupint": // INTEGRAL WITH UNION - return rune(0x2a1a), true + return {'\u2a1a', 0}, 1, true case "cupor": // UNION WITH LOGICAL OR - return rune(0x2a45), true + return {'\u2a45', 0}, 1, true case "cupre": // PRECEDES OR EQUAL TO - return rune(0x227c), true + return {'\u227c', 0}, 1, true case "cups": // UNION with serifs - return rune(0x222a), true + return {'\u222a', '\u222a'}, 2, true case "curarr": // CLOCKWISE TOP SEMICIRCLE ARROW - return rune(0x21b7), true + return {'\u21b7', 0}, 1, true case "curarrm": // TOP ARC CLOCKWISE ARROW WITH MINUS - return rune(0x293c), true + return {'\u293c', 0}, 1, true case "curlyeqprec": // EQUAL TO OR PRECEDES - return rune(0x22de), true + return {'\u22de', 0}, 1, true case "curlyeqsucc": // EQUAL TO OR SUCCEEDS - return rune(0x22df), true + return {'\u22df', 0}, 1, true case "curlyvee": // CURLY LOGICAL OR - return rune(0x22ce), true + return {'\u22ce', 0}, 1, true case "curlywedge": // CURLY LOGICAL AND - return rune(0x22cf), true + return {'\u22cf', 0}, 1, true case "curren": // CURRENCY SIGN - return rune(0xa4), true + return {'¤', 0}, 1, true case "curvearrowleft": // ANTICLOCKWISE TOP SEMICIRCLE ARROW - return rune(0x21b6), true + return {'\u21b6', 0}, 1, true case "curvearrowright": // CLOCKWISE TOP SEMICIRCLE ARROW - return rune(0x21b7), true + return {'\u21b7', 0}, 1, true case "cuvee": // CURLY LOGICAL OR - return rune(0x22ce), true + return {'\u22ce', 0}, 1, true case "cuwed": // CURLY LOGICAL AND - return rune(0x22cf), true + return {'\u22cf', 0}, 1, true case "cwconint": // CLOCKWISE CONTOUR INTEGRAL - return rune(0x2232), true + return {'\u2232', 0}, 1, true case "cwint": // CLOCKWISE INTEGRAL - return rune(0x2231), true + return {'\u2231', 0}, 1, true case "cylcty": // CYLINDRICITY - return rune(0x232d), true + return {'\u232d', 0}, 1, true } case 'd': switch name { case "dAarr": // DOWNWARDS TRIPLE ARROW - return rune(0x290b), true + return {'\u290b', 0}, 1, true case "dArr": // DOWNWARDS DOUBLE ARROW - return rune(0x21d3), true + return {'\u21d3', 0}, 1, true case "dHar": // DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT - return rune(0x2965), true + return {'\u2965', 0}, 1, true case "dagger": // DAGGER - return rune(0x2020), true + return {'\u2020', 0}, 1, true case "dalembrt": // SQUARE WITH CONTOURED OUTLINE - return rune(0x29e0), true + return {'\u29e0', 0}, 1, true case "daleth": // DALET SYMBOL - return rune(0x2138), true + return {'\u2138', 0}, 1, true case "darr": // DOWNWARDS ARROW - return rune(0x2193), true + return {'\u2193', 0}, 1, true case "darr2": // DOWNWARDS PAIRED ARROWS - return rune(0x21ca), true + return {'\u21ca', 0}, 1, true case "darrb": // DOWNWARDS ARROW TO BAR - return rune(0x2913), true + return {'\u2913', 0}, 1, true case "darrln": // DOWNWARDS ARROW WITH HORIZONTAL STROKE - return rune(0x2908), true + return {'\u2908', 0}, 1, true case "dash": // HYPHEN - return rune(0x2010), true + return {'\u2010', 0}, 1, true case "dashV": // DOUBLE VERTICAL BAR LEFT TURNSTILE - return rune(0x2ae3), true + return {'\u2ae3', 0}, 1, true case "dashv": // LEFT TACK - return rune(0x22a3), true + return {'\u22a3', 0}, 1, true case "dbkarow": // RIGHTWARDS TRIPLE DASH ARROW - return rune(0x290f), true + return {'\u290f', 0}, 1, true case "dblac": // DOUBLE ACUTE ACCENT - return rune(0x02dd), true + return {'\u02dd', 0}, 1, true case "dcaron": // LATIN SMALL LETTER D WITH CARON - return rune(0x010f), true + return {'\u010f', 0}, 1, true case "dcy": // CYRILLIC SMALL LETTER DE - return rune(0x0434), true + return {'\u0434', 0}, 1, true case "dd": // DOUBLE-STRUCK ITALIC SMALL D - return rune(0x2146), true + return {'\u2146', 0}, 1, true case "ddagger": // DOUBLE DAGGER - return rune(0x2021), true + return {'\u2021', 0}, 1, true case "ddarr": // DOWNWARDS PAIRED ARROWS - return rune(0x21ca), true + return {'\u21ca', 0}, 1, true case "ddotseq": // EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW - return rune(0x2a77), true + return {'\u2a77', 0}, 1, true case "deg": // DEGREE SIGN - return rune(0xb0), true + return {'°', 0}, 1, true case "delta": // GREEK SMALL LETTER DELTA - return rune(0x03b4), true + return {'\u03b4', 0}, 1, true case "demptyv": // EMPTY SET WITH OVERBAR - return rune(0x29b1), true + return {'\u29b1', 0}, 1, true case "dfisht": // DOWN FISH TAIL - return rune(0x297f), true + return {'\u297f', 0}, 1, true case "dfr": // MATHEMATICAL FRAKTUR SMALL D - return rune(0x01d521), true + return {'\U0001d521', 0}, 1, true case "dgr": // GREEK SMALL LETTER DELTA - return rune(0x03b4), true + return {'\u03b4', 0}, 1, true case "dharl": // DOWNWARDS HARPOON WITH BARB LEFTWARDS - return rune(0x21c3), true + return {'\u21c3', 0}, 1, true case "dharr": // DOWNWARDS HARPOON WITH BARB RIGHTWARDS - return rune(0x21c2), true + return {'\u21c2', 0}, 1, true case "diam": // DIAMOND OPERATOR - return rune(0x22c4), true + return {'\u22c4', 0}, 1, true case "diamdarr": // BLACK DIAMOND WITH DOWN ARROW - return rune(0x29ea), true + return {'\u29ea', 0}, 1, true case "diamerr": // ERROR-BARRED WHITE DIAMOND - return rune(0x29f0), true + return {'\u29f0', 0}, 1, true case "diamerrf": // ERROR-BARRED BLACK DIAMOND - return rune(0x29f1), true + return {'\u29f1', 0}, 1, true case "diamond": // DIAMOND OPERATOR - return rune(0x22c4), true + return {'\u22c4', 0}, 1, true case "diamondsuit": // BLACK DIAMOND SUIT - return rune(0x2666), true + return {'\u2666', 0}, 1, true case "diams": // BLACK DIAMOND SUIT - return rune(0x2666), true + return {'\u2666', 0}, 1, true case "die": // DIAERESIS - return rune(0xa8), true + return {'¨', 0}, 1, true case "digamma": // GREEK SMALL LETTER DIGAMMA - return rune(0x03dd), true + return {'\u03dd', 0}, 1, true case "disin": // ELEMENT OF WITH LONG HORIZONTAL STROKE - return rune(0x22f2), true + return {'\u22f2', 0}, 1, true case "div": // DIVISION SIGN - return rune(0xf7), true + return {'÷', 0}, 1, true case "divide": // DIVISION SIGN - return rune(0xf7), true + return {'÷', 0}, 1, true case "divideontimes": // DIVISION TIMES - return rune(0x22c7), true + return {'\u22c7', 0}, 1, true case "divonx": // DIVISION TIMES - return rune(0x22c7), true + return {'\u22c7', 0}, 1, true case "djcy": // CYRILLIC SMALL LETTER DJE - return rune(0x0452), true + return {'\u0452', 0}, 1, true case "dlarr": // SOUTH WEST ARROW - return rune(0x2199), true + return {'\u2199', 0}, 1, true case "dlcorn": // BOTTOM LEFT CORNER - return rune(0x231e), true + return {'\u231e', 0}, 1, true case "dlcrop": // BOTTOM LEFT CROP - return rune(0x230d), true + return {'\u230d', 0}, 1, true case "dlharb": // DOWNWARDS HARPOON WITH BARB LEFT TO BAR - return rune(0x2959), true + return {'\u2959', 0}, 1, true case "dollar": // DOLLAR SIGN - return rune(0x24), true + return {'$', 0}, 1, true case "dopf": // MATHEMATICAL DOUBLE-STRUCK SMALL D - return rune(0x01d555), true + return {'\U0001d555', 0}, 1, true case "dot": // DOT ABOVE - return rune(0x02d9), true + return {'\u02d9', 0}, 1, true case "doteq": // APPROACHES THE LIMIT - return rune(0x2250), true + return {'\u2250', 0}, 1, true case "doteqdot": // GEOMETRICALLY EQUAL TO - return rune(0x2251), true + return {'\u2251', 0}, 1, true case "dotminus": // DOT MINUS - return rune(0x2238), true + return {'\u2238', 0}, 1, true case "dotplus": // DOT PLUS - return rune(0x2214), true + return {'\u2214', 0}, 1, true case "dotsquare": // SQUARED DOT OPERATOR - return rune(0x22a1), true + return {'\u22a1', 0}, 1, true case "doublebarwedge": // PERSPECTIVE - return rune(0x2306), true + return {'\u2306', 0}, 1, true case "downarrow": // DOWNWARDS ARROW - return rune(0x2193), true + return {'\u2193', 0}, 1, true case "downdownarrows": // DOWNWARDS PAIRED ARROWS - return rune(0x21ca), true + return {'\u21ca', 0}, 1, true case "downharpoonleft": // DOWNWARDS HARPOON WITH BARB LEFTWARDS - return rune(0x21c3), true + return {'\u21c3', 0}, 1, true case "downharpoonright": // DOWNWARDS HARPOON WITH BARB RIGHTWARDS - return rune(0x21c2), true + return {'\u21c2', 0}, 1, true case "drarr": // SOUTH EAST ARROW - return rune(0x2198), true + return {'\u2198', 0}, 1, true case "drbkarow": // RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW - return rune(0x2910), true + return {'\u2910', 0}, 1, true case "drcorn": // BOTTOM RIGHT CORNER - return rune(0x231f), true + return {'\u231f', 0}, 1, true case "drcrop": // BOTTOM RIGHT CROP - return rune(0x230c), true + return {'\u230c', 0}, 1, true case "drharb": // DOWNWARDS HARPOON WITH BARB RIGHT TO BAR - return rune(0x2955), true + return {'\u2955', 0}, 1, true case "dscr": // MATHEMATICAL SCRIPT SMALL D - return rune(0x01d4b9), true + return {'\U0001d4b9', 0}, 1, true case "dscy": // CYRILLIC SMALL LETTER DZE - return rune(0x0455), true + return {'\u0455', 0}, 1, true case "dsol": // SOLIDUS WITH OVERBAR - return rune(0x29f6), true + return {'\u29f6', 0}, 1, true case "dstrok": // LATIN SMALL LETTER D WITH STROKE - return rune(0x0111), true + return {'\u0111', 0}, 1, true case "dtdot": // DOWN RIGHT DIAGONAL ELLIPSIS - return rune(0x22f1), true + return {'\u22f1', 0}, 1, true case "dtri": // WHITE DOWN-POINTING SMALL TRIANGLE - return rune(0x25bf), true + return {'\u25bf', 0}, 1, true case "dtrif": // BLACK DOWN-POINTING SMALL TRIANGLE - return rune(0x25be), true + return {'\u25be', 0}, 1, true case "dtrilf": // DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK - return rune(0x29e8), true + return {'\u29e8', 0}, 1, true case "dtrirf": // DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK - return rune(0x29e9), true + return {'\u29e9', 0}, 1, true case "duarr": // DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW - return rune(0x21f5), true + return {'\u21f5', 0}, 1, true case "duhar": // DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT - return rune(0x296f), true + return {'\u296f', 0}, 1, true case "dumap": // DOUBLE-ENDED MULTIMAP - return rune(0x29df), true + return {'\u29df', 0}, 1, true case "dwangle": // OBLIQUE ANGLE OPENING UP - return rune(0x29a6), true + return {'\u29a6', 0}, 1, true case "dzcy": // CYRILLIC SMALL LETTER DZHE - return rune(0x045f), true + return {'\u045f', 0}, 1, true case "dzigrarr": // LONG RIGHTWARDS SQUIGGLE ARROW - return rune(0x27ff), true + return {'\u27ff', 0}, 1, true } case 'e': switch name { case "eDDot": // EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW - return rune(0x2a77), true + return {'\u2a77', 0}, 1, true case "eDot": // GEOMETRICALLY EQUAL TO - return rune(0x2251), true + return {'\u2251', 0}, 1, true case "eacgr": // GREEK SMALL LETTER EPSILON WITH TONOS - return rune(0x03ad), true + return {'\u03ad', 0}, 1, true case "eacute": // LATIN SMALL LETTER E WITH ACUTE - return rune(0xe9), true + return {'é', 0}, 1, true case "easter": // EQUALS WITH ASTERISK - return rune(0x2a6e), true + return {'\u2a6e', 0}, 1, true case "ecaron": // LATIN SMALL LETTER E WITH CARON - return rune(0x011b), true + return {'\u011b', 0}, 1, true case "ecir": // RING IN EQUAL TO - return rune(0x2256), true + return {'\u2256', 0}, 1, true case "ecirc": // LATIN SMALL LETTER E WITH CIRCUMFLEX - return rune(0xea), true + return {'ê', 0}, 1, true case "ecolon": // EQUALS COLON - return rune(0x2255), true + return {'\u2255', 0}, 1, true case "ecy": // CYRILLIC SMALL LETTER E - return rune(0x044d), true + return {'\u044d', 0}, 1, true case "edot": // LATIN SMALL LETTER E WITH DOT ABOVE - return rune(0x0117), true + return {'\u0117', 0}, 1, true case "ee": // DOUBLE-STRUCK ITALIC SMALL E - return rune(0x2147), true + return {'\u2147', 0}, 1, true case "eeacgr": // GREEK SMALL LETTER ETA WITH TONOS - return rune(0x03ae), true + return {'\u03ae', 0}, 1, true case "eegr": // GREEK SMALL LETTER ETA - return rune(0x03b7), true + return {'\u03b7', 0}, 1, true case "efDot": // APPROXIMATELY EQUAL TO OR THE IMAGE OF - return rune(0x2252), true + return {'\u2252', 0}, 1, true case "efr": // MATHEMATICAL FRAKTUR SMALL E - return rune(0x01d522), true + return {'\U0001d522', 0}, 1, true case "eg": // DOUBLE-LINE EQUAL TO OR GREATER-THAN - return rune(0x2a9a), true + return {'\u2a9a', 0}, 1, true case "egr": // GREEK SMALL LETTER EPSILON - return rune(0x03b5), true + return {'\u03b5', 0}, 1, true case "egrave": // LATIN SMALL LETTER E WITH GRAVE - return rune(0xe8), true + return {'è', 0}, 1, true case "egs": // SLANTED EQUAL TO OR GREATER-THAN - return rune(0x2a96), true + return {'\u2a96', 0}, 1, true case "egsdot": // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE - return rune(0x2a98), true + return {'\u2a98', 0}, 1, true case "el": // DOUBLE-LINE EQUAL TO OR LESS-THAN - return rune(0x2a99), true + return {'\u2a99', 0}, 1, true case "elinters": // ELECTRICAL INTERSECTION - return rune(0x23e7), true + return {'\u23e7', 0}, 1, true case "ell": // SCRIPT SMALL L - return rune(0x2113), true + return {'\u2113', 0}, 1, true case "els": // SLANTED EQUAL TO OR LESS-THAN - return rune(0x2a95), true + return {'\u2a95', 0}, 1, true case "elsdot": // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE - return rune(0x2a97), true + return {'\u2a97', 0}, 1, true case "emacr": // LATIN SMALL LETTER E WITH MACRON - return rune(0x0113), true + return {'\u0113', 0}, 1, true case "empty": // EMPTY SET - return rune(0x2205), true + return {'\u2205', 0}, 1, true case "emptyset": // EMPTY SET - return rune(0x2205), true + return {'\u2205', 0}, 1, true case "emptyv": // EMPTY SET - return rune(0x2205), true + return {'\u2205', 0}, 1, true case "emsp": // EM SPACE - return rune(0x2003), true + return {'\u2003', 0}, 1, true case "emsp13": // THREE-PER-EM SPACE - return rune(0x2004), true + return {'\u2004', 0}, 1, true case "emsp14": // FOUR-PER-EM SPACE - return rune(0x2005), true + return {'\u2005', 0}, 1, true case "eng": // LATIN SMALL LETTER ENG - return rune(0x014b), true + return {'\u014b', 0}, 1, true case "ensp": // EN SPACE - return rune(0x2002), true + return {'\u2002', 0}, 1, true case "eogon": // LATIN SMALL LETTER E WITH OGONEK - return rune(0x0119), true + return {'\u0119', 0}, 1, true case "eopf": // MATHEMATICAL DOUBLE-STRUCK SMALL E - return rune(0x01d556), true + return {'\U0001d556', 0}, 1, true case "epar": // EQUAL AND PARALLEL TO - return rune(0x22d5), true + return {'\u22d5', 0}, 1, true case "eparsl": // EQUALS SIGN AND SLANTED PARALLEL - return rune(0x29e3), true + return {'\u29e3', 0}, 1, true case "eplus": // EQUALS SIGN ABOVE PLUS SIGN - return rune(0x2a71), true + return {'\u2a71', 0}, 1, true case "epsi": // GREEK SMALL LETTER EPSILON - return rune(0x03b5), true + return {'\u03b5', 0}, 1, true case "epsilon": // GREEK SMALL LETTER EPSILON - return rune(0x03b5), true + return {'\u03b5', 0}, 1, true case "epsis": // GREEK LUNATE EPSILON SYMBOL - return rune(0x03f5), true + return {'\u03f5', 0}, 1, true case "epsiv": // GREEK LUNATE EPSILON SYMBOL - return rune(0x03f5), true + return {'\u03f5', 0}, 1, true case "eqcirc": // RING IN EQUAL TO - return rune(0x2256), true + return {'\u2256', 0}, 1, true case "eqcolon": // EQUALS COLON - return rune(0x2255), true + return {'\u2255', 0}, 1, true case "eqeq": // TWO CONSECUTIVE EQUALS SIGNS - return rune(0x2a75), true + return {'\u2a75', 0}, 1, true case "eqsim": // MINUS TILDE - return rune(0x2242), true + return {'\u2242', 0}, 1, true case "eqslantgtr": // SLANTED EQUAL TO OR GREATER-THAN - return rune(0x2a96), true + return {'\u2a96', 0}, 1, true case "eqslantless": // SLANTED EQUAL TO OR LESS-THAN - return rune(0x2a95), true + return {'\u2a95', 0}, 1, true case "equals": // EQUALS SIGN - return rune(0x3d), true + return {'=', 0}, 1, true case "equest": // QUESTIONED EQUAL TO - return rune(0x225f), true + return {'\u225f', 0}, 1, true case "equiv": // IDENTICAL TO - return rune(0x2261), true + return {'\u2261', 0}, 1, true case "equivDD": // EQUIVALENT WITH FOUR DOTS ABOVE - return rune(0x2a78), true + return {'\u2a78', 0}, 1, true case "eqvparsl": // IDENTICAL TO AND SLANTED PARALLEL - return rune(0x29e5), true + return {'\u29e5', 0}, 1, true case "erDot": // IMAGE OF OR APPROXIMATELY EQUAL TO - return rune(0x2253), true + return {'\u2253', 0}, 1, true case "erarr": // EQUALS SIGN ABOVE RIGHTWARDS ARROW - return rune(0x2971), true + return {'\u2971', 0}, 1, true case "escr": // SCRIPT SMALL E - return rune(0x212f), true + return {'\u212f', 0}, 1, true case "esdot": // APPROACHES THE LIMIT - return rune(0x2250), true + return {'\u2250', 0}, 1, true case "esim": // MINUS TILDE - return rune(0x2242), true + return {'\u2242', 0}, 1, true case "eta": // GREEK SMALL LETTER ETA - return rune(0x03b7), true + return {'\u03b7', 0}, 1, true case "eth": // LATIN SMALL LETTER ETH - return rune(0xf0), true + return {'ð', 0}, 1, true case "euml": // LATIN SMALL LETTER E WITH DIAERESIS - return rune(0xeb), true + return {'ë', 0}, 1, true case "euro": // EURO SIGN - return rune(0x20ac), true + return {'\u20ac', 0}, 1, true case "excl": // EXCLAMATION MARK - return rune(0x21), true + return {'!', 0}, 1, true case "exist": // THERE EXISTS - return rune(0x2203), true + return {'\u2203', 0}, 1, true case "expectation": // SCRIPT CAPITAL E - return rune(0x2130), true + return {'\u2130', 0}, 1, true case "exponentiale": // DOUBLE-STRUCK ITALIC SMALL E - return rune(0x2147), true + return {'\u2147', 0}, 1, true } case 'f': switch name { case "fallingdotseq": // APPROXIMATELY EQUAL TO OR THE IMAGE OF - return rune(0x2252), true + return {'\u2252', 0}, 1, true case "fbowtie": // BLACK BOWTIE - return rune(0x29d3), true + return {'\u29d3', 0}, 1, true case "fcy": // CYRILLIC SMALL LETTER EF - return rune(0x0444), true + return {'\u0444', 0}, 1, true case "fdiag": // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT - return rune(0x2572), true + return {'\u2572', 0}, 1, true case "fdiordi": // FALLING DIAGONAL CROSSING RISING DIAGONAL - return rune(0x292c), true + return {'\u292c', 0}, 1, true case "fdonearr": // FALLING DIAGONAL CROSSING NORTH EAST ARROW - return rune(0x292f), true + return {'\u292f', 0}, 1, true case "female": // FEMALE SIGN - return rune(0x2640), true + return {'\u2640', 0}, 1, true case "ffilig": // LATIN SMALL LIGATURE FFI - return rune(0xfb03), true + return {'\ufb03', 0}, 1, true case "fflig": // LATIN SMALL LIGATURE FF - return rune(0xfb00), true + return {'\ufb00', 0}, 1, true case "ffllig": // LATIN SMALL LIGATURE FFL - return rune(0xfb04), true + return {'\ufb04', 0}, 1, true case "ffr": // MATHEMATICAL FRAKTUR SMALL F - return rune(0x01d523), true + return {'\U0001d523', 0}, 1, true case "fhrglass": // BLACK HOURGLASS - return rune(0x29d7), true + return {'\u29d7', 0}, 1, true case "filig": // LATIN SMALL LIGATURE FI - return rune(0xfb01), true + return {'\ufb01', 0}, 1, true case "fjlig": // fj ligature - return rune(0x66), true + return {'f', 'f'}, 2, true case "flat": // MUSIC FLAT SIGN - return rune(0x266d), true + return {'\u266d', 0}, 1, true case "fllig": // LATIN SMALL LIGATURE FL - return rune(0xfb02), true + return {'\ufb02', 0}, 1, true case "fltns": // WHITE PARALLELOGRAM - return rune(0x25b1), true + return {'\u25b1', 0}, 1, true case "fnof": // LATIN SMALL LETTER F WITH HOOK - return rune(0x0192), true + return {'\u0192', 0}, 1, true case "fopf": // MATHEMATICAL DOUBLE-STRUCK SMALL F - return rune(0x01d557), true + return {'\U0001d557', 0}, 1, true case "forall": // FOR ALL - return rune(0x2200), true + return {'\u2200', 0}, 1, true case "fork": // PITCHFORK - return rune(0x22d4), true + return {'\u22d4', 0}, 1, true case "forkv": // ELEMENT OF OPENING DOWNWARDS - return rune(0x2ad9), true + return {'\u2ad9', 0}, 1, true case "fpartint": // FINITE PART INTEGRAL - return rune(0x2a0d), true + return {'\u2a0d', 0}, 1, true case "frac12": // VULGAR FRACTION ONE HALF - return rune(0xbd), true + return {'½', 0}, 1, true case "frac13": // VULGAR FRACTION ONE THIRD - return rune(0x2153), true + return {'\u2153', 0}, 1, true case "frac14": // VULGAR FRACTION ONE QUARTER - return rune(0xbc), true + return {'¼', 0}, 1, true case "frac15": // VULGAR FRACTION ONE FIFTH - return rune(0x2155), true + return {'\u2155', 0}, 1, true case "frac16": // VULGAR FRACTION ONE SIXTH - return rune(0x2159), true + return {'\u2159', 0}, 1, true case "frac18": // VULGAR FRACTION ONE EIGHTH - return rune(0x215b), true + return {'\u215b', 0}, 1, true case "frac23": // VULGAR FRACTION TWO THIRDS - return rune(0x2154), true + return {'\u2154', 0}, 1, true case "frac25": // VULGAR FRACTION TWO FIFTHS - return rune(0x2156), true + return {'\u2156', 0}, 1, true case "frac34": // VULGAR FRACTION THREE QUARTERS - return rune(0xbe), true + return {'¾', 0}, 1, true case "frac35": // VULGAR FRACTION THREE FIFTHS - return rune(0x2157), true + return {'\u2157', 0}, 1, true case "frac38": // VULGAR FRACTION THREE EIGHTHS - return rune(0x215c), true + return {'\u215c', 0}, 1, true case "frac45": // VULGAR FRACTION FOUR FIFTHS - return rune(0x2158), true + return {'\u2158', 0}, 1, true case "frac56": // VULGAR FRACTION FIVE SIXTHS - return rune(0x215a), true + return {'\u215a', 0}, 1, true case "frac58": // VULGAR FRACTION FIVE EIGHTHS - return rune(0x215d), true + return {'\u215d', 0}, 1, true case "frac78": // VULGAR FRACTION SEVEN EIGHTHS - return rune(0x215e), true + return {'\u215e', 0}, 1, true case "frasl": // FRACTION SLASH - return rune(0x2044), true + return {'\u2044', 0}, 1, true case "frown": // FROWN - return rune(0x2322), true + return {'\u2322', 0}, 1, true case "fscr": // MATHEMATICAL SCRIPT SMALL F - return rune(0x01d4bb), true + return {'\U0001d4bb', 0}, 1, true } case 'g': switch name { case "gE": // GREATER-THAN OVER EQUAL TO - return rune(0x2267), true + return {'\u2267', 0}, 1, true case "gEl": // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN - return rune(0x2a8c), true + return {'\u2a8c', 0}, 1, true case "gacute": // LATIN SMALL LETTER G WITH ACUTE - return rune(0x01f5), true + return {'\u01f5', 0}, 1, true case "gamma": // GREEK SMALL LETTER GAMMA - return rune(0x03b3), true + return {'\u03b3', 0}, 1, true case "gammad": // GREEK SMALL LETTER DIGAMMA - return rune(0x03dd), true + return {'\u03dd', 0}, 1, true case "gap": // GREATER-THAN OR APPROXIMATE - return rune(0x2a86), true + return {'\u2a86', 0}, 1, true case "gbreve": // LATIN SMALL LETTER G WITH BREVE - return rune(0x011f), true + return {'\u011f', 0}, 1, true case "gcedil": // LATIN SMALL LETTER G WITH CEDILLA - return rune(0x0123), true + return {'\u0123', 0}, 1, true case "gcirc": // LATIN SMALL LETTER G WITH CIRCUMFLEX - return rune(0x011d), true + return {'\u011d', 0}, 1, true case "gcy": // CYRILLIC SMALL LETTER GHE - return rune(0x0433), true + return {'\u0433', 0}, 1, true case "gdot": // LATIN SMALL LETTER G WITH DOT ABOVE - return rune(0x0121), true + return {'\u0121', 0}, 1, true case "ge": // GREATER-THAN OR EQUAL TO - return rune(0x2265), true + return {'\u2265', 0}, 1, true case "gel": // GREATER-THAN EQUAL TO OR LESS-THAN - return rune(0x22db), true + return {'\u22db', 0}, 1, true case "geq": // GREATER-THAN OR EQUAL TO - return rune(0x2265), true + return {'\u2265', 0}, 1, true case "geqq": // GREATER-THAN OVER EQUAL TO - return rune(0x2267), true + return {'\u2267', 0}, 1, true case "geqslant": // GREATER-THAN OR SLANTED EQUAL TO - return rune(0x2a7e), true + return {'\u2a7e', 0}, 1, true case "ges": // GREATER-THAN OR SLANTED EQUAL TO - return rune(0x2a7e), true + return {'\u2a7e', 0}, 1, true case "gescc": // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL - return rune(0x2aa9), true + return {'\u2aa9', 0}, 1, true case "gesdot": // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE - return rune(0x2a80), true + return {'\u2a80', 0}, 1, true case "gesdoto": // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE - return rune(0x2a82), true + return {'\u2a82', 0}, 1, true case "gesdotol": // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT - return rune(0x2a84), true + return {'\u2a84', 0}, 1, true case "gesl": // GREATER-THAN slanted EQUAL TO OR LESS-THAN - return rune(0x22db), true + return {'\u22db', '\u22db'}, 2, true case "gesles": // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL - return rune(0x2a94), true + return {'\u2a94', 0}, 1, true case "gfr": // MATHEMATICAL FRAKTUR SMALL G - return rune(0x01d524), true + return {'\U0001d524', 0}, 1, true case "gg": // MUCH GREATER-THAN - return rune(0x226b), true + return {'\u226b', 0}, 1, true case "ggg": // VERY MUCH GREATER-THAN - return rune(0x22d9), true + return {'\u22d9', 0}, 1, true case "ggr": // GREEK SMALL LETTER GAMMA - return rune(0x03b3), true + return {'\u03b3', 0}, 1, true case "gimel": // GIMEL SYMBOL - return rune(0x2137), true + return {'\u2137', 0}, 1, true case "gjcy": // CYRILLIC SMALL LETTER GJE - return rune(0x0453), true + return {'\u0453', 0}, 1, true case "gl": // GREATER-THAN OR LESS-THAN - return rune(0x2277), true + return {'\u2277', 0}, 1, true case "glE": // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL - return rune(0x2a92), true + return {'\u2a92', 0}, 1, true case "gla": // GREATER-THAN BESIDE LESS-THAN - return rune(0x2aa5), true + return {'\u2aa5', 0}, 1, true case "glj": // GREATER-THAN OVERLAPPING LESS-THAN - return rune(0x2aa4), true + return {'\u2aa4', 0}, 1, true case "gnE": // GREATER-THAN BUT NOT EQUAL TO - return rune(0x2269), true + return {'\u2269', 0}, 1, true case "gnap": // GREATER-THAN AND NOT APPROXIMATE - return rune(0x2a8a), true + return {'\u2a8a', 0}, 1, true case "gnapprox": // GREATER-THAN AND NOT APPROXIMATE - return rune(0x2a8a), true + return {'\u2a8a', 0}, 1, true case "gne": // GREATER-THAN AND SINGLE-LINE NOT EQUAL TO - return rune(0x2a88), true + return {'\u2a88', 0}, 1, true case "gneq": // GREATER-THAN AND SINGLE-LINE NOT EQUAL TO - return rune(0x2a88), true + return {'\u2a88', 0}, 1, true case "gneqq": // GREATER-THAN BUT NOT EQUAL TO - return rune(0x2269), true + return {'\u2269', 0}, 1, true case "gnsim": // GREATER-THAN BUT NOT EQUIVALENT TO - return rune(0x22e7), true + return {'\u22e7', 0}, 1, true case "gopf": // MATHEMATICAL DOUBLE-STRUCK SMALL G - return rune(0x01d558), true + return {'\U0001d558', 0}, 1, true case "grave": // GRAVE ACCENT - return rune(0x60), true + return {'`', 0}, 1, true case "gscr": // SCRIPT SMALL G - return rune(0x210a), true + return {'\u210a', 0}, 1, true case "gsdot": // GREATER-THAN WITH DOT - return rune(0x22d7), true + return {'\u22d7', 0}, 1, true case "gsim": // GREATER-THAN OR EQUIVALENT TO - return rune(0x2273), true + return {'\u2273', 0}, 1, true case "gsime": // GREATER-THAN ABOVE SIMILAR OR EQUAL - return rune(0x2a8e), true + return {'\u2a8e', 0}, 1, true case "gsiml": // GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN - return rune(0x2a90), true + return {'\u2a90', 0}, 1, true case "gt": // GREATER-THAN SIGN - return rune(0x3e), true + return {'>', 0}, 1, true case "gtcc": // GREATER-THAN CLOSED BY CURVE - return rune(0x2aa7), true + return {'\u2aa7', 0}, 1, true case "gtcir": // GREATER-THAN WITH CIRCLE INSIDE - return rune(0x2a7a), true + return {'\u2a7a', 0}, 1, true case "gtdot": // GREATER-THAN WITH DOT - return rune(0x22d7), true + return {'\u22d7', 0}, 1, true case "gtlPar": // DOUBLE LEFT ARC GREATER-THAN BRACKET - return rune(0x2995), true + return {'\u2995', 0}, 1, true case "gtquest": // GREATER-THAN WITH QUESTION MARK ABOVE - return rune(0x2a7c), true + return {'\u2a7c', 0}, 1, true case "gtrapprox": // GREATER-THAN OR APPROXIMATE - return rune(0x2a86), true + return {'\u2a86', 0}, 1, true case "gtrarr": // GREATER-THAN ABOVE RIGHTWARDS ARROW - return rune(0x2978), true + return {'\u2978', 0}, 1, true case "gtrdot": // GREATER-THAN WITH DOT - return rune(0x22d7), true + return {'\u22d7', 0}, 1, true case "gtreqless": // GREATER-THAN EQUAL TO OR LESS-THAN - return rune(0x22db), true + return {'\u22db', 0}, 1, true case "gtreqqless": // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN - return rune(0x2a8c), true + return {'\u2a8c', 0}, 1, true case "gtrless": // GREATER-THAN OR LESS-THAN - return rune(0x2277), true + return {'\u2277', 0}, 1, true case "gtrpar": // SPHERICAL ANGLE OPENING LEFT - return rune(0x29a0), true + return {'\u29a0', 0}, 1, true case "gtrsim": // GREATER-THAN OR EQUIVALENT TO - return rune(0x2273), true + return {'\u2273', 0}, 1, true case "gvertneqq": // GREATER-THAN BUT NOT EQUAL TO - with vertical stroke - return rune(0x2269), true + return {'\u2269', '\u2269'}, 2, true case "gvnE": // GREATER-THAN BUT NOT EQUAL TO - with vertical stroke - return rune(0x2269), true + return {'\u2269', '\u2269'}, 2, true } case 'h': switch name { case "hArr": // LEFT RIGHT DOUBLE ARROW - return rune(0x21d4), true + return {'\u21d4', 0}, 1, true case "hairsp": // HAIR SPACE - return rune(0x200a), true + return {'\u200a', 0}, 1, true case "half": // VULGAR FRACTION ONE HALF - return rune(0xbd), true + return {'½', 0}, 1, true case "hamilt": // SCRIPT CAPITAL H - return rune(0x210b), true + return {'\u210b', 0}, 1, true case "hardcy": // CYRILLIC SMALL LETTER HARD SIGN - return rune(0x044a), true + return {'\u044a', 0}, 1, true case "harr": // LEFT RIGHT ARROW - return rune(0x2194), true + return {'\u2194', 0}, 1, true case "harrcir": // LEFT RIGHT ARROW THROUGH SMALL CIRCLE - return rune(0x2948), true + return {'\u2948', 0}, 1, true case "harrw": // LEFT RIGHT WAVE ARROW - return rune(0x21ad), true + return {'\u21ad', 0}, 1, true case "hbar": // PLANCK CONSTANT OVER TWO PI - return rune(0x210f), true + return {'\u210f', 0}, 1, true case "hcirc": // LATIN SMALL LETTER H WITH CIRCUMFLEX - return rune(0x0125), true + return {'\u0125', 0}, 1, true case "hearts": // BLACK HEART SUIT - return rune(0x2665), true + return {'\u2665', 0}, 1, true case "heartsuit": // BLACK HEART SUIT - return rune(0x2665), true + return {'\u2665', 0}, 1, true case "hellip": // HORIZONTAL ELLIPSIS - return rune(0x2026), true + return {'\u2026', 0}, 1, true case "hercon": // HERMITIAN CONJUGATE MATRIX - return rune(0x22b9), true + return {'\u22b9', 0}, 1, true case "hfr": // MATHEMATICAL FRAKTUR SMALL H - return rune(0x01d525), true + return {'\U0001d525', 0}, 1, true case "hksearow": // SOUTH EAST ARROW WITH HOOK - return rune(0x2925), true + return {'\u2925', 0}, 1, true case "hkswarow": // SOUTH WEST ARROW WITH HOOK - return rune(0x2926), true + return {'\u2926', 0}, 1, true case "hoarr": // LEFT RIGHT OPEN-HEADED ARROW - return rune(0x21ff), true + return {'\u21ff', 0}, 1, true case "homtht": // HOMOTHETIC - return rune(0x223b), true + return {'\u223b', 0}, 1, true case "hookleftarrow": // LEFTWARDS ARROW WITH HOOK - return rune(0x21a9), true + return {'\u21a9', 0}, 1, true case "hookrightarrow": // RIGHTWARDS ARROW WITH HOOK - return rune(0x21aa), true + return {'\u21aa', 0}, 1, true case "hopf": // MATHEMATICAL DOUBLE-STRUCK SMALL H - return rune(0x01d559), true + return {'\U0001d559', 0}, 1, true case "horbar": // HORIZONTAL BAR - return rune(0x2015), true + return {'\u2015', 0}, 1, true case "hrglass": // WHITE HOURGLASS - return rune(0x29d6), true + return {'\u29d6', 0}, 1, true case "hscr": // MATHEMATICAL SCRIPT SMALL H - return rune(0x01d4bd), true + return {'\U0001d4bd', 0}, 1, true case "hslash": // PLANCK CONSTANT OVER TWO PI - return rune(0x210f), true + return {'\u210f', 0}, 1, true case "hstrok": // LATIN SMALL LETTER H WITH STROKE - return rune(0x0127), true + return {'\u0127', 0}, 1, true case "htimes": // VECTOR OR CROSS PRODUCT - return rune(0x2a2f), true + return {'\u2a2f', 0}, 1, true case "hybull": // HYPHEN BULLET - return rune(0x2043), true + return {'\u2043', 0}, 1, true case "hyphen": // HYPHEN - return rune(0x2010), true + return {'\u2010', 0}, 1, true } case 'i': switch name { case "iacgr": // GREEK SMALL LETTER IOTA WITH TONOS - return rune(0x03af), true + return {'\u03af', 0}, 1, true case "iacute": // LATIN SMALL LETTER I WITH ACUTE - return rune(0xed), true + return {'í', 0}, 1, true case "ic": // INVISIBLE SEPARATOR - return rune(0x2063), true + return {'\u2063', 0}, 1, true case "icirc": // LATIN SMALL LETTER I WITH CIRCUMFLEX - return rune(0xee), true + return {'î', 0}, 1, true case "icy": // CYRILLIC SMALL LETTER I - return rune(0x0438), true + return {'\u0438', 0}, 1, true case "idiagr": // GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS - return rune(0x0390), true + return {'\u0390', 0}, 1, true case "idigr": // GREEK SMALL LETTER IOTA WITH DIALYTIKA - return rune(0x03ca), true + return {'\u03ca', 0}, 1, true case "iecy": // CYRILLIC SMALL LETTER IE - return rune(0x0435), true + return {'\u0435', 0}, 1, true case "iexcl": // INVERTED EXCLAMATION MARK - return rune(0xa1), true + return {'¡', 0}, 1, true case "iff": // LEFT RIGHT DOUBLE ARROW - return rune(0x21d4), true + return {'\u21d4', 0}, 1, true case "ifr": // MATHEMATICAL FRAKTUR SMALL I - return rune(0x01d526), true + return {'\U0001d526', 0}, 1, true case "igr": // GREEK SMALL LETTER IOTA - return rune(0x03b9), true + return {'\u03b9', 0}, 1, true case "igrave": // LATIN SMALL LETTER I WITH GRAVE - return rune(0xec), true + return {'ì', 0}, 1, true case "ii": // DOUBLE-STRUCK ITALIC SMALL I - return rune(0x2148), true + return {'\u2148', 0}, 1, true case "iiiint": // QUADRUPLE INTEGRAL OPERATOR - return rune(0x2a0c), true + return {'\u2a0c', 0}, 1, true case "iiint": // TRIPLE INTEGRAL - return rune(0x222d), true + return {'\u222d', 0}, 1, true case "iinfin": // INCOMPLETE INFINITY - return rune(0x29dc), true + return {'\u29dc', 0}, 1, true case "iiota": // TURNED GREEK SMALL LETTER IOTA - return rune(0x2129), true + return {'\u2129', 0}, 1, true case "ijlig": // LATIN SMALL LIGATURE IJ - return rune(0x0133), true + return {'\u0133', 0}, 1, true case "imacr": // LATIN SMALL LETTER I WITH MACRON - return rune(0x012b), true + return {'\u012b', 0}, 1, true case "image": // BLACK-LETTER CAPITAL I - return rune(0x2111), true + return {'\u2111', 0}, 1, true case "imagline": // SCRIPT CAPITAL I - return rune(0x2110), true + return {'\u2110', 0}, 1, true case "imagpart": // BLACK-LETTER CAPITAL I - return rune(0x2111), true + return {'\u2111', 0}, 1, true case "imath": // LATIN SMALL LETTER DOTLESS I - return rune(0x0131), true + return {'\u0131', 0}, 1, true case "imof": // IMAGE OF - return rune(0x22b7), true + return {'\u22b7', 0}, 1, true case "imped": // LATIN CAPITAL LETTER Z WITH STROKE - return rune(0x01b5), true + return {'\u01b5', 0}, 1, true case "in": // ELEMENT OF - return rune(0x2208), true + return {'\u2208', 0}, 1, true case "incare": // CARE OF - return rune(0x2105), true + return {'\u2105', 0}, 1, true case "infin": // INFINITY - return rune(0x221e), true + return {'\u221e', 0}, 1, true case "infintie": // TIE OVER INFINITY - return rune(0x29dd), true + return {'\u29dd', 0}, 1, true case "inodot": // LATIN SMALL LETTER DOTLESS I - return rune(0x0131), true + return {'\u0131', 0}, 1, true case "int": // INTEGRAL - return rune(0x222b), true + return {'\u222b', 0}, 1, true case "intcal": // INTERCALATE - return rune(0x22ba), true + return {'\u22ba', 0}, 1, true case "integers": // DOUBLE-STRUCK CAPITAL Z - return rune(0x2124), true + return {'\u2124', 0}, 1, true case "intercal": // INTERCALATE - return rune(0x22ba), true + return {'\u22ba', 0}, 1, true case "intlarhk": // INTEGRAL WITH LEFTWARDS ARROW WITH HOOK - return rune(0x2a17), true + return {'\u2a17', 0}, 1, true case "intprod": // INTERIOR PRODUCT - return rune(0x2a3c), true + return {'\u2a3c', 0}, 1, true case "iocy": // CYRILLIC SMALL LETTER IO - return rune(0x0451), true + return {'\u0451', 0}, 1, true case "iogon": // LATIN SMALL LETTER I WITH OGONEK - return rune(0x012f), true + return {'\u012f', 0}, 1, true case "iopf": // MATHEMATICAL DOUBLE-STRUCK SMALL I - return rune(0x01d55a), true + return {'\U0001d55a', 0}, 1, true case "iota": // GREEK SMALL LETTER IOTA - return rune(0x03b9), true + return {'\u03b9', 0}, 1, true case "iprod": // INTERIOR PRODUCT - return rune(0x2a3c), true + return {'\u2a3c', 0}, 1, true case "iprodr": // RIGHTHAND INTERIOR PRODUCT - return rune(0x2a3d), true + return {'\u2a3d', 0}, 1, true case "iquest": // INVERTED QUESTION MARK - return rune(0xbf), true + return {'¿', 0}, 1, true case "iscr": // MATHEMATICAL SCRIPT SMALL I - return rune(0x01d4be), true + return {'\U0001d4be', 0}, 1, true case "isin": // ELEMENT OF - return rune(0x2208), true + return {'\u2208', 0}, 1, true case "isinE": // ELEMENT OF WITH TWO HORIZONTAL STROKES - return rune(0x22f9), true + return {'\u22f9', 0}, 1, true case "isindot": // ELEMENT OF WITH DOT ABOVE - return rune(0x22f5), true + return {'\u22f5', 0}, 1, true case "isins": // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE - return rune(0x22f4), true + return {'\u22f4', 0}, 1, true case "isinsv": // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE - return rune(0x22f3), true + return {'\u22f3', 0}, 1, true case "isinv": // ELEMENT OF - return rune(0x2208), true + return {'\u2208', 0}, 1, true case "isinvb": // ELEMENT OF WITH UNDERBAR - return rune(0x22f8), true + return {'\u22f8', 0}, 1, true case "it": // INVISIBLE TIMES - return rune(0x2062), true + return {'\u2062', 0}, 1, true case "itilde": // LATIN SMALL LETTER I WITH TILDE - return rune(0x0129), true + return {'\u0129', 0}, 1, true case "iukcy": // CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I - return rune(0x0456), true + return {'\u0456', 0}, 1, true case "iuml": // LATIN SMALL LETTER I WITH DIAERESIS - return rune(0xef), true + return {'ï', 0}, 1, true } case 'j': switch name { case "jcirc": // LATIN SMALL LETTER J WITH CIRCUMFLEX - return rune(0x0135), true + return {'\u0135', 0}, 1, true case "jcy": // CYRILLIC SMALL LETTER SHORT I - return rune(0x0439), true + return {'\u0439', 0}, 1, true case "jfr": // MATHEMATICAL FRAKTUR SMALL J - return rune(0x01d527), true + return {'\U0001d527', 0}, 1, true case "jmath": // LATIN SMALL LETTER DOTLESS J - return rune(0x0237), true + return {'\u0237', 0}, 1, true case "jnodot": // LATIN SMALL LETTER DOTLESS J - return rune(0x0237), true + return {'\u0237', 0}, 1, true case "jopf": // MATHEMATICAL DOUBLE-STRUCK SMALL J - return rune(0x01d55b), true + return {'\U0001d55b', 0}, 1, true case "jscr": // MATHEMATICAL SCRIPT SMALL J - return rune(0x01d4bf), true + return {'\U0001d4bf', 0}, 1, true case "jsercy": // CYRILLIC SMALL LETTER JE - return rune(0x0458), true + return {'\u0458', 0}, 1, true case "jukcy": // CYRILLIC SMALL LETTER UKRAINIAN IE - return rune(0x0454), true + return {'\u0454', 0}, 1, true } case 'k': switch name { case "kappa": // GREEK SMALL LETTER KAPPA - return rune(0x03ba), true + return {'\u03ba', 0}, 1, true case "kappav": // GREEK KAPPA SYMBOL - return rune(0x03f0), true + return {'\u03f0', 0}, 1, true case "kcedil": // LATIN SMALL LETTER K WITH CEDILLA - return rune(0x0137), true + return {'\u0137', 0}, 1, true case "kcy": // CYRILLIC SMALL LETTER KA - return rune(0x043a), true + return {'\u043a', 0}, 1, true case "kfr": // MATHEMATICAL FRAKTUR SMALL K - return rune(0x01d528), true + return {'\U0001d528', 0}, 1, true case "kgr": // GREEK SMALL LETTER KAPPA - return rune(0x03ba), true + return {'\u03ba', 0}, 1, true case "kgreen": // LATIN SMALL LETTER KRA - return rune(0x0138), true + return {'\u0138', 0}, 1, true case "khcy": // CYRILLIC SMALL LETTER HA - return rune(0x0445), true + return {'\u0445', 0}, 1, true case "khgr": // GREEK SMALL LETTER CHI - return rune(0x03c7), true + return {'\u03c7', 0}, 1, true case "kjcy": // CYRILLIC SMALL LETTER KJE - return rune(0x045c), true + return {'\u045c', 0}, 1, true case "kopf": // MATHEMATICAL DOUBLE-STRUCK SMALL K - return rune(0x01d55c), true + return {'\U0001d55c', 0}, 1, true case "koppa": // GREEK LETTER KOPPA - return rune(0x03de), true + return {'\u03de', 0}, 1, true case "kscr": // MATHEMATICAL SCRIPT SMALL K - return rune(0x01d4c0), true + return {'\U0001d4c0', 0}, 1, true } case 'l': switch name { case "lAarr": // LEFTWARDS TRIPLE ARROW - return rune(0x21da), true + return {'\u21da', 0}, 1, true case "lArr": // LEFTWARDS DOUBLE ARROW - return rune(0x21d0), true + return {'\u21d0', 0}, 1, true case "lAtail": // LEFTWARDS DOUBLE ARROW-TAIL - return rune(0x291b), true + return {'\u291b', 0}, 1, true case "lBarr": // LEFTWARDS TRIPLE DASH ARROW - return rune(0x290e), true + return {'\u290e', 0}, 1, true case "lE": // LESS-THAN OVER EQUAL TO - return rune(0x2266), true + return {'\u2266', 0}, 1, true case "lEg": // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN - return rune(0x2a8b), true + return {'\u2a8b', 0}, 1, true case "lHar": // LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN - return rune(0x2962), true + return {'\u2962', 0}, 1, true case "lacute": // LATIN SMALL LETTER L WITH ACUTE - return rune(0x013a), true + return {'\u013a', 0}, 1, true case "laemptyv": // EMPTY SET WITH LEFT ARROW ABOVE - return rune(0x29b4), true + return {'\u29b4', 0}, 1, true case "lagran": // SCRIPT CAPITAL L - return rune(0x2112), true + return {'\u2112', 0}, 1, true case "lambda": // GREEK SMALL LETTER LAMDA - return rune(0x03bb), true + return {'\u03bb', 0}, 1, true case "lang": // MATHEMATICAL LEFT ANGLE BRACKET - return rune(0x27e8), true + return {'\u27e8', 0}, 1, true case "langd": // LEFT ANGLE BRACKET WITH DOT - return rune(0x2991), true + return {'\u2991', 0}, 1, true case "langle": // MATHEMATICAL LEFT ANGLE BRACKET - return rune(0x27e8), true + return {'\u27e8', 0}, 1, true case "lap": // LESS-THAN OR APPROXIMATE - return rune(0x2a85), true + return {'\u2a85', 0}, 1, true case "laquo": // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK - return rune(0xab), true + return {'«', 0}, 1, true case "larr": // LEFTWARDS ARROW - return rune(0x2190), true + return {'\u2190', 0}, 1, true case "larr2": // LEFTWARDS PAIRED ARROWS - return rune(0x21c7), true + return {'\u21c7', 0}, 1, true case "larrb": // LEFTWARDS ARROW TO BAR - return rune(0x21e4), true + return {'\u21e4', 0}, 1, true case "larrbfs": // LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND - return rune(0x291f), true + return {'\u291f', 0}, 1, true case "larrfs": // LEFTWARDS ARROW TO BLACK DIAMOND - return rune(0x291d), true + return {'\u291d', 0}, 1, true case "larrhk": // LEFTWARDS ARROW WITH HOOK - return rune(0x21a9), true + return {'\u21a9', 0}, 1, true case "larrlp": // LEFTWARDS ARROW WITH LOOP - return rune(0x21ab), true + return {'\u21ab', 0}, 1, true case "larrpl": // LEFT-SIDE ARC ANTICLOCKWISE ARROW - return rune(0x2939), true + return {'\u2939', 0}, 1, true case "larrsim": // LEFTWARDS ARROW ABOVE TILDE OPERATOR - return rune(0x2973), true + return {'\u2973', 0}, 1, true case "larrtl": // LEFTWARDS ARROW WITH TAIL - return rune(0x21a2), true + return {'\u21a2', 0}, 1, true case "lat": // LARGER THAN - return rune(0x2aab), true + return {'\u2aab', 0}, 1, true case "latail": // LEFTWARDS ARROW-TAIL - return rune(0x2919), true + return {'\u2919', 0}, 1, true case "late": // LARGER THAN OR EQUAL TO - return rune(0x2aad), true + return {'\u2aad', 0}, 1, true case "lates": // LARGER THAN OR slanted EQUAL - return rune(0x2aad), true + return {'\u2aad', '\u2aad'}, 2, true case "lbarr": // LEFTWARDS DOUBLE DASH ARROW - return rune(0x290c), true + return {'\u290c', 0}, 1, true case "lbbrk": // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT - return rune(0x2772), true + return {'\u2772', 0}, 1, true case "lbrace": // LEFT CURLY BRACKET - return rune(0x7b), true + return {'{', 0}, 1, true case "lbrack": // LEFT SQUARE BRACKET - return rune(0x5b), true + return {'[', 0}, 1, true case "lbrke": // LEFT SQUARE BRACKET WITH UNDERBAR - return rune(0x298b), true + return {'\u298b', 0}, 1, true case "lbrksld": // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - return rune(0x298f), true + return {'\u298f', 0}, 1, true case "lbrkslu": // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER - return rune(0x298d), true + return {'\u298d', 0}, 1, true case "lcaron": // LATIN SMALL LETTER L WITH CARON - return rune(0x013e), true + return {'\u013e', 0}, 1, true case "lcedil": // LATIN SMALL LETTER L WITH CEDILLA - return rune(0x013c), true + return {'\u013c', 0}, 1, true case "lceil": // LEFT CEILING - return rune(0x2308), true + return {'\u2308', 0}, 1, true case "lcub": // LEFT CURLY BRACKET - return rune(0x7b), true + return {'{', 0}, 1, true case "lcy": // CYRILLIC SMALL LETTER EL - return rune(0x043b), true + return {'\u043b', 0}, 1, true case "ldca": // ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS - return rune(0x2936), true + return {'\u2936', 0}, 1, true case "ldharb": // LEFTWARDS HARPOON WITH BARB DOWN TO BAR - return rune(0x2956), true + return {'\u2956', 0}, 1, true case "ldot": // LESS-THAN WITH DOT - return rune(0x22d6), true + return {'\u22d6', 0}, 1, true case "ldquo": // LEFT DOUBLE QUOTATION MARK - return rune(0x201c), true + return {'\u201c', 0}, 1, true case "ldquor": // DOUBLE LOW-9 QUOTATION MARK - return rune(0x201e), true + return {'\u201e', 0}, 1, true case "ldrdhar": // LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN - return rune(0x2967), true + return {'\u2967', 0}, 1, true case "ldrdshar": // LEFT BARB DOWN RIGHT BARB DOWN HARPOON - return rune(0x2950), true + return {'\u2950', 0}, 1, true case "ldrushar": // LEFT BARB DOWN RIGHT BARB UP HARPOON - return rune(0x294b), true + return {'\u294b', 0}, 1, true case "ldsh": // DOWNWARDS ARROW WITH TIP LEFTWARDS - return rune(0x21b2), true + return {'\u21b2', 0}, 1, true case "le": // LESS-THAN OR EQUAL TO - return rune(0x2264), true + return {'\u2264', 0}, 1, true case "leftarrow": // LEFTWARDS ARROW - return rune(0x2190), true + return {'\u2190', 0}, 1, true case "leftarrowtail": // LEFTWARDS ARROW WITH TAIL - return rune(0x21a2), true + return {'\u21a2', 0}, 1, true case "leftharpoondown": // LEFTWARDS HARPOON WITH BARB DOWNWARDS - return rune(0x21bd), true + return {'\u21bd', 0}, 1, true case "leftharpoonup": // LEFTWARDS HARPOON WITH BARB UPWARDS - return rune(0x21bc), true + return {'\u21bc', 0}, 1, true case "leftleftarrows": // LEFTWARDS PAIRED ARROWS - return rune(0x21c7), true + return {'\u21c7', 0}, 1, true case "leftrightarrow": // LEFT RIGHT ARROW - return rune(0x2194), true + return {'\u2194', 0}, 1, true case "leftrightarrows": // LEFTWARDS ARROW OVER RIGHTWARDS ARROW - return rune(0x21c6), true + return {'\u21c6', 0}, 1, true case "leftrightharpoons": // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON - return rune(0x21cb), true + return {'\u21cb', 0}, 1, true case "leftrightsquigarrow": // LEFT RIGHT WAVE ARROW - return rune(0x21ad), true + return {'\u21ad', 0}, 1, true case "leftthreetimes": // LEFT SEMIDIRECT PRODUCT - return rune(0x22cb), true + return {'\u22cb', 0}, 1, true case "leg": // LESS-THAN EQUAL TO OR GREATER-THAN - return rune(0x22da), true + return {'\u22da', 0}, 1, true case "leq": // LESS-THAN OR EQUAL TO - return rune(0x2264), true + return {'\u2264', 0}, 1, true case "leqq": // LESS-THAN OVER EQUAL TO - return rune(0x2266), true + return {'\u2266', 0}, 1, true case "leqslant": // LESS-THAN OR SLANTED EQUAL TO - return rune(0x2a7d), true + return {'\u2a7d', 0}, 1, true case "les": // LESS-THAN OR SLANTED EQUAL TO - return rune(0x2a7d), true + return {'\u2a7d', 0}, 1, true case "lescc": // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL - return rune(0x2aa8), true + return {'\u2aa8', 0}, 1, true case "lesdot": // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE - return rune(0x2a7f), true + return {'\u2a7f', 0}, 1, true case "lesdoto": // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE - return rune(0x2a81), true + return {'\u2a81', 0}, 1, true case "lesdotor": // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT - return rune(0x2a83), true + return {'\u2a83', 0}, 1, true case "lesg": // LESS-THAN slanted EQUAL TO OR GREATER-THAN - return rune(0x22da), true + return {'\u22da', '\u22da'}, 2, true case "lesges": // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL - return rune(0x2a93), true + return {'\u2a93', 0}, 1, true case "lessapprox": // LESS-THAN OR APPROXIMATE - return rune(0x2a85), true + return {'\u2a85', 0}, 1, true case "lessdot": // LESS-THAN WITH DOT - return rune(0x22d6), true + return {'\u22d6', 0}, 1, true case "lesseqgtr": // LESS-THAN EQUAL TO OR GREATER-THAN - return rune(0x22da), true + return {'\u22da', 0}, 1, true case "lesseqqgtr": // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN - return rune(0x2a8b), true + return {'\u2a8b', 0}, 1, true case "lessgtr": // LESS-THAN OR GREATER-THAN - return rune(0x2276), true + return {'\u2276', 0}, 1, true case "lesssim": // LESS-THAN OR EQUIVALENT TO - return rune(0x2272), true + return {'\u2272', 0}, 1, true case "lfbowtie": // BOWTIE WITH LEFT HALF BLACK - return rune(0x29d1), true + return {'\u29d1', 0}, 1, true case "lfisht": // LEFT FISH TAIL - return rune(0x297c), true + return {'\u297c', 0}, 1, true case "lfloor": // LEFT FLOOR - return rune(0x230a), true + return {'\u230a', 0}, 1, true case "lfr": // MATHEMATICAL FRAKTUR SMALL L - return rune(0x01d529), true + return {'\U0001d529', 0}, 1, true case "lftimes": // TIMES WITH LEFT HALF BLACK - return rune(0x29d4), true + return {'\u29d4', 0}, 1, true case "lg": // LESS-THAN OR GREATER-THAN - return rune(0x2276), true + return {'\u2276', 0}, 1, true case "lgE": // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL - return rune(0x2a91), true + return {'\u2a91', 0}, 1, true case "lgr": // GREEK SMALL LETTER LAMDA - return rune(0x03bb), true + return {'\u03bb', 0}, 1, true case "lhard": // LEFTWARDS HARPOON WITH BARB DOWNWARDS - return rune(0x21bd), true + return {'\u21bd', 0}, 1, true case "lharu": // LEFTWARDS HARPOON WITH BARB UPWARDS - return rune(0x21bc), true + return {'\u21bc', 0}, 1, true case "lharul": // LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH - return rune(0x296a), true + return {'\u296a', 0}, 1, true case "lhblk": // LOWER HALF BLOCK - return rune(0x2584), true + return {'\u2584', 0}, 1, true case "ljcy": // CYRILLIC SMALL LETTER LJE - return rune(0x0459), true + return {'\u0459', 0}, 1, true case "ll": // MUCH LESS-THAN - return rune(0x226a), true + return {'\u226a', 0}, 1, true case "llarr": // LEFTWARDS PAIRED ARROWS - return rune(0x21c7), true + return {'\u21c7', 0}, 1, true case "llcorner": // BOTTOM LEFT CORNER - return rune(0x231e), true + return {'\u231e', 0}, 1, true case "llhard": // LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH - return rune(0x296b), true + return {'\u296b', 0}, 1, true case "lltri": // LOWER LEFT TRIANGLE - return rune(0x25fa), true + return {'\u25fa', 0}, 1, true case "lltrif": // BLACK LOWER LEFT TRIANGLE - return rune(0x25e3), true + return {'\u25e3', 0}, 1, true case "lmidot": // LATIN SMALL LETTER L WITH MIDDLE DOT - return rune(0x0140), true + return {'\u0140', 0}, 1, true case "lmoust": // UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION - return rune(0x23b0), true + return {'\u23b0', 0}, 1, true case "lmoustache": // UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION - return rune(0x23b0), true + return {'\u23b0', 0}, 1, true case "lnE": // LESS-THAN BUT NOT EQUAL TO - return rune(0x2268), true + return {'\u2268', 0}, 1, true case "lnap": // LESS-THAN AND NOT APPROXIMATE - return rune(0x2a89), true + return {'\u2a89', 0}, 1, true case "lnapprox": // LESS-THAN AND NOT APPROXIMATE - return rune(0x2a89), true + return {'\u2a89', 0}, 1, true case "lne": // LESS-THAN AND SINGLE-LINE NOT EQUAL TO - return rune(0x2a87), true + return {'\u2a87', 0}, 1, true case "lneq": // LESS-THAN AND SINGLE-LINE NOT EQUAL TO - return rune(0x2a87), true + return {'\u2a87', 0}, 1, true case "lneqq": // LESS-THAN BUT NOT EQUAL TO - return rune(0x2268), true + return {'\u2268', 0}, 1, true case "lnsim": // LESS-THAN BUT NOT EQUIVALENT TO - return rune(0x22e6), true + return {'\u22e6', 0}, 1, true case "loang": // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET - return rune(0x27ec), true + return {'\u27ec', 0}, 1, true case "loarr": // LEFTWARDS OPEN-HEADED ARROW - return rune(0x21fd), true + return {'\u21fd', 0}, 1, true case "lobrk": // MATHEMATICAL LEFT WHITE SQUARE BRACKET - return rune(0x27e6), true + return {'\u27e6', 0}, 1, true case "locub": // LEFT WHITE CURLY BRACKET - return rune(0x2983), true + return {'\u2983', 0}, 1, true case "longleftarrow": // LONG LEFTWARDS ARROW - return rune(0x27f5), true + return {'\u27f5', 0}, 1, true case "longleftrightarrow": // LONG LEFT RIGHT ARROW - return rune(0x27f7), true + return {'\u27f7', 0}, 1, true case "longmapsto": // LONG RIGHTWARDS ARROW FROM BAR - return rune(0x27fc), true + return {'\u27fc', 0}, 1, true case "longrightarrow": // LONG RIGHTWARDS ARROW - return rune(0x27f6), true + return {'\u27f6', 0}, 1, true case "looparrowleft": // LEFTWARDS ARROW WITH LOOP - return rune(0x21ab), true + return {'\u21ab', 0}, 1, true case "looparrowright": // RIGHTWARDS ARROW WITH LOOP - return rune(0x21ac), true + return {'\u21ac', 0}, 1, true case "lopar": // LEFT WHITE PARENTHESIS - return rune(0x2985), true + return {'\u2985', 0}, 1, true case "lopf": // MATHEMATICAL DOUBLE-STRUCK SMALL L - return rune(0x01d55d), true + return {'\U0001d55d', 0}, 1, true case "loplus": // PLUS SIGN IN LEFT HALF CIRCLE - return rune(0x2a2d), true + return {'\u2a2d', 0}, 1, true case "lotimes": // MULTIPLICATION SIGN IN LEFT HALF CIRCLE - return rune(0x2a34), true + return {'\u2a34', 0}, 1, true case "lowast": // LOW ASTERISK - return rune(0x204e), true + return {'\u204e', 0}, 1, true case "lowbar": // LOW LINE - return rune(0x5f), true + return {'_', 0}, 1, true case "lowint": // INTEGRAL WITH UNDERBAR - return rune(0x2a1c), true + return {'\u2a1c', 0}, 1, true case "loz": // LOZENGE - return rune(0x25ca), true + return {'\u25ca', 0}, 1, true case "lozenge": // LOZENGE - return rune(0x25ca), true + return {'\u25ca', 0}, 1, true case "lozf": // BLACK LOZENGE - return rune(0x29eb), true + return {'\u29eb', 0}, 1, true case "lpar": // LEFT PARENTHESIS - return rune(0x28), true + return {'(', 0}, 1, true case "lpargt": // SPHERICAL ANGLE OPENING LEFT - return rune(0x29a0), true + return {'\u29a0', 0}, 1, true case "lparlt": // LEFT ARC LESS-THAN BRACKET - return rune(0x2993), true + return {'\u2993', 0}, 1, true case "lrarr": // LEFTWARDS ARROW OVER RIGHTWARDS ARROW - return rune(0x21c6), true + return {'\u21c6', 0}, 1, true case "lrarr2": // LEFTWARDS ARROW OVER RIGHTWARDS ARROW - return rune(0x21c6), true + return {'\u21c6', 0}, 1, true case "lrcorner": // BOTTOM RIGHT CORNER - return rune(0x231f), true + return {'\u231f', 0}, 1, true case "lrhar": // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON - return rune(0x21cb), true + return {'\u21cb', 0}, 1, true case "lrhar2": // LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON - return rune(0x21cb), true + return {'\u21cb', 0}, 1, true case "lrhard": // RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH - return rune(0x296d), true + return {'\u296d', 0}, 1, true case "lrm": // LEFT-TO-RIGHT MARK - return rune(0x200e), true + return {'\u200e', 0}, 1, true case "lrtri": // RIGHT TRIANGLE - return rune(0x22bf), true + return {'\u22bf', 0}, 1, true case "lsaquo": // SINGLE LEFT-POINTING ANGLE QUOTATION MARK - return rune(0x2039), true + return {'\u2039', 0}, 1, true case "lscr": // MATHEMATICAL SCRIPT SMALL L - return rune(0x01d4c1), true + return {'\U0001d4c1', 0}, 1, true case "lsh": // UPWARDS ARROW WITH TIP LEFTWARDS - return rune(0x21b0), true + return {'\u21b0', 0}, 1, true case "lsim": // LESS-THAN OR EQUIVALENT TO - return rune(0x2272), true + return {'\u2272', 0}, 1, true case "lsime": // LESS-THAN ABOVE SIMILAR OR EQUAL - return rune(0x2a8d), true + return {'\u2a8d', 0}, 1, true case "lsimg": // LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN - return rune(0x2a8f), true + return {'\u2a8f', 0}, 1, true case "lsqb": // LEFT SQUARE BRACKET - return rune(0x5b), true + return {'[', 0}, 1, true case "lsquo": // LEFT SINGLE QUOTATION MARK - return rune(0x2018), true + return {'\u2018', 0}, 1, true case "lsquor": // SINGLE LOW-9 QUOTATION MARK - return rune(0x201a), true + return {'\u201a', 0}, 1, true case "lstrok": // LATIN SMALL LETTER L WITH STROKE - return rune(0x0142), true + return {'\u0142', 0}, 1, true case "lt": // LESS-THAN SIGN - return rune(0x3c), true + return {'<', 0}, 1, true case "ltcc": // LESS-THAN CLOSED BY CURVE - return rune(0x2aa6), true + return {'\u2aa6', 0}, 1, true case "ltcir": // LESS-THAN WITH CIRCLE INSIDE - return rune(0x2a79), true + return {'\u2a79', 0}, 1, true case "ltdot": // LESS-THAN WITH DOT - return rune(0x22d6), true + return {'\u22d6', 0}, 1, true case "lthree": // LEFT SEMIDIRECT PRODUCT - return rune(0x22cb), true + return {'\u22cb', 0}, 1, true case "ltimes": // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT - return rune(0x22c9), true + return {'\u22c9', 0}, 1, true case "ltlarr": // LESS-THAN ABOVE LEFTWARDS ARROW - return rune(0x2976), true + return {'\u2976', 0}, 1, true case "ltquest": // LESS-THAN WITH QUESTION MARK ABOVE - return rune(0x2a7b), true + return {'\u2a7b', 0}, 1, true case "ltrPar": // DOUBLE RIGHT ARC LESS-THAN BRACKET - return rune(0x2996), true + return {'\u2996', 0}, 1, true case "ltri": // WHITE LEFT-POINTING SMALL TRIANGLE - return rune(0x25c3), true + return {'\u25c3', 0}, 1, true case "ltrie": // NORMAL SUBGROUP OF OR EQUAL TO - return rune(0x22b4), true + return {'\u22b4', 0}, 1, true case "ltrif": // BLACK LEFT-POINTING SMALL TRIANGLE - return rune(0x25c2), true + return {'\u25c2', 0}, 1, true case "ltrivb": // LEFT TRIANGLE BESIDE VERTICAL BAR - return rune(0x29cf), true + return {'\u29cf', 0}, 1, true case "luharb": // LEFTWARDS HARPOON WITH BARB UP TO BAR - return rune(0x2952), true + return {'\u2952', 0}, 1, true case "lurdshar": // LEFT BARB UP RIGHT BARB DOWN HARPOON - return rune(0x294a), true + return {'\u294a', 0}, 1, true case "luruhar": // LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP - return rune(0x2966), true + return {'\u2966', 0}, 1, true case "lurushar": // LEFT BARB UP RIGHT BARB UP HARPOON - return rune(0x294e), true + return {'\u294e', 0}, 1, true case "lvertneqq": // LESS-THAN BUT NOT EQUAL TO - with vertical stroke - return rune(0x2268), true + return {'\u2268', '\u2268'}, 2, true case "lvnE": // LESS-THAN BUT NOT EQUAL TO - with vertical stroke - return rune(0x2268), true + return {'\u2268', '\u2268'}, 2, true } case 'm': switch name { case "mDDot": // GEOMETRIC PROPORTION - return rune(0x223a), true + return {'\u223a', 0}, 1, true case "macr": // MACRON - return rune(0xaf), true + return {'¯', 0}, 1, true case "male": // MALE SIGN - return rune(0x2642), true + return {'\u2642', 0}, 1, true case "malt": // MALTESE CROSS - return rune(0x2720), true + return {'\u2720', 0}, 1, true case "maltese": // MALTESE CROSS - return rune(0x2720), true + return {'\u2720', 0}, 1, true case "map": // RIGHTWARDS ARROW FROM BAR - return rune(0x21a6), true + return {'\u21a6', 0}, 1, true case "mapsto": // RIGHTWARDS ARROW FROM BAR - return rune(0x21a6), true + return {'\u21a6', 0}, 1, true case "mapstodown": // DOWNWARDS ARROW FROM BAR - return rune(0x21a7), true + return {'\u21a7', 0}, 1, true case "mapstoleft": // LEFTWARDS ARROW FROM BAR - return rune(0x21a4), true + return {'\u21a4', 0}, 1, true case "mapstoup": // UPWARDS ARROW FROM BAR - return rune(0x21a5), true + return {'\u21a5', 0}, 1, true case "marker": // BLACK VERTICAL RECTANGLE - return rune(0x25ae), true + return {'\u25ae', 0}, 1, true case "mcomma": // MINUS SIGN WITH COMMA ABOVE - return rune(0x2a29), true + return {'\u2a29', 0}, 1, true case "mcy": // CYRILLIC SMALL LETTER EM - return rune(0x043c), true + return {'\u043c', 0}, 1, true case "mdash": // EM DASH - return rune(0x2014), true + return {'\u2014', 0}, 1, true case "measuredangle": // MEASURED ANGLE - return rune(0x2221), true + return {'\u2221', 0}, 1, true case "mfr": // MATHEMATICAL FRAKTUR SMALL M - return rune(0x01d52a), true + return {'\U0001d52a', 0}, 1, true case "mgr": // GREEK SMALL LETTER MU - return rune(0x03bc), true + return {'\u03bc', 0}, 1, true case "mho": // INVERTED OHM SIGN - return rune(0x2127), true + return {'\u2127', 0}, 1, true case "micro": // MICRO SIGN - return rune(0xb5), true + return {'µ', 0}, 1, true case "mid": // DIVIDES - return rune(0x2223), true + return {'\u2223', 0}, 1, true case "midast": // ASTERISK - return rune(0x2a), true + return {'*', 0}, 1, true case "midcir": // VERTICAL LINE WITH CIRCLE BELOW - return rune(0x2af0), true + return {'\u2af0', 0}, 1, true case "middot": // MIDDLE DOT - return rune(0xb7), true + return {'·', 0}, 1, true case "minus": // MINUS SIGN - return rune(0x2212), true + return {'\u2212', 0}, 1, true case "minusb": // SQUARED MINUS - return rune(0x229f), true + return {'\u229f', 0}, 1, true case "minusd": // DOT MINUS - return rune(0x2238), true + return {'\u2238', 0}, 1, true case "minusdu": // MINUS SIGN WITH DOT BELOW - return rune(0x2a2a), true + return {'\u2a2a', 0}, 1, true case "mlcp": // TRANSVERSAL INTERSECTION - return rune(0x2adb), true + return {'\u2adb', 0}, 1, true case "mldr": // HORIZONTAL ELLIPSIS - return rune(0x2026), true + return {'\u2026', 0}, 1, true case "mnplus": // MINUS-OR-PLUS SIGN - return rune(0x2213), true + return {'\u2213', 0}, 1, true case "models": // MODELS - return rune(0x22a7), true + return {'\u22a7', 0}, 1, true case "mopf": // MATHEMATICAL DOUBLE-STRUCK SMALL M - return rune(0x01d55e), true + return {'\U0001d55e', 0}, 1, true case "mp": // MINUS-OR-PLUS SIGN - return rune(0x2213), true + return {'\u2213', 0}, 1, true case "mscr": // MATHEMATICAL SCRIPT SMALL M - return rune(0x01d4c2), true + return {'\U0001d4c2', 0}, 1, true case "mstpos": // INVERTED LAZY S - return rune(0x223e), true + return {'\u223e', 0}, 1, true case "mu": // GREEK SMALL LETTER MU - return rune(0x03bc), true + return {'\u03bc', 0}, 1, true case "multimap": // MULTIMAP - return rune(0x22b8), true + return {'\u22b8', 0}, 1, true case "mumap": // MULTIMAP - return rune(0x22b8), true + return {'\u22b8', 0}, 1, true } case 'n': switch name { case "nGg": // VERY MUCH GREATER-THAN with slash - return rune(0x22d9), true + return {'\u22d9', '\u22d9'}, 2, true case "nGt": // MUCH GREATER THAN with vertical line - return rune(0x226b), true + return {'\u226b', '\u226b'}, 2, true case "nGtv": // MUCH GREATER THAN with slash - return rune(0x226b), true + return {'\u226b', '\u226b'}, 2, true case "nLeftarrow": // LEFTWARDS DOUBLE ARROW WITH STROKE - return rune(0x21cd), true + return {'\u21cd', 0}, 1, true case "nLeftrightarrow": // LEFT RIGHT DOUBLE ARROW WITH STROKE - return rune(0x21ce), true + return {'\u21ce', 0}, 1, true case "nLl": // VERY MUCH LESS-THAN with slash - return rune(0x22d8), true + return {'\u22d8', '\u22d8'}, 2, true case "nLt": // MUCH LESS THAN with vertical line - return rune(0x226a), true + return {'\u226a', '\u226a'}, 2, true case "nLtv": // MUCH LESS THAN with slash - return rune(0x226a), true + return {'\u226a', '\u226a'}, 2, true case "nRightarrow": // RIGHTWARDS DOUBLE ARROW WITH STROKE - return rune(0x21cf), true + return {'\u21cf', 0}, 1, true case "nVDash": // NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE - return rune(0x22af), true + return {'\u22af', 0}, 1, true case "nVdash": // DOES NOT FORCE - return rune(0x22ae), true + return {'\u22ae', 0}, 1, true case "nabla": // NABLA - return rune(0x2207), true + return {'\u2207', 0}, 1, true case "nacute": // LATIN SMALL LETTER N WITH ACUTE - return rune(0x0144), true + return {'\u0144', 0}, 1, true case "nang": // ANGLE with vertical line - return rune(0x2220), true + return {'\u2220', '\u2220'}, 2, true case "nap": // NOT ALMOST EQUAL TO - return rune(0x2249), true + return {'\u2249', 0}, 1, true case "napE": // APPROXIMATELY EQUAL OR EQUAL TO with slash - return rune(0x2a70), true + return {'\u2a70', '\u2a70'}, 2, true case "napid": // TRIPLE TILDE with slash - return rune(0x224b), true + return {'\u224b', '\u224b'}, 2, true case "napos": // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE - return rune(0x0149), true + return {'\u0149', 0}, 1, true case "napprox": // NOT ALMOST EQUAL TO - return rune(0x2249), true + return {'\u2249', 0}, 1, true case "natur": // MUSIC NATURAL SIGN - return rune(0x266e), true + return {'\u266e', 0}, 1, true case "natural": // MUSIC NATURAL SIGN - return rune(0x266e), true + return {'\u266e', 0}, 1, true case "naturals": // DOUBLE-STRUCK CAPITAL N - return rune(0x2115), true + return {'\u2115', 0}, 1, true case "nbsp": // NO-BREAK SPACE - return rune(0xa0), true + return {'\u00a0', 0}, 1, true case "nbump": // GEOMETRICALLY EQUIVALENT TO with slash - return rune(0x224e), true + return {'\u224e', '\u224e'}, 2, true case "nbumpe": // DIFFERENCE BETWEEN with slash - return rune(0x224f), true + return {'\u224f', '\u224f'}, 2, true case "ncap": // INTERSECTION WITH OVERBAR - return rune(0x2a43), true + return {'\u2a43', 0}, 1, true case "ncaron": // LATIN SMALL LETTER N WITH CARON - return rune(0x0148), true + return {'\u0148', 0}, 1, true case "ncedil": // LATIN SMALL LETTER N WITH CEDILLA - return rune(0x0146), true + return {'\u0146', 0}, 1, true case "ncong": // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO - return rune(0x2247), true + return {'\u2247', 0}, 1, true case "ncongdot": // CONGRUENT WITH DOT ABOVE with slash - return rune(0x2a6d), true + return {'\u2a6d', '\u2a6d'}, 2, true case "ncup": // UNION WITH OVERBAR - return rune(0x2a42), true + return {'\u2a42', 0}, 1, true case "ncy": // CYRILLIC SMALL LETTER EN - return rune(0x043d), true + return {'\u043d', 0}, 1, true case "ndash": // EN DASH - return rune(0x2013), true + return {'\u2013', 0}, 1, true case "ne": // NOT EQUAL TO - return rune(0x2260), true + return {'\u2260', 0}, 1, true case "neArr": // NORTH EAST DOUBLE ARROW - return rune(0x21d7), true + return {'\u21d7', 0}, 1, true case "nearhk": // NORTH EAST ARROW WITH HOOK - return rune(0x2924), true + return {'\u2924', 0}, 1, true case "nearr": // NORTH EAST ARROW - return rune(0x2197), true + return {'\u2197', 0}, 1, true case "nearrow": // NORTH EAST ARROW - return rune(0x2197), true + return {'\u2197', 0}, 1, true case "nedot": // APPROACHES THE LIMIT with slash - return rune(0x2250), true + return {'\u2250', '\u2250'}, 2, true case "neonwarr": // NORTH EAST ARROW CROSSING NORTH WEST ARROW - return rune(0x2931), true + return {'\u2931', 0}, 1, true case "neosearr": // NORTH EAST ARROW CROSSING SOUTH EAST ARROW - return rune(0x292e), true + return {'\u292e', 0}, 1, true case "nequiv": // NOT IDENTICAL TO - return rune(0x2262), true + return {'\u2262', 0}, 1, true case "nesear": // NORTH EAST ARROW AND SOUTH EAST ARROW - return rune(0x2928), true + return {'\u2928', 0}, 1, true case "nesim": // MINUS TILDE with slash - return rune(0x2242), true + return {'\u2242', '\u2242'}, 2, true case "neswsarr": // NORTH EAST AND SOUTH WEST ARROW - return rune(0x2922), true + return {'\u2922', 0}, 1, true case "nexist": // THERE DOES NOT EXIST - return rune(0x2204), true + return {'\u2204', 0}, 1, true case "nexists": // THERE DOES NOT EXIST - return rune(0x2204), true + return {'\u2204', 0}, 1, true case "nfr": // MATHEMATICAL FRAKTUR SMALL N - return rune(0x01d52b), true + return {'\U0001d52b', 0}, 1, true case "ngE": // GREATER-THAN OVER EQUAL TO with slash - return rune(0x2267), true + return {'\u2267', '\u2267'}, 2, true case "nge": // NEITHER GREATER-THAN NOR EQUAL TO - return rune(0x2271), true + return {'\u2271', 0}, 1, true case "ngeq": // NEITHER GREATER-THAN NOR EQUAL TO - return rune(0x2271), true + return {'\u2271', 0}, 1, true case "ngeqq": // GREATER-THAN OVER EQUAL TO with slash - return rune(0x2267), true + return {'\u2267', '\u2267'}, 2, true case "ngeqslant": // GREATER-THAN OR SLANTED EQUAL TO with slash - return rune(0x2a7e), true + return {'\u2a7e', '\u2a7e'}, 2, true case "nges": // GREATER-THAN OR SLANTED EQUAL TO with slash - return rune(0x2a7e), true + return {'\u2a7e', '\u2a7e'}, 2, true case "ngr": // GREEK SMALL LETTER NU - return rune(0x03bd), true + return {'\u03bd', 0}, 1, true case "ngsim": // NEITHER GREATER-THAN NOR EQUIVALENT TO - return rune(0x2275), true + return {'\u2275', 0}, 1, true case "ngt": // NOT GREATER-THAN - return rune(0x226f), true + return {'\u226f', 0}, 1, true case "ngtr": // NOT GREATER-THAN - return rune(0x226f), true + return {'\u226f', 0}, 1, true case "nhArr": // LEFT RIGHT DOUBLE ARROW WITH STROKE - return rune(0x21ce), true + return {'\u21ce', 0}, 1, true case "nharr": // LEFT RIGHT ARROW WITH STROKE - return rune(0x21ae), true + return {'\u21ae', 0}, 1, true case "nhpar": // PARALLEL WITH HORIZONTAL STROKE - return rune(0x2af2), true + return {'\u2af2', 0}, 1, true case "ni": // CONTAINS AS MEMBER - return rune(0x220b), true + return {'\u220b', 0}, 1, true case "nis": // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE - return rune(0x22fc), true + return {'\u22fc', 0}, 1, true case "nisd": // CONTAINS WITH LONG HORIZONTAL STROKE - return rune(0x22fa), true + return {'\u22fa', 0}, 1, true case "niv": // CONTAINS AS MEMBER - return rune(0x220b), true + return {'\u220b', 0}, 1, true case "njcy": // CYRILLIC SMALL LETTER NJE - return rune(0x045a), true + return {'\u045a', 0}, 1, true case "nlArr": // LEFTWARDS DOUBLE ARROW WITH STROKE - return rune(0x21cd), true + return {'\u21cd', 0}, 1, true case "nlE": // LESS-THAN OVER EQUAL TO with slash - return rune(0x2266), true + return {'\u2266', '\u2266'}, 2, true case "nlarr": // LEFTWARDS ARROW WITH STROKE - return rune(0x219a), true + return {'\u219a', 0}, 1, true case "nldr": // TWO DOT LEADER - return rune(0x2025), true + return {'\u2025', 0}, 1, true case "nle": // NEITHER LESS-THAN NOR EQUAL TO - return rune(0x2270), true + return {'\u2270', 0}, 1, true case "nleftarrow": // LEFTWARDS ARROW WITH STROKE - return rune(0x219a), true + return {'\u219a', 0}, 1, true case "nleftrightarrow": // LEFT RIGHT ARROW WITH STROKE - return rune(0x21ae), true + return {'\u21ae', 0}, 1, true case "nleq": // NEITHER LESS-THAN NOR EQUAL TO - return rune(0x2270), true + return {'\u2270', 0}, 1, true case "nleqq": // LESS-THAN OVER EQUAL TO with slash - return rune(0x2266), true + return {'\u2266', '\u2266'}, 2, true case "nleqslant": // LESS-THAN OR SLANTED EQUAL TO with slash - return rune(0x2a7d), true + return {'\u2a7d', '\u2a7d'}, 2, true case "nles": // LESS-THAN OR SLANTED EQUAL TO with slash - return rune(0x2a7d), true + return {'\u2a7d', '\u2a7d'}, 2, true case "nless": // NOT LESS-THAN - return rune(0x226e), true + return {'\u226e', 0}, 1, true case "nlsim": // NEITHER LESS-THAN NOR EQUIVALENT TO - return rune(0x2274), true + return {'\u2274', 0}, 1, true case "nlt": // NOT LESS-THAN - return rune(0x226e), true + return {'\u226e', 0}, 1, true case "nltri": // NOT NORMAL SUBGROUP OF - return rune(0x22ea), true + return {'\u22ea', 0}, 1, true case "nltrie": // NOT NORMAL SUBGROUP OF OR EQUAL TO - return rune(0x22ec), true + return {'\u22ec', 0}, 1, true case "nltrivb": // LEFT TRIANGLE BESIDE VERTICAL BAR with slash - return rune(0x29cf), true + return {'\u29cf', '\u29cf'}, 2, true case "nmid": // DOES NOT DIVIDE - return rune(0x2224), true + return {'\u2224', 0}, 1, true case "nopf": // MATHEMATICAL DOUBLE-STRUCK SMALL N - return rune(0x01d55f), true + return {'\U0001d55f', 0}, 1, true case "not": // NOT SIGN - return rune(0xac), true + return {'¬', 0}, 1, true case "notin": // NOT AN ELEMENT OF - return rune(0x2209), true + return {'\u2209', 0}, 1, true case "notinE": // ELEMENT OF WITH TWO HORIZONTAL STROKES with slash - return rune(0x22f9), true + return {'\u22f9', '\u22f9'}, 2, true case "notindot": // ELEMENT OF WITH DOT ABOVE with slash - return rune(0x22f5), true + return {'\u22f5', '\u22f5'}, 2, true case "notinva": // NOT AN ELEMENT OF - return rune(0x2209), true + return {'\u2209', 0}, 1, true case "notinvb": // SMALL ELEMENT OF WITH OVERBAR - return rune(0x22f7), true + return {'\u22f7', 0}, 1, true case "notinvc": // ELEMENT OF WITH OVERBAR - return rune(0x22f6), true + return {'\u22f6', 0}, 1, true case "notni": // DOES NOT CONTAIN AS MEMBER - return rune(0x220c), true + return {'\u220c', 0}, 1, true case "notniva": // DOES NOT CONTAIN AS MEMBER - return rune(0x220c), true + return {'\u220c', 0}, 1, true case "notnivb": // SMALL CONTAINS WITH OVERBAR - return rune(0x22fe), true + return {'\u22fe', 0}, 1, true case "notnivc": // CONTAINS WITH OVERBAR - return rune(0x22fd), true + return {'\u22fd', 0}, 1, true case "npar": // NOT PARALLEL TO - return rune(0x2226), true + return {'\u2226', 0}, 1, true case "nparallel": // NOT PARALLEL TO - return rune(0x2226), true + return {'\u2226', 0}, 1, true case "nparsl": // DOUBLE SOLIDUS OPERATOR with reverse slash - return rune(0x2afd), true + return {'\u2afd', '\u2afd'}, 2, true case "npart": // PARTIAL DIFFERENTIAL with slash - return rune(0x2202), true + return {'\u2202', '\u2202'}, 2, true case "npolint": // LINE INTEGRATION NOT INCLUDING THE POLE - return rune(0x2a14), true + return {'\u2a14', 0}, 1, true case "npr": // DOES NOT PRECEDE - return rune(0x2280), true + return {'\u2280', 0}, 1, true case "nprcue": // DOES NOT PRECEDE OR EQUAL - return rune(0x22e0), true + return {'\u22e0', 0}, 1, true case "npre": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash - return rune(0x2aaf), true + return {'\u2aaf', '\u2aaf'}, 2, true case "nprec": // DOES NOT PRECEDE - return rune(0x2280), true + return {'\u2280', 0}, 1, true case "npreceq": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash - return rune(0x2aaf), true + return {'\u2aaf', '\u2aaf'}, 2, true case "nprsim": // PRECEDES OR EQUIVALENT TO with slash - return rune(0x227e), true + return {'\u227e', '\u227e'}, 2, true case "nrArr": // RIGHTWARDS DOUBLE ARROW WITH STROKE - return rune(0x21cf), true + return {'\u21cf', 0}, 1, true case "nrarr": // RIGHTWARDS ARROW WITH STROKE - return rune(0x219b), true + return {'\u219b', 0}, 1, true case "nrarrc": // WAVE ARROW POINTING DIRECTLY RIGHT with slash - return rune(0x2933), true + return {'\u2933', '\u2933'}, 2, true case "nrarrw": // RIGHTWARDS WAVE ARROW with slash - return rune(0x219d), true + return {'\u219d', '\u219d'}, 2, true case "nrightarrow": // RIGHTWARDS ARROW WITH STROKE - return rune(0x219b), true + return {'\u219b', 0}, 1, true case "nrtri": // DOES NOT CONTAIN AS NORMAL SUBGROUP - return rune(0x22eb), true + return {'\u22eb', 0}, 1, true case "nrtrie": // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL - return rune(0x22ed), true + return {'\u22ed', 0}, 1, true case "nsGt": // DOUBLE NESTED GREATER-THAN with slash - return rune(0x2aa2), true + return {'\u2aa2', '\u2aa2'}, 2, true case "nsLt": // DOUBLE NESTED LESS-THAN with slash - return rune(0x2aa1), true + return {'\u2aa1', '\u2aa1'}, 2, true case "nsc": // DOES NOT SUCCEED - return rune(0x2281), true + return {'\u2281', 0}, 1, true case "nsccue": // DOES NOT SUCCEED OR EQUAL - return rune(0x22e1), true + return {'\u22e1', 0}, 1, true case "nsce": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash - return rune(0x2ab0), true + return {'\u2ab0', '\u2ab0'}, 2, true case "nscr": // MATHEMATICAL SCRIPT SMALL N - return rune(0x01d4c3), true + return {'\U0001d4c3', 0}, 1, true case "nscsim": // SUCCEEDS OR EQUIVALENT TO with slash - return rune(0x227f), true + return {'\u227f', '\u227f'}, 2, true case "nshortmid": // DOES NOT DIVIDE - return rune(0x2224), true + return {'\u2224', 0}, 1, true case "nshortparallel": // NOT PARALLEL TO - return rune(0x2226), true + return {'\u2226', 0}, 1, true case "nsim": // NOT TILDE - return rune(0x2241), true + return {'\u2241', 0}, 1, true case "nsime": // NOT ASYMPTOTICALLY EQUAL TO - return rune(0x2244), true + return {'\u2244', 0}, 1, true case "nsimeq": // NOT ASYMPTOTICALLY EQUAL TO - return rune(0x2244), true + return {'\u2244', 0}, 1, true case "nsmid": // DOES NOT DIVIDE - return rune(0x2224), true + return {'\u2224', 0}, 1, true case "nspar": // NOT PARALLEL TO - return rune(0x2226), true + return {'\u2226', 0}, 1, true case "nsqsub": // SQUARE IMAGE OF with slash - return rune(0x228f), true + return {'\u228f', '\u228f'}, 2, true case "nsqsube": // NOT SQUARE IMAGE OF OR EQUAL TO - return rune(0x22e2), true + return {'\u22e2', 0}, 1, true case "nsqsup": // SQUARE ORIGINAL OF with slash - return rune(0x2290), true + return {'\u2290', '\u2290'}, 2, true case "nsqsupe": // NOT SQUARE ORIGINAL OF OR EQUAL TO - return rune(0x22e3), true + return {'\u22e3', 0}, 1, true case "nsub": // NOT A SUBSET OF - return rune(0x2284), true + return {'\u2284', 0}, 1, true case "nsubE": // SUBSET OF ABOVE EQUALS SIGN with slash - return rune(0x2ac5), true + return {'\u2ac5', '\u2ac5'}, 2, true case "nsube": // NEITHER A SUBSET OF NOR EQUAL TO - return rune(0x2288), true + return {'\u2288', 0}, 1, true case "nsubset": // SUBSET OF with vertical line - return rune(0x2282), true + return {'\u2282', '\u2282'}, 2, true case "nsubseteq": // NEITHER A SUBSET OF NOR EQUAL TO - return rune(0x2288), true + return {'\u2288', 0}, 1, true case "nsubseteqq": // SUBSET OF ABOVE EQUALS SIGN with slash - return rune(0x2ac5), true + return {'\u2ac5', '\u2ac5'}, 2, true case "nsucc": // DOES NOT SUCCEED - return rune(0x2281), true + return {'\u2281', 0}, 1, true case "nsucceq": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash - return rune(0x2ab0), true + return {'\u2ab0', '\u2ab0'}, 2, true case "nsup": // NOT A SUPERSET OF - return rune(0x2285), true + return {'\u2285', 0}, 1, true case "nsupE": // SUPERSET OF ABOVE EQUALS SIGN with slash - return rune(0x2ac6), true + return {'\u2ac6', '\u2ac6'}, 2, true case "nsupe": // NEITHER A SUPERSET OF NOR EQUAL TO - return rune(0x2289), true + return {'\u2289', 0}, 1, true case "nsupset": // SUPERSET OF with vertical line - return rune(0x2283), true + return {'\u2283', '\u2283'}, 2, true case "nsupseteq": // NEITHER A SUPERSET OF NOR EQUAL TO - return rune(0x2289), true + return {'\u2289', 0}, 1, true case "nsupseteqq": // SUPERSET OF ABOVE EQUALS SIGN with slash - return rune(0x2ac6), true + return {'\u2ac6', '\u2ac6'}, 2, true case "ntgl": // NEITHER GREATER-THAN NOR LESS-THAN - return rune(0x2279), true + return {'\u2279', 0}, 1, true case "ntilde": // LATIN SMALL LETTER N WITH TILDE - return rune(0xf1), true + return {'ñ', 0}, 1, true case "ntlg": // NEITHER LESS-THAN NOR GREATER-THAN - return rune(0x2278), true + return {'\u2278', 0}, 1, true case "ntriangleleft": // NOT NORMAL SUBGROUP OF - return rune(0x22ea), true + return {'\u22ea', 0}, 1, true case "ntrianglelefteq": // NOT NORMAL SUBGROUP OF OR EQUAL TO - return rune(0x22ec), true + return {'\u22ec', 0}, 1, true case "ntriangleright": // DOES NOT CONTAIN AS NORMAL SUBGROUP - return rune(0x22eb), true + return {'\u22eb', 0}, 1, true case "ntrianglerighteq": // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL - return rune(0x22ed), true + return {'\u22ed', 0}, 1, true case "nu": // GREEK SMALL LETTER NU - return rune(0x03bd), true + return {'\u03bd', 0}, 1, true case "num": // NUMBER SIGN - return rune(0x23), true + return {'#', 0}, 1, true case "numero": // NUMERO SIGN - return rune(0x2116), true + return {'\u2116', 0}, 1, true case "numsp": // FIGURE SPACE - return rune(0x2007), true + return {'\u2007', 0}, 1, true case "nvDash": // NOT TRUE - return rune(0x22ad), true + return {'\u22ad', 0}, 1, true case "nvHarr": // LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE - return rune(0x2904), true + return {'\u2904', 0}, 1, true case "nvap": // EQUIVALENT TO with vertical line - return rune(0x224d), true + return {'\u224d', '\u224d'}, 2, true case "nvbrtri": // VERTICAL BAR BESIDE RIGHT TRIANGLE with slash - return rune(0x29d0), true + return {'\u29d0', '\u29d0'}, 2, true case "nvdash": // DOES NOT PROVE - return rune(0x22ac), true + return {'\u22ac', 0}, 1, true case "nvge": // GREATER-THAN OR EQUAL TO with vertical line - return rune(0x2265), true + return {'\u2265', '\u2265'}, 2, true case "nvgt": // GREATER-THAN SIGN with vertical line - return rune(0x3e), true + return {'>', '>'}, 2, true case "nvinfin": // INFINITY NEGATED WITH VERTICAL BAR - return rune(0x29de), true + return {'\u29de', 0}, 1, true case "nvlArr": // LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE - return rune(0x2902), true + return {'\u2902', 0}, 1, true case "nvle": // LESS-THAN OR EQUAL TO with vertical line - return rune(0x2264), true + return {'\u2264', '\u2264'}, 2, true case "nvlt": // LESS-THAN SIGN with vertical line - return rune(0x3c), true + return {'<', '<'}, 2, true case "nvltrie": // NORMAL SUBGROUP OF OR EQUAL TO with vertical line - return rune(0x22b4), true + return {'\u22b4', '\u22b4'}, 2, true case "nvrArr": // RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE - return rune(0x2903), true + return {'\u2903', 0}, 1, true case "nvrtrie": // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO with vertical line - return rune(0x22b5), true + return {'\u22b5', '\u22b5'}, 2, true case "nvsim": // TILDE OPERATOR with vertical line - return rune(0x223c), true + return {'\u223c', '\u223c'}, 2, true case "nwArr": // NORTH WEST DOUBLE ARROW - return rune(0x21d6), true + return {'\u21d6', 0}, 1, true case "nwarhk": // NORTH WEST ARROW WITH HOOK - return rune(0x2923), true + return {'\u2923', 0}, 1, true case "nwarr": // NORTH WEST ARROW - return rune(0x2196), true + return {'\u2196', 0}, 1, true case "nwarrow": // NORTH WEST ARROW - return rune(0x2196), true + return {'\u2196', 0}, 1, true case "nwnear": // NORTH WEST ARROW AND NORTH EAST ARROW - return rune(0x2927), true + return {'\u2927', 0}, 1, true case "nwonearr": // NORTH WEST ARROW CROSSING NORTH EAST ARROW - return rune(0x2932), true + return {'\u2932', 0}, 1, true case "nwsesarr": // NORTH WEST AND SOUTH EAST ARROW - return rune(0x2921), true + return {'\u2921', 0}, 1, true } case 'o': switch name { case "oS": // CIRCLED LATIN CAPITAL LETTER S - return rune(0x24c8), true + return {'\u24c8', 0}, 1, true case "oacgr": // GREEK SMALL LETTER OMICRON WITH TONOS - return rune(0x03cc), true + return {'\u03cc', 0}, 1, true case "oacute": // LATIN SMALL LETTER O WITH ACUTE - return rune(0xf3), true + return {'ó', 0}, 1, true case "oast": // CIRCLED ASTERISK OPERATOR - return rune(0x229b), true + return {'\u229b', 0}, 1, true case "obsol": // CIRCLED REVERSE SOLIDUS - return rune(0x29b8), true + return {'\u29b8', 0}, 1, true case "ocir": // CIRCLED RING OPERATOR - return rune(0x229a), true + return {'\u229a', 0}, 1, true case "ocirc": // LATIN SMALL LETTER O WITH CIRCUMFLEX - return rune(0xf4), true + return {'ô', 0}, 1, true case "ocy": // CYRILLIC SMALL LETTER O - return rune(0x043e), true + return {'\u043e', 0}, 1, true case "odash": // CIRCLED DASH - return rune(0x229d), true + return {'\u229d', 0}, 1, true case "odblac": // LATIN SMALL LETTER O WITH DOUBLE ACUTE - return rune(0x0151), true + return {'\u0151', 0}, 1, true case "odiv": // CIRCLED DIVISION SIGN - return rune(0x2a38), true + return {'\u2a38', 0}, 1, true case "odot": // CIRCLED DOT OPERATOR - return rune(0x2299), true + return {'\u2299', 0}, 1, true case "odsold": // CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN - return rune(0x29bc), true + return {'\u29bc', 0}, 1, true case "oelig": // LATIN SMALL LIGATURE OE - return rune(0x0153), true + return {'\u0153', 0}, 1, true case "ofcir": // CIRCLED BULLET - return rune(0x29bf), true + return {'\u29bf', 0}, 1, true case "ofr": // MATHEMATICAL FRAKTUR SMALL O - return rune(0x01d52c), true + return {'\U0001d52c', 0}, 1, true case "ogon": // OGONEK - return rune(0x02db), true + return {'\u02db', 0}, 1, true case "ogr": // GREEK SMALL LETTER OMICRON - return rune(0x03bf), true + return {'\u03bf', 0}, 1, true case "ograve": // LATIN SMALL LETTER O WITH GRAVE - return rune(0xf2), true + return {'ò', 0}, 1, true case "ogt": // CIRCLED GREATER-THAN - return rune(0x29c1), true + return {'\u29c1', 0}, 1, true case "ohacgr": // GREEK SMALL LETTER OMEGA WITH TONOS - return rune(0x03ce), true + return {'\u03ce', 0}, 1, true case "ohbar": // CIRCLE WITH HORIZONTAL BAR - return rune(0x29b5), true + return {'\u29b5', 0}, 1, true case "ohgr": // GREEK SMALL LETTER OMEGA - return rune(0x03c9), true + return {'\u03c9', 0}, 1, true case "ohm": // GREEK CAPITAL LETTER OMEGA - return rune(0x03a9), true + return {'\u03a9', 0}, 1, true case "oint": // CONTOUR INTEGRAL - return rune(0x222e), true + return {'\u222e', 0}, 1, true case "olarr": // ANTICLOCKWISE OPEN CIRCLE ARROW - return rune(0x21ba), true + return {'\u21ba', 0}, 1, true case "olcir": // CIRCLED WHITE BULLET - return rune(0x29be), true + return {'\u29be', 0}, 1, true case "olcross": // CIRCLE WITH SUPERIMPOSED X - return rune(0x29bb), true + return {'\u29bb', 0}, 1, true case "oline": // OVERLINE - return rune(0x203e), true + return {'\u203e', 0}, 1, true case "olt": // CIRCLED LESS-THAN - return rune(0x29c0), true + return {'\u29c0', 0}, 1, true case "omacr": // LATIN SMALL LETTER O WITH MACRON - return rune(0x014d), true + return {'\u014d', 0}, 1, true case "omega": // GREEK SMALL LETTER OMEGA - return rune(0x03c9), true + return {'\u03c9', 0}, 1, true case "omicron": // GREEK SMALL LETTER OMICRON - return rune(0x03bf), true + return {'\u03bf', 0}, 1, true case "omid": // CIRCLED VERTICAL BAR - return rune(0x29b6), true + return {'\u29b6', 0}, 1, true case "ominus": // CIRCLED MINUS - return rune(0x2296), true + return {'\u2296', 0}, 1, true case "oopf": // MATHEMATICAL DOUBLE-STRUCK SMALL O - return rune(0x01d560), true + return {'\U0001d560', 0}, 1, true case "opar": // CIRCLED PARALLEL - return rune(0x29b7), true + return {'\u29b7', 0}, 1, true case "operp": // CIRCLED PERPENDICULAR - return rune(0x29b9), true + return {'\u29b9', 0}, 1, true case "opfgamma": // DOUBLE-STRUCK SMALL GAMMA - return rune(0x213d), true + return {'\u213d', 0}, 1, true case "opfpi": // DOUBLE-STRUCK CAPITAL PI - return rune(0x213f), true + return {'\u213f', 0}, 1, true case "opfsum": // DOUBLE-STRUCK N-ARY SUMMATION - return rune(0x2140), true + return {'\u2140', 0}, 1, true case "oplus": // CIRCLED PLUS - return rune(0x2295), true + return {'\u2295', 0}, 1, true case "or": // LOGICAL OR - return rune(0x2228), true + return {'\u2228', 0}, 1, true case "orarr": // CLOCKWISE OPEN CIRCLE ARROW - return rune(0x21bb), true + return {'\u21bb', 0}, 1, true case "ord": // LOGICAL OR WITH HORIZONTAL DASH - return rune(0x2a5d), true + return {'\u2a5d', 0}, 1, true case "order": // SCRIPT SMALL O - return rune(0x2134), true + return {'\u2134', 0}, 1, true case "orderof": // SCRIPT SMALL O - return rune(0x2134), true + return {'\u2134', 0}, 1, true case "ordf": // FEMININE ORDINAL INDICATOR - return rune(0xaa), true + return {'ª', 0}, 1, true case "ordm": // MASCULINE ORDINAL INDICATOR - return rune(0xba), true + return {'º', 0}, 1, true case "origof": // ORIGINAL OF - return rune(0x22b6), true + return {'\u22b6', 0}, 1, true case "oror": // TWO INTERSECTING LOGICAL OR - return rune(0x2a56), true + return {'\u2a56', 0}, 1, true case "orslope": // SLOPING LARGE OR - return rune(0x2a57), true + return {'\u2a57', 0}, 1, true case "orv": // LOGICAL OR WITH MIDDLE STEM - return rune(0x2a5b), true + return {'\u2a5b', 0}, 1, true case "oscr": // SCRIPT SMALL O - return rune(0x2134), true + return {'\u2134', 0}, 1, true case "oslash": // LATIN SMALL LETTER O WITH STROKE - return rune(0xf8), true + return {'ø', 0}, 1, true case "osol": // CIRCLED DIVISION SLASH - return rune(0x2298), true + return {'\u2298', 0}, 1, true case "otilde": // LATIN SMALL LETTER O WITH TILDE - return rune(0xf5), true + return {'õ', 0}, 1, true case "otimes": // CIRCLED TIMES - return rune(0x2297), true + return {'\u2297', 0}, 1, true case "otimesas": // CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT - return rune(0x2a36), true + return {'\u2a36', 0}, 1, true case "ouml": // LATIN SMALL LETTER O WITH DIAERESIS - return rune(0xf6), true + return {'ö', 0}, 1, true case "ovbar": // APL FUNCTIONAL SYMBOL CIRCLE STILE - return rune(0x233d), true + return {'\u233d', 0}, 1, true case "ovrbrk": // TOP SQUARE BRACKET - return rune(0x23b4), true + return {'\u23b4', 0}, 1, true case "ovrcub": // TOP CURLY BRACKET - return rune(0x23de), true + return {'\u23de', 0}, 1, true case "ovrpar": // TOP PARENTHESIS - return rune(0x23dc), true + return {'\u23dc', 0}, 1, true case "oxuarr": // UP ARROW THROUGH CIRCLE - return rune(0x29bd), true + return {'\u29bd', 0}, 1, true } case 'p': switch name { case "par": // PARALLEL TO - return rune(0x2225), true + return {'\u2225', 0}, 1, true case "para": // PILCROW SIGN - return rune(0xb6), true + return {'¶', 0}, 1, true case "parallel": // PARALLEL TO - return rune(0x2225), true + return {'\u2225', 0}, 1, true case "parsim": // PARALLEL WITH TILDE OPERATOR - return rune(0x2af3), true + return {'\u2af3', 0}, 1, true case "parsl": // DOUBLE SOLIDUS OPERATOR - return rune(0x2afd), true + return {'\u2afd', 0}, 1, true case "part": // PARTIAL DIFFERENTIAL - return rune(0x2202), true + return {'\u2202', 0}, 1, true case "pcy": // CYRILLIC SMALL LETTER PE - return rune(0x043f), true + return {'\u043f', 0}, 1, true case "percnt": // PERCENT SIGN - return rune(0x25), true + return {'%', 0}, 1, true case "period": // FULL STOP - return rune(0x2e), true + return {'.', 0}, 1, true case "permil": // PER MILLE SIGN - return rune(0x2030), true + return {'\u2030', 0}, 1, true case "perp": // UP TACK - return rune(0x22a5), true + return {'\u22a5', 0}, 1, true case "pertenk": // PER TEN THOUSAND SIGN - return rune(0x2031), true + return {'\u2031', 0}, 1, true case "pfr": // MATHEMATICAL FRAKTUR SMALL P - return rune(0x01d52d), true + return {'\U0001d52d', 0}, 1, true case "pgr": // GREEK SMALL LETTER PI - return rune(0x03c0), true + return {'\u03c0', 0}, 1, true case "phgr": // GREEK SMALL LETTER PHI - return rune(0x03c6), true + return {'\u03c6', 0}, 1, true case "phi": // GREEK SMALL LETTER PHI - return rune(0x03c6), true + return {'\u03c6', 0}, 1, true case "phis": // GREEK PHI SYMBOL - return rune(0x03d5), true + return {'\u03d5', 0}, 1, true case "phiv": // GREEK PHI SYMBOL - return rune(0x03d5), true + return {'\u03d5', 0}, 1, true case "phmmat": // SCRIPT CAPITAL M - return rune(0x2133), true + return {'\u2133', 0}, 1, true case "phone": // BLACK TELEPHONE - return rune(0x260e), true + return {'\u260e', 0}, 1, true case "pi": // GREEK SMALL LETTER PI - return rune(0x03c0), true + return {'\u03c0', 0}, 1, true case "pitchfork": // PITCHFORK - return rune(0x22d4), true + return {'\u22d4', 0}, 1, true case "piv": // GREEK PI SYMBOL - return rune(0x03d6), true + return {'\u03d6', 0}, 1, true case "planck": // PLANCK CONSTANT OVER TWO PI - return rune(0x210f), true + return {'\u210f', 0}, 1, true case "planckh": // PLANCK CONSTANT - return rune(0x210e), true + return {'\u210e', 0}, 1, true case "plankv": // PLANCK CONSTANT OVER TWO PI - return rune(0x210f), true + return {'\u210f', 0}, 1, true case "plus": // PLUS SIGN - return rune(0x2b), true + return {'+', 0}, 1, true case "plusacir": // PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE - return rune(0x2a23), true + return {'\u2a23', 0}, 1, true case "plusb": // SQUARED PLUS - return rune(0x229e), true + return {'\u229e', 0}, 1, true case "pluscir": // PLUS SIGN WITH SMALL CIRCLE ABOVE - return rune(0x2a22), true + return {'\u2a22', 0}, 1, true case "plusdo": // DOT PLUS - return rune(0x2214), true + return {'\u2214', 0}, 1, true case "plusdu": // PLUS SIGN WITH DOT BELOW - return rune(0x2a25), true + return {'\u2a25', 0}, 1, true case "pluse": // PLUS SIGN ABOVE EQUALS SIGN - return rune(0x2a72), true + return {'\u2a72', 0}, 1, true case "plusmn": // PLUS-MINUS SIGN - return rune(0xb1), true + return {'±', 0}, 1, true case "plussim": // PLUS SIGN WITH TILDE BELOW - return rune(0x2a26), true + return {'\u2a26', 0}, 1, true case "plustrif": // PLUS SIGN WITH BLACK TRIANGLE - return rune(0x2a28), true + return {'\u2a28', 0}, 1, true case "plustwo": // PLUS SIGN WITH SUBSCRIPT TWO - return rune(0x2a27), true + return {'\u2a27', 0}, 1, true case "pm": // PLUS-MINUS SIGN - return rune(0xb1), true + return {'±', 0}, 1, true case "pointint": // INTEGRAL AROUND A POINT OPERATOR - return rune(0x2a15), true + return {'\u2a15', 0}, 1, true case "popf": // MATHEMATICAL DOUBLE-STRUCK SMALL P - return rune(0x01d561), true + return {'\U0001d561', 0}, 1, true case "pound": // POUND SIGN - return rune(0xa3), true + return {'£', 0}, 1, true case "pr": // PRECEDES - return rune(0x227a), true + return {'\u227a', 0}, 1, true case "prE": // PRECEDES ABOVE EQUALS SIGN - return rune(0x2ab3), true + return {'\u2ab3', 0}, 1, true case "prap": // PRECEDES ABOVE ALMOST EQUAL TO - return rune(0x2ab7), true + return {'\u2ab7', 0}, 1, true case "prcue": // PRECEDES OR EQUAL TO - return rune(0x227c), true + return {'\u227c', 0}, 1, true case "pre": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN - return rune(0x2aaf), true + return {'\u2aaf', 0}, 1, true case "prec": // PRECEDES - return rune(0x227a), true + return {'\u227a', 0}, 1, true case "precapprox": // PRECEDES ABOVE ALMOST EQUAL TO - return rune(0x2ab7), true + return {'\u2ab7', 0}, 1, true case "preccurlyeq": // PRECEDES OR EQUAL TO - return rune(0x227c), true + return {'\u227c', 0}, 1, true case "preceq": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN - return rune(0x2aaf), true + return {'\u2aaf', 0}, 1, true case "precnapprox": // PRECEDES ABOVE NOT ALMOST EQUAL TO - return rune(0x2ab9), true + return {'\u2ab9', 0}, 1, true case "precneqq": // PRECEDES ABOVE NOT EQUAL TO - return rune(0x2ab5), true + return {'\u2ab5', 0}, 1, true case "precnsim": // PRECEDES BUT NOT EQUIVALENT TO - return rune(0x22e8), true + return {'\u22e8', 0}, 1, true case "precsim": // PRECEDES OR EQUIVALENT TO - return rune(0x227e), true + return {'\u227e', 0}, 1, true case "prime": // PRIME - return rune(0x2032), true + return {'\u2032', 0}, 1, true case "primes": // DOUBLE-STRUCK CAPITAL P - return rune(0x2119), true + return {'\u2119', 0}, 1, true case "prnE": // PRECEDES ABOVE NOT EQUAL TO - return rune(0x2ab5), true + return {'\u2ab5', 0}, 1, true case "prnap": // PRECEDES ABOVE NOT ALMOST EQUAL TO - return rune(0x2ab9), true + return {'\u2ab9', 0}, 1, true case "prnsim": // PRECEDES BUT NOT EQUIVALENT TO - return rune(0x22e8), true + return {'\u22e8', 0}, 1, true case "prod": // N-ARY PRODUCT - return rune(0x220f), true + return {'\u220f', 0}, 1, true case "profalar": // ALL AROUND-PROFILE - return rune(0x232e), true + return {'\u232e', 0}, 1, true case "profline": // ARC - return rune(0x2312), true + return {'\u2312', 0}, 1, true case "profsurf": // SEGMENT - return rune(0x2313), true + return {'\u2313', 0}, 1, true case "prop": // PROPORTIONAL TO - return rune(0x221d), true + return {'\u221d', 0}, 1, true case "propto": // PROPORTIONAL TO - return rune(0x221d), true + return {'\u221d', 0}, 1, true case "prsim": // PRECEDES OR EQUIVALENT TO - return rune(0x227e), true + return {'\u227e', 0}, 1, true case "prurel": // PRECEDES UNDER RELATION - return rune(0x22b0), true + return {'\u22b0', 0}, 1, true case "pscr": // MATHEMATICAL SCRIPT SMALL P - return rune(0x01d4c5), true + return {'\U0001d4c5', 0}, 1, true case "psgr": // GREEK SMALL LETTER PSI - return rune(0x03c8), true + return {'\u03c8', 0}, 1, true case "psi": // GREEK SMALL LETTER PSI - return rune(0x03c8), true + return {'\u03c8', 0}, 1, true case "puncsp": // PUNCTUATION SPACE - return rune(0x2008), true + return {'\u2008', 0}, 1, true } case 'q': switch name { case "qfr": // MATHEMATICAL FRAKTUR SMALL Q - return rune(0x01d52e), true + return {'\U0001d52e', 0}, 1, true case "qint": // QUADRUPLE INTEGRAL OPERATOR - return rune(0x2a0c), true + return {'\u2a0c', 0}, 1, true case "qopf": // MATHEMATICAL DOUBLE-STRUCK SMALL Q - return rune(0x01d562), true + return {'\U0001d562', 0}, 1, true case "qprime": // QUADRUPLE PRIME - return rune(0x2057), true + return {'\u2057', 0}, 1, true case "qscr": // MATHEMATICAL SCRIPT SMALL Q - return rune(0x01d4c6), true + return {'\U0001d4c6', 0}, 1, true case "quaternions": // DOUBLE-STRUCK CAPITAL H - return rune(0x210d), true + return {'\u210d', 0}, 1, true case "quatint": // QUATERNION INTEGRAL OPERATOR - return rune(0x2a16), true + return {'\u2a16', 0}, 1, true case "quest": // QUESTION MARK - return rune(0x3f), true + return {'?', 0}, 1, true case "questeq": // QUESTIONED EQUAL TO - return rune(0x225f), true + return {'\u225f', 0}, 1, true case "quot": // QUOTATION MARK - return rune(0x22), true + return {'"', 0}, 1, true } case 'r': switch name { case "rAarr": // RIGHTWARDS TRIPLE ARROW - return rune(0x21db), true + return {'\u21db', 0}, 1, true case "rArr": // RIGHTWARDS DOUBLE ARROW - return rune(0x21d2), true + return {'\u21d2', 0}, 1, true case "rAtail": // RIGHTWARDS DOUBLE ARROW-TAIL - return rune(0x291c), true + return {'\u291c', 0}, 1, true case "rBarr": // RIGHTWARDS TRIPLE DASH ARROW - return rune(0x290f), true + return {'\u290f', 0}, 1, true case "rHar": // RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN - return rune(0x2964), true + return {'\u2964', 0}, 1, true case "race": // REVERSED TILDE with underline - return rune(0x223d), true + return {'\u223d', '\u223d'}, 2, true case "racute": // LATIN SMALL LETTER R WITH ACUTE - return rune(0x0155), true + return {'\u0155', 0}, 1, true case "radic": // SQUARE ROOT - return rune(0x221a), true + return {'\u221a', 0}, 1, true case "raemptyv": // EMPTY SET WITH RIGHT ARROW ABOVE - return rune(0x29b3), true + return {'\u29b3', 0}, 1, true case "rang": // MATHEMATICAL RIGHT ANGLE BRACKET - return rune(0x27e9), true + return {'\u27e9', 0}, 1, true case "rangd": // RIGHT ANGLE BRACKET WITH DOT - return rune(0x2992), true + return {'\u2992', 0}, 1, true case "range": // REVERSED ANGLE WITH UNDERBAR - return rune(0x29a5), true + return {'\u29a5', 0}, 1, true case "rangle": // MATHEMATICAL RIGHT ANGLE BRACKET - return rune(0x27e9), true + return {'\u27e9', 0}, 1, true case "raquo": // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK - return rune(0xbb), true + return {'»', 0}, 1, true case "rarr": // RIGHTWARDS ARROW - return rune(0x2192), true + return {'\u2192', 0}, 1, true case "rarr2": // RIGHTWARDS PAIRED ARROWS - return rune(0x21c9), true + return {'\u21c9', 0}, 1, true case "rarr3": // THREE RIGHTWARDS ARROWS - return rune(0x21f6), true + return {'\u21f6', 0}, 1, true case "rarrap": // RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO - return rune(0x2975), true + return {'\u2975', 0}, 1, true case "rarrb": // RIGHTWARDS ARROW TO BAR - return rune(0x21e5), true + return {'\u21e5', 0}, 1, true case "rarrbfs": // RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND - return rune(0x2920), true + return {'\u2920', 0}, 1, true case "rarrc": // WAVE ARROW POINTING DIRECTLY RIGHT - return rune(0x2933), true + return {'\u2933', 0}, 1, true case "rarrfs": // RIGHTWARDS ARROW TO BLACK DIAMOND - return rune(0x291e), true + return {'\u291e', 0}, 1, true case "rarrhk": // RIGHTWARDS ARROW WITH HOOK - return rune(0x21aa), true + return {'\u21aa', 0}, 1, true case "rarrlp": // RIGHTWARDS ARROW WITH LOOP - return rune(0x21ac), true + return {'\u21ac', 0}, 1, true case "rarrpl": // RIGHTWARDS ARROW WITH PLUS BELOW - return rune(0x2945), true + return {'\u2945', 0}, 1, true case "rarrsim": // RIGHTWARDS ARROW ABOVE TILDE OPERATOR - return rune(0x2974), true + return {'\u2974', 0}, 1, true case "rarrtl": // RIGHTWARDS ARROW WITH TAIL - return rune(0x21a3), true + return {'\u21a3', 0}, 1, true case "rarrw": // RIGHTWARDS WAVE ARROW - return rune(0x219d), true + return {'\u219d', 0}, 1, true case "rarrx": // RIGHTWARDS ARROW THROUGH X - return rune(0x2947), true + return {'\u2947', 0}, 1, true case "ratail": // RIGHTWARDS ARROW-TAIL - return rune(0x291a), true + return {'\u291a', 0}, 1, true case "ratio": // RATIO - return rune(0x2236), true + return {'\u2236', 0}, 1, true case "rationals": // DOUBLE-STRUCK CAPITAL Q - return rune(0x211a), true + return {'\u211a', 0}, 1, true case "rbarr": // RIGHTWARDS DOUBLE DASH ARROW - return rune(0x290d), true + return {'\u290d', 0}, 1, true case "rbbrk": // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT - return rune(0x2773), true + return {'\u2773', 0}, 1, true case "rbrace": // RIGHT CURLY BRACKET - return rune(0x7d), true + return {'}', 0}, 1, true case "rbrack": // RIGHT SQUARE BRACKET - return rune(0x5d), true + return {']', 0}, 1, true case "rbrke": // RIGHT SQUARE BRACKET WITH UNDERBAR - return rune(0x298c), true + return {'\u298c', 0}, 1, true case "rbrksld": // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER - return rune(0x298e), true + return {'\u298e', 0}, 1, true case "rbrkslu": // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER - return rune(0x2990), true + return {'\u2990', 0}, 1, true case "rcaron": // LATIN SMALL LETTER R WITH CARON - return rune(0x0159), true + return {'\u0159', 0}, 1, true case "rcedil": // LATIN SMALL LETTER R WITH CEDILLA - return rune(0x0157), true + return {'\u0157', 0}, 1, true case "rceil": // RIGHT CEILING - return rune(0x2309), true + return {'\u2309', 0}, 1, true case "rcub": // RIGHT CURLY BRACKET - return rune(0x7d), true + return {'}', 0}, 1, true case "rcy": // CYRILLIC SMALL LETTER ER - return rune(0x0440), true + return {'\u0440', 0}, 1, true case "rdca": // ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS - return rune(0x2937), true + return {'\u2937', 0}, 1, true case "rdharb": // RIGHTWARDS HARPOON WITH BARB DOWN TO BAR - return rune(0x2957), true + return {'\u2957', 0}, 1, true case "rdiag": // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT - return rune(0x2571), true + return {'\u2571', 0}, 1, true case "rdiofdi": // RISING DIAGONAL CROSSING FALLING DIAGONAL - return rune(0x292b), true + return {'\u292b', 0}, 1, true case "rdldhar": // RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN - return rune(0x2969), true + return {'\u2969', 0}, 1, true case "rdosearr": // RISING DIAGONAL CROSSING SOUTH EAST ARROW - return rune(0x2930), true + return {'\u2930', 0}, 1, true case "rdquo": // RIGHT DOUBLE QUOTATION MARK - return rune(0x201d), true + return {'\u201d', 0}, 1, true case "rdquor": // RIGHT DOUBLE QUOTATION MARK - return rune(0x201d), true + return {'\u201d', 0}, 1, true case "rdsh": // DOWNWARDS ARROW WITH TIP RIGHTWARDS - return rune(0x21b3), true + return {'\u21b3', 0}, 1, true case "real": // BLACK-LETTER CAPITAL R - return rune(0x211c), true + return {'\u211c', 0}, 1, true case "realine": // SCRIPT CAPITAL R - return rune(0x211b), true + return {'\u211b', 0}, 1, true case "realpart": // BLACK-LETTER CAPITAL R - return rune(0x211c), true + return {'\u211c', 0}, 1, true case "reals": // DOUBLE-STRUCK CAPITAL R - return rune(0x211d), true + return {'\u211d', 0}, 1, true case "rect": // WHITE RECTANGLE - return rune(0x25ad), true + return {'\u25ad', 0}, 1, true case "reg": // REGISTERED SIGN - return rune(0xae), true + return {'®', 0}, 1, true case "rfbowtie": // BOWTIE WITH RIGHT HALF BLACK - return rune(0x29d2), true + return {'\u29d2', 0}, 1, true case "rfisht": // RIGHT FISH TAIL - return rune(0x297d), true + return {'\u297d', 0}, 1, true case "rfloor": // RIGHT FLOOR - return rune(0x230b), true + return {'\u230b', 0}, 1, true case "rfr": // MATHEMATICAL FRAKTUR SMALL R - return rune(0x01d52f), true + return {'\U0001d52f', 0}, 1, true case "rftimes": // TIMES WITH RIGHT HALF BLACK - return rune(0x29d5), true + return {'\u29d5', 0}, 1, true case "rgr": // GREEK SMALL LETTER RHO - return rune(0x03c1), true + return {'\u03c1', 0}, 1, true case "rhard": // RIGHTWARDS HARPOON WITH BARB DOWNWARDS - return rune(0x21c1), true + return {'\u21c1', 0}, 1, true case "rharu": // RIGHTWARDS HARPOON WITH BARB UPWARDS - return rune(0x21c0), true + return {'\u21c0', 0}, 1, true case "rharul": // RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH - return rune(0x296c), true + return {'\u296c', 0}, 1, true case "rho": // GREEK SMALL LETTER RHO - return rune(0x03c1), true + return {'\u03c1', 0}, 1, true case "rhov": // GREEK RHO SYMBOL - return rune(0x03f1), true + return {'\u03f1', 0}, 1, true case "rightarrow": // RIGHTWARDS ARROW - return rune(0x2192), true + return {'\u2192', 0}, 1, true case "rightarrowtail": // RIGHTWARDS ARROW WITH TAIL - return rune(0x21a3), true + return {'\u21a3', 0}, 1, true case "rightharpoondown": // RIGHTWARDS HARPOON WITH BARB DOWNWARDS - return rune(0x21c1), true + return {'\u21c1', 0}, 1, true case "rightharpoonup": // RIGHTWARDS HARPOON WITH BARB UPWARDS - return rune(0x21c0), true + return {'\u21c0', 0}, 1, true case "rightleftarrows": // RIGHTWARDS ARROW OVER LEFTWARDS ARROW - return rune(0x21c4), true + return {'\u21c4', 0}, 1, true case "rightleftharpoons": // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON - return rune(0x21cc), true + return {'\u21cc', 0}, 1, true case "rightrightarrows": // RIGHTWARDS PAIRED ARROWS - return rune(0x21c9), true + return {'\u21c9', 0}, 1, true case "rightsquigarrow": // RIGHTWARDS WAVE ARROW - return rune(0x219d), true + return {'\u219d', 0}, 1, true case "rightthreetimes": // RIGHT SEMIDIRECT PRODUCT - return rune(0x22cc), true + return {'\u22cc', 0}, 1, true case "rimply": // RIGHT DOUBLE ARROW WITH ROUNDED HEAD - return rune(0x2970), true + return {'\u2970', 0}, 1, true case "ring": // RING ABOVE - return rune(0x02da), true + return {'\u02da', 0}, 1, true case "risingdotseq": // IMAGE OF OR APPROXIMATELY EQUAL TO - return rune(0x2253), true + return {'\u2253', 0}, 1, true case "rlarr": // RIGHTWARDS ARROW OVER LEFTWARDS ARROW - return rune(0x21c4), true + return {'\u21c4', 0}, 1, true case "rlarr2": // RIGHTWARDS ARROW OVER LEFTWARDS ARROW - return rune(0x21c4), true + return {'\u21c4', 0}, 1, true case "rlhar": // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON - return rune(0x21cc), true + return {'\u21cc', 0}, 1, true case "rlhar2": // RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON - return rune(0x21cc), true + return {'\u21cc', 0}, 1, true case "rlm": // RIGHT-TO-LEFT MARK - return rune(0x200f), true + return {'\u200f', 0}, 1, true case "rmoust": // UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION - return rune(0x23b1), true + return {'\u23b1', 0}, 1, true case "rmoustache": // UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION - return rune(0x23b1), true + return {'\u23b1', 0}, 1, true case "rnmid": // DOES NOT DIVIDE WITH REVERSED NEGATION SLASH - return rune(0x2aee), true + return {'\u2aee', 0}, 1, true case "roang": // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET - return rune(0x27ed), true + return {'\u27ed', 0}, 1, true case "roarr": // RIGHTWARDS OPEN-HEADED ARROW - return rune(0x21fe), true + return {'\u21fe', 0}, 1, true case "robrk": // MATHEMATICAL RIGHT WHITE SQUARE BRACKET - return rune(0x27e7), true + return {'\u27e7', 0}, 1, true case "rocub": // RIGHT WHITE CURLY BRACKET - return rune(0x2984), true + return {'\u2984', 0}, 1, true case "ropar": // RIGHT WHITE PARENTHESIS - return rune(0x2986), true + return {'\u2986', 0}, 1, true case "ropf": // MATHEMATICAL DOUBLE-STRUCK SMALL R - return rune(0x01d563), true + return {'\U0001d563', 0}, 1, true case "roplus": // PLUS SIGN IN RIGHT HALF CIRCLE - return rune(0x2a2e), true + return {'\u2a2e', 0}, 1, true case "rotimes": // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE - return rune(0x2a35), true + return {'\u2a35', 0}, 1, true case "rpar": // RIGHT PARENTHESIS - return rune(0x29), true + return {')', 0}, 1, true case "rpargt": // RIGHT ARC GREATER-THAN BRACKET - return rune(0x2994), true + return {'\u2994', 0}, 1, true case "rppolint": // LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE - return rune(0x2a12), true + return {'\u2a12', 0}, 1, true case "rrarr": // RIGHTWARDS PAIRED ARROWS - return rune(0x21c9), true + return {'\u21c9', 0}, 1, true case "rsaquo": // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK - return rune(0x203a), true + return {'\u203a', 0}, 1, true case "rscr": // MATHEMATICAL SCRIPT SMALL R - return rune(0x01d4c7), true + return {'\U0001d4c7', 0}, 1, true case "rsh": // UPWARDS ARROW WITH TIP RIGHTWARDS - return rune(0x21b1), true + return {'\u21b1', 0}, 1, true case "rsolbar": // REVERSE SOLIDUS WITH HORIZONTAL STROKE - return rune(0x29f7), true + return {'\u29f7', 0}, 1, true case "rsqb": // RIGHT SQUARE BRACKET - return rune(0x5d), true + return {']', 0}, 1, true case "rsquo": // RIGHT SINGLE QUOTATION MARK - return rune(0x2019), true + return {'\u2019', 0}, 1, true case "rsquor": // RIGHT SINGLE QUOTATION MARK - return rune(0x2019), true + return {'\u2019', 0}, 1, true case "rthree": // RIGHT SEMIDIRECT PRODUCT - return rune(0x22cc), true + return {'\u22cc', 0}, 1, true case "rtimes": // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT - return rune(0x22ca), true + return {'\u22ca', 0}, 1, true case "rtri": // WHITE RIGHT-POINTING SMALL TRIANGLE - return rune(0x25b9), true + return {'\u25b9', 0}, 1, true case "rtrie": // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO - return rune(0x22b5), true + return {'\u22b5', 0}, 1, true case "rtrif": // BLACK RIGHT-POINTING SMALL TRIANGLE - return rune(0x25b8), true + return {'\u25b8', 0}, 1, true case "rtriltri": // RIGHT TRIANGLE ABOVE LEFT TRIANGLE - return rune(0x29ce), true + return {'\u29ce', 0}, 1, true case "ruharb": // RIGHTWARDS HARPOON WITH BARB UP TO BAR - return rune(0x2953), true + return {'\u2953', 0}, 1, true case "ruluhar": // RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP - return rune(0x2968), true + return {'\u2968', 0}, 1, true case "rx": // PRESCRIPTION TAKE - return rune(0x211e), true + return {'\u211e', 0}, 1, true } case 's': switch name { case "sacute": // LATIN SMALL LETTER S WITH ACUTE - return rune(0x015b), true + return {'\u015b', 0}, 1, true case "samalg": // N-ARY COPRODUCT - return rune(0x2210), true + return {'\u2210', 0}, 1, true case "sampi": // GREEK LETTER SAMPI - return rune(0x03e0), true + return {'\u03e0', 0}, 1, true case "sbquo": // SINGLE LOW-9 QUOTATION MARK - return rune(0x201a), true + return {'\u201a', 0}, 1, true case "sbsol": // SMALL REVERSE SOLIDUS - return rune(0xfe68), true + return {'\ufe68', 0}, 1, true case "sc": // SUCCEEDS - return rune(0x227b), true + return {'\u227b', 0}, 1, true case "scE": // SUCCEEDS ABOVE EQUALS SIGN - return rune(0x2ab4), true + return {'\u2ab4', 0}, 1, true case "scap": // SUCCEEDS ABOVE ALMOST EQUAL TO - return rune(0x2ab8), true + return {'\u2ab8', 0}, 1, true case "scaron": // LATIN SMALL LETTER S WITH CARON - return rune(0x0161), true + return {'\u0161', 0}, 1, true case "sccue": // SUCCEEDS OR EQUAL TO - return rune(0x227d), true + return {'\u227d', 0}, 1, true case "sce": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN - return rune(0x2ab0), true + return {'\u2ab0', 0}, 1, true case "scedil": // LATIN SMALL LETTER S WITH CEDILLA - return rune(0x015f), true + return {'\u015f', 0}, 1, true case "scirc": // LATIN SMALL LETTER S WITH CIRCUMFLEX - return rune(0x015d), true + return {'\u015d', 0}, 1, true case "scnE": // SUCCEEDS ABOVE NOT EQUAL TO - return rune(0x2ab6), true + return {'\u2ab6', 0}, 1, true case "scnap": // SUCCEEDS ABOVE NOT ALMOST EQUAL TO - return rune(0x2aba), true + return {'\u2aba', 0}, 1, true case "scnsim": // SUCCEEDS BUT NOT EQUIVALENT TO - return rune(0x22e9), true + return {'\u22e9', 0}, 1, true case "scpolint": // LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE - return rune(0x2a13), true + return {'\u2a13', 0}, 1, true case "scsim": // SUCCEEDS OR EQUIVALENT TO - return rune(0x227f), true + return {'\u227f', 0}, 1, true case "scy": // CYRILLIC SMALL LETTER ES - return rune(0x0441), true + return {'\u0441', 0}, 1, true case "sdot": // DOT OPERATOR - return rune(0x22c5), true + return {'\u22c5', 0}, 1, true case "sdotb": // SQUARED DOT OPERATOR - return rune(0x22a1), true + return {'\u22a1', 0}, 1, true case "sdote": // EQUALS SIGN WITH DOT BELOW - return rune(0x2a66), true + return {'\u2a66', 0}, 1, true case "seArr": // SOUTH EAST DOUBLE ARROW - return rune(0x21d8), true + return {'\u21d8', 0}, 1, true case "searhk": // SOUTH EAST ARROW WITH HOOK - return rune(0x2925), true + return {'\u2925', 0}, 1, true case "searr": // SOUTH EAST ARROW - return rune(0x2198), true + return {'\u2198', 0}, 1, true case "searrow": // SOUTH EAST ARROW - return rune(0x2198), true + return {'\u2198', 0}, 1, true case "sect": // SECTION SIGN - return rune(0xa7), true + return {'§', 0}, 1, true case "semi": // SEMICOLON - return rune(0x3b), true + return {';', 0}, 1, true case "seonearr": // SOUTH EAST ARROW CROSSING NORTH EAST ARROW - return rune(0x292d), true + return {'\u292d', 0}, 1, true case "seswar": // SOUTH EAST ARROW AND SOUTH WEST ARROW - return rune(0x2929), true + return {'\u2929', 0}, 1, true case "setminus": // SET MINUS - return rune(0x2216), true + return {'\u2216', 0}, 1, true case "setmn": // SET MINUS - return rune(0x2216), true + return {'\u2216', 0}, 1, true case "sext": // SIX POINTED BLACK STAR - return rune(0x2736), true + return {'\u2736', 0}, 1, true case "sfgr": // GREEK SMALL LETTER FINAL SIGMA - return rune(0x03c2), true + return {'\u03c2', 0}, 1, true case "sfr": // MATHEMATICAL FRAKTUR SMALL S - return rune(0x01d530), true + return {'\U0001d530', 0}, 1, true case "sfrown": // FROWN - return rune(0x2322), true + return {'\u2322', 0}, 1, true case "sgr": // GREEK SMALL LETTER SIGMA - return rune(0x03c3), true + return {'\u03c3', 0}, 1, true case "sharp": // MUSIC SHARP SIGN - return rune(0x266f), true + return {'\u266f', 0}, 1, true case "shchcy": // CYRILLIC SMALL LETTER SHCHA - return rune(0x0449), true + return {'\u0449', 0}, 1, true case "shcy": // CYRILLIC SMALL LETTER SHA - return rune(0x0448), true + return {'\u0448', 0}, 1, true case "shortmid": // DIVIDES - return rune(0x2223), true + return {'\u2223', 0}, 1, true case "shortparallel": // PARALLEL TO - return rune(0x2225), true + return {'\u2225', 0}, 1, true case "shuffle": // SHUFFLE PRODUCT - return rune(0x29e2), true + return {'\u29e2', 0}, 1, true case "shy": // SOFT HYPHEN - return rune(0xad), true + return {'\u00ad', 0}, 1, true case "sigma": // GREEK SMALL LETTER SIGMA - return rune(0x03c3), true + return {'\u03c3', 0}, 1, true case "sigmaf": // GREEK SMALL LETTER FINAL SIGMA - return rune(0x03c2), true + return {'\u03c2', 0}, 1, true case "sigmav": // GREEK SMALL LETTER FINAL SIGMA - return rune(0x03c2), true + return {'\u03c2', 0}, 1, true case "sim": // TILDE OPERATOR - return rune(0x223c), true + return {'\u223c', 0}, 1, true case "simdot": // TILDE OPERATOR WITH DOT ABOVE - return rune(0x2a6a), true + return {'\u2a6a', 0}, 1, true case "sime": // ASYMPTOTICALLY EQUAL TO - return rune(0x2243), true + return {'\u2243', 0}, 1, true case "simeq": // ASYMPTOTICALLY EQUAL TO - return rune(0x2243), true + return {'\u2243', 0}, 1, true case "simg": // SIMILAR OR GREATER-THAN - return rune(0x2a9e), true + return {'\u2a9e', 0}, 1, true case "simgE": // SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN - return rune(0x2aa0), true + return {'\u2aa0', 0}, 1, true case "siml": // SIMILAR OR LESS-THAN - return rune(0x2a9d), true + return {'\u2a9d', 0}, 1, true case "simlE": // SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN - return rune(0x2a9f), true + return {'\u2a9f', 0}, 1, true case "simne": // APPROXIMATELY BUT NOT ACTUALLY EQUAL TO - return rune(0x2246), true + return {'\u2246', 0}, 1, true case "simplus": // PLUS SIGN WITH TILDE ABOVE - return rune(0x2a24), true + return {'\u2a24', 0}, 1, true case "simrarr": // TILDE OPERATOR ABOVE RIGHTWARDS ARROW - return rune(0x2972), true + return {'\u2972', 0}, 1, true case "slarr": // LEFTWARDS ARROW - return rune(0x2190), true + return {'\u2190', 0}, 1, true case "slint": // INTEGRAL AVERAGE WITH SLASH - return rune(0x2a0f), true + return {'\u2a0f', 0}, 1, true case "smallsetminus": // SET MINUS - return rune(0x2216), true + return {'\u2216', 0}, 1, true case "smashp": // SMASH PRODUCT - return rune(0x2a33), true + return {'\u2a33', 0}, 1, true case "smeparsl": // EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE - return rune(0x29e4), true + return {'\u29e4', 0}, 1, true case "smid": // DIVIDES - return rune(0x2223), true + return {'\u2223', 0}, 1, true case "smile": // SMILE - return rune(0x2323), true + return {'\u2323', 0}, 1, true case "smt": // SMALLER THAN - return rune(0x2aaa), true + return {'\u2aaa', 0}, 1, true case "smte": // SMALLER THAN OR EQUAL TO - return rune(0x2aac), true + return {'\u2aac', 0}, 1, true case "smtes": // SMALLER THAN OR slanted EQUAL - return rune(0x2aac), true + return {'\u2aac', '\u2aac'}, 2, true case "softcy": // CYRILLIC SMALL LETTER SOFT SIGN - return rune(0x044c), true + return {'\u044c', 0}, 1, true case "sol": // SOLIDUS - return rune(0x2f), true + return {'/', 0}, 1, true case "solb": // SQUARED RISING DIAGONAL SLASH - return rune(0x29c4), true + return {'\u29c4', 0}, 1, true case "solbar": // APL FUNCTIONAL SYMBOL SLASH BAR - return rune(0x233f), true + return {'\u233f', 0}, 1, true case "sopf": // MATHEMATICAL DOUBLE-STRUCK SMALL S - return rune(0x01d564), true + return {'\U0001d564', 0}, 1, true case "spades": // BLACK SPADE SUIT - return rune(0x2660), true + return {'\u2660', 0}, 1, true case "spadesuit": // BLACK SPADE SUIT - return rune(0x2660), true + return {'\u2660', 0}, 1, true case "spar": // PARALLEL TO - return rune(0x2225), true + return {'\u2225', 0}, 1, true case "sqcap": // SQUARE CAP - return rune(0x2293), true + return {'\u2293', 0}, 1, true case "sqcaps": // SQUARE CAP with serifs - return rune(0x2293), true + return {'\u2293', '\u2293'}, 2, true case "sqcup": // SQUARE CUP - return rune(0x2294), true + return {'\u2294', 0}, 1, true case "sqcups": // SQUARE CUP with serifs - return rune(0x2294), true + return {'\u2294', '\u2294'}, 2, true case "sqsub": // SQUARE IMAGE OF - return rune(0x228f), true + return {'\u228f', 0}, 1, true case "sqsube": // SQUARE IMAGE OF OR EQUAL TO - return rune(0x2291), true + return {'\u2291', 0}, 1, true case "sqsubset": // SQUARE IMAGE OF - return rune(0x228f), true + return {'\u228f', 0}, 1, true case "sqsubseteq": // SQUARE IMAGE OF OR EQUAL TO - return rune(0x2291), true + return {'\u2291', 0}, 1, true case "sqsup": // SQUARE ORIGINAL OF - return rune(0x2290), true + return {'\u2290', 0}, 1, true case "sqsupe": // SQUARE ORIGINAL OF OR EQUAL TO - return rune(0x2292), true + return {'\u2292', 0}, 1, true case "sqsupset": // SQUARE ORIGINAL OF - return rune(0x2290), true + return {'\u2290', 0}, 1, true case "sqsupseteq": // SQUARE ORIGINAL OF OR EQUAL TO - return rune(0x2292), true + return {'\u2292', 0}, 1, true case "squ": // WHITE SQUARE - return rune(0x25a1), true + return {'\u25a1', 0}, 1, true case "square": // WHITE SQUARE - return rune(0x25a1), true + return {'\u25a1', 0}, 1, true case "squarf": // BLACK SMALL SQUARE - return rune(0x25aa), true + return {'\u25aa', 0}, 1, true case "squb": // SQUARED SQUARE - return rune(0x29c8), true + return {'\u29c8', 0}, 1, true case "squerr": // ERROR-BARRED WHITE SQUARE - return rune(0x29ee), true + return {'\u29ee', 0}, 1, true case "squf": // BLACK SMALL SQUARE - return rune(0x25aa), true + return {'\u25aa', 0}, 1, true case "squferr": // ERROR-BARRED BLACK SQUARE - return rune(0x29ef), true + return {'\u29ef', 0}, 1, true case "srarr": // RIGHTWARDS ARROW - return rune(0x2192), true + return {'\u2192', 0}, 1, true case "sscr": // MATHEMATICAL SCRIPT SMALL S - return rune(0x01d4c8), true + return {'\U0001d4c8', 0}, 1, true case "ssetmn": // SET MINUS - return rune(0x2216), true + return {'\u2216', 0}, 1, true case "ssmile": // SMILE - return rune(0x2323), true + return {'\u2323', 0}, 1, true case "sstarf": // STAR OPERATOR - return rune(0x22c6), true + return {'\u22c6', 0}, 1, true case "star": // WHITE STAR - return rune(0x2606), true + return {'\u2606', 0}, 1, true case "starf": // BLACK STAR - return rune(0x2605), true + return {'\u2605', 0}, 1, true case "stigma": // GREEK LETTER STIGMA - return rune(0x03da), true + return {'\u03da', 0}, 1, true case "straightepsilon": // GREEK LUNATE EPSILON SYMBOL - return rune(0x03f5), true + return {'\u03f5', 0}, 1, true case "straightphi": // GREEK PHI SYMBOL - return rune(0x03d5), true + return {'\u03d5', 0}, 1, true case "strns": // MACRON - return rune(0xaf), true + return {'¯', 0}, 1, true case "sub": // SUBSET OF - return rune(0x2282), true + return {'\u2282', 0}, 1, true case "subE": // SUBSET OF ABOVE EQUALS SIGN - return rune(0x2ac5), true + return {'\u2ac5', 0}, 1, true case "subdot": // SUBSET WITH DOT - return rune(0x2abd), true + return {'\u2abd', 0}, 1, true case "sube": // SUBSET OF OR EQUAL TO - return rune(0x2286), true + return {'\u2286', 0}, 1, true case "subedot": // SUBSET OF OR EQUAL TO WITH DOT ABOVE - return rune(0x2ac3), true + return {'\u2ac3', 0}, 1, true case "submult": // SUBSET WITH MULTIPLICATION SIGN BELOW - return rune(0x2ac1), true + return {'\u2ac1', 0}, 1, true case "subnE": // SUBSET OF ABOVE NOT EQUAL TO - return rune(0x2acb), true + return {'\u2acb', 0}, 1, true case "subne": // SUBSET OF WITH NOT EQUAL TO - return rune(0x228a), true + return {'\u228a', 0}, 1, true case "subplus": // SUBSET WITH PLUS SIGN BELOW - return rune(0x2abf), true + return {'\u2abf', 0}, 1, true case "subrarr": // SUBSET ABOVE RIGHTWARDS ARROW - return rune(0x2979), true + return {'\u2979', 0}, 1, true case "subset": // SUBSET OF - return rune(0x2282), true + return {'\u2282', 0}, 1, true case "subseteq": // SUBSET OF OR EQUAL TO - return rune(0x2286), true + return {'\u2286', 0}, 1, true case "subseteqq": // SUBSET OF ABOVE EQUALS SIGN - return rune(0x2ac5), true + return {'\u2ac5', 0}, 1, true case "subsetneq": // SUBSET OF WITH NOT EQUAL TO - return rune(0x228a), true + return {'\u228a', 0}, 1, true case "subsetneqq": // SUBSET OF ABOVE NOT EQUAL TO - return rune(0x2acb), true + return {'\u2acb', 0}, 1, true case "subsim": // SUBSET OF ABOVE TILDE OPERATOR - return rune(0x2ac7), true + return {'\u2ac7', 0}, 1, true case "subsub": // SUBSET ABOVE SUBSET - return rune(0x2ad5), true + return {'\u2ad5', 0}, 1, true case "subsup": // SUBSET ABOVE SUPERSET - return rune(0x2ad3), true + return {'\u2ad3', 0}, 1, true case "succ": // SUCCEEDS - return rune(0x227b), true + return {'\u227b', 0}, 1, true case "succapprox": // SUCCEEDS ABOVE ALMOST EQUAL TO - return rune(0x2ab8), true + return {'\u2ab8', 0}, 1, true case "succcurlyeq": // SUCCEEDS OR EQUAL TO - return rune(0x227d), true + return {'\u227d', 0}, 1, true case "succeq": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN - return rune(0x2ab0), true + return {'\u2ab0', 0}, 1, true case "succnapprox": // SUCCEEDS ABOVE NOT ALMOST EQUAL TO - return rune(0x2aba), true + return {'\u2aba', 0}, 1, true case "succneqq": // SUCCEEDS ABOVE NOT EQUAL TO - return rune(0x2ab6), true + return {'\u2ab6', 0}, 1, true case "succnsim": // SUCCEEDS BUT NOT EQUIVALENT TO - return rune(0x22e9), true + return {'\u22e9', 0}, 1, true case "succsim": // SUCCEEDS OR EQUIVALENT TO - return rune(0x227f), true + return {'\u227f', 0}, 1, true case "sum": // N-ARY SUMMATION - return rune(0x2211), true + return {'\u2211', 0}, 1, true case "sumint": // SUMMATION WITH INTEGRAL - return rune(0x2a0b), true + return {'\u2a0b', 0}, 1, true case "sung": // EIGHTH NOTE - return rune(0x266a), true + return {'\u266a', 0}, 1, true case "sup": // SUPERSET OF - return rune(0x2283), true + return {'\u2283', 0}, 1, true case "sup1": // SUPERSCRIPT ONE - return rune(0xb9), true + return {'¹', 0}, 1, true case "sup2": // SUPERSCRIPT TWO - return rune(0xb2), true + return {'²', 0}, 1, true case "sup3": // SUPERSCRIPT THREE - return rune(0xb3), true + return {'³', 0}, 1, true case "supE": // SUPERSET OF ABOVE EQUALS SIGN - return rune(0x2ac6), true + return {'\u2ac6', 0}, 1, true case "supdot": // SUPERSET WITH DOT - return rune(0x2abe), true + return {'\u2abe', 0}, 1, true case "supdsub": // SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET - return rune(0x2ad8), true + return {'\u2ad8', 0}, 1, true case "supe": // SUPERSET OF OR EQUAL TO - return rune(0x2287), true + return {'\u2287', 0}, 1, true case "supedot": // SUPERSET OF OR EQUAL TO WITH DOT ABOVE - return rune(0x2ac4), true + return {'\u2ac4', 0}, 1, true case "suphsol": // SUPERSET PRECEDING SOLIDUS - return rune(0x27c9), true + return {'\u27c9', 0}, 1, true case "suphsub": // SUPERSET BESIDE SUBSET - return rune(0x2ad7), true + return {'\u2ad7', 0}, 1, true case "suplarr": // SUPERSET ABOVE LEFTWARDS ARROW - return rune(0x297b), true + return {'\u297b', 0}, 1, true case "supmult": // SUPERSET WITH MULTIPLICATION SIGN BELOW - return rune(0x2ac2), true + return {'\u2ac2', 0}, 1, true case "supnE": // SUPERSET OF ABOVE NOT EQUAL TO - return rune(0x2acc), true + return {'\u2acc', 0}, 1, true case "supne": // SUPERSET OF WITH NOT EQUAL TO - return rune(0x228b), true + return {'\u228b', 0}, 1, true case "supplus": // SUPERSET WITH PLUS SIGN BELOW - return rune(0x2ac0), true + return {'\u2ac0', 0}, 1, true case "supset": // SUPERSET OF - return rune(0x2283), true + return {'\u2283', 0}, 1, true case "supseteq": // SUPERSET OF OR EQUAL TO - return rune(0x2287), true + return {'\u2287', 0}, 1, true case "supseteqq": // SUPERSET OF ABOVE EQUALS SIGN - return rune(0x2ac6), true + return {'\u2ac6', 0}, 1, true case "supsetneq": // SUPERSET OF WITH NOT EQUAL TO - return rune(0x228b), true + return {'\u228b', 0}, 1, true case "supsetneqq": // SUPERSET OF ABOVE NOT EQUAL TO - return rune(0x2acc), true + return {'\u2acc', 0}, 1, true case "supsim": // SUPERSET OF ABOVE TILDE OPERATOR - return rune(0x2ac8), true + return {'\u2ac8', 0}, 1, true case "supsub": // SUPERSET ABOVE SUBSET - return rune(0x2ad4), true + return {'\u2ad4', 0}, 1, true case "supsup": // SUPERSET ABOVE SUPERSET - return rune(0x2ad6), true + return {'\u2ad6', 0}, 1, true case "swArr": // SOUTH WEST DOUBLE ARROW - return rune(0x21d9), true + return {'\u21d9', 0}, 1, true case "swarhk": // SOUTH WEST ARROW WITH HOOK - return rune(0x2926), true + return {'\u2926', 0}, 1, true case "swarr": // SOUTH WEST ARROW - return rune(0x2199), true + return {'\u2199', 0}, 1, true case "swarrow": // SOUTH WEST ARROW - return rune(0x2199), true + return {'\u2199', 0}, 1, true case "swnwar": // SOUTH WEST ARROW AND NORTH WEST ARROW - return rune(0x292a), true + return {'\u292a', 0}, 1, true case "szlig": // LATIN SMALL LETTER SHARP S - return rune(0xdf), true + return {'ß', 0}, 1, true } case 't': switch name { case "target": // POSITION INDICATOR - return rune(0x2316), true + return {'\u2316', 0}, 1, true case "tau": // GREEK SMALL LETTER TAU - return rune(0x03c4), true + return {'\u03c4', 0}, 1, true case "tbrk": // TOP SQUARE BRACKET - return rune(0x23b4), true + return {'\u23b4', 0}, 1, true case "tcaron": // LATIN SMALL LETTER T WITH CARON - return rune(0x0165), true + return {'\u0165', 0}, 1, true case "tcedil": // LATIN SMALL LETTER T WITH CEDILLA - return rune(0x0163), true + return {'\u0163', 0}, 1, true case "tcy": // CYRILLIC SMALL LETTER TE - return rune(0x0442), true + return {'\u0442', 0}, 1, true case "tdot": // COMBINING THREE DOTS ABOVE - return rune(0x20db), true + return {'\u20db', 0}, 1, true case "telrec": // TELEPHONE RECORDER - return rune(0x2315), true + return {'\u2315', 0}, 1, true case "tfr": // MATHEMATICAL FRAKTUR SMALL T - return rune(0x01d531), true + return {'\U0001d531', 0}, 1, true case "tgr": // GREEK SMALL LETTER TAU - return rune(0x03c4), true + return {'\u03c4', 0}, 1, true case "there4": // THEREFORE - return rune(0x2234), true + return {'\u2234', 0}, 1, true case "therefore": // THEREFORE - return rune(0x2234), true + return {'\u2234', 0}, 1, true case "thermod": // THERMODYNAMIC - return rune(0x29e7), true + return {'\u29e7', 0}, 1, true case "theta": // GREEK SMALL LETTER THETA - return rune(0x03b8), true + return {'\u03b8', 0}, 1, true case "thetas": // GREEK SMALL LETTER THETA - return rune(0x03b8), true + return {'\u03b8', 0}, 1, true case "thetasym": // GREEK THETA SYMBOL - return rune(0x03d1), true + return {'\u03d1', 0}, 1, true case "thetav": // GREEK THETA SYMBOL - return rune(0x03d1), true + return {'\u03d1', 0}, 1, true case "thgr": // GREEK SMALL LETTER THETA - return rune(0x03b8), true + return {'\u03b8', 0}, 1, true case "thickapprox": // ALMOST EQUAL TO - return rune(0x2248), true + return {'\u2248', 0}, 1, true case "thicksim": // TILDE OPERATOR - return rune(0x223c), true + return {'\u223c', 0}, 1, true case "thinsp": // THIN SPACE - return rune(0x2009), true + return {'\u2009', 0}, 1, true case "thkap": // ALMOST EQUAL TO - return rune(0x2248), true + return {'\u2248', 0}, 1, true case "thksim": // TILDE OPERATOR - return rune(0x223c), true + return {'\u223c', 0}, 1, true case "thorn": // LATIN SMALL LETTER THORN - return rune(0xfe), true + return {'þ', 0}, 1, true case "tilde": // SMALL TILDE - return rune(0x02dc), true + return {'\u02dc', 0}, 1, true case "timeint": // INTEGRAL WITH TIMES SIGN - return rune(0x2a18), true + return {'\u2a18', 0}, 1, true case "times": // MULTIPLICATION SIGN - return rune(0xd7), true + return {'×', 0}, 1, true case "timesb": // SQUARED TIMES - return rune(0x22a0), true + return {'\u22a0', 0}, 1, true case "timesbar": // MULTIPLICATION SIGN WITH UNDERBAR - return rune(0x2a31), true + return {'\u2a31', 0}, 1, true case "timesd": // MULTIPLICATION SIGN WITH DOT ABOVE - return rune(0x2a30), true + return {'\u2a30', 0}, 1, true case "tint": // TRIPLE INTEGRAL - return rune(0x222d), true + return {'\u222d', 0}, 1, true case "toea": // NORTH EAST ARROW AND SOUTH EAST ARROW - return rune(0x2928), true + return {'\u2928', 0}, 1, true case "top": // DOWN TACK - return rune(0x22a4), true + return {'\u22a4', 0}, 1, true case "topbot": // APL FUNCTIONAL SYMBOL I-BEAM - return rune(0x2336), true + return {'\u2336', 0}, 1, true case "topcir": // DOWN TACK WITH CIRCLE BELOW - return rune(0x2af1), true + return {'\u2af1', 0}, 1, true case "topf": // MATHEMATICAL DOUBLE-STRUCK SMALL T - return rune(0x01d565), true + return {'\U0001d565', 0}, 1, true case "topfork": // PITCHFORK WITH TEE TOP - return rune(0x2ada), true + return {'\u2ada', 0}, 1, true case "tosa": // SOUTH EAST ARROW AND SOUTH WEST ARROW - return rune(0x2929), true + return {'\u2929', 0}, 1, true case "tprime": // TRIPLE PRIME - return rune(0x2034), true + return {'\u2034', 0}, 1, true case "trade": // TRADE MARK SIGN - return rune(0x2122), true + return {'\u2122', 0}, 1, true case "triS": // S IN TRIANGLE - return rune(0x29cc), true + return {'\u29cc', 0}, 1, true case "triangle": // WHITE UP-POINTING SMALL TRIANGLE - return rune(0x25b5), true + return {'\u25b5', 0}, 1, true case "triangledown": // WHITE DOWN-POINTING SMALL TRIANGLE - return rune(0x25bf), true + return {'\u25bf', 0}, 1, true case "triangleleft": // WHITE LEFT-POINTING SMALL TRIANGLE - return rune(0x25c3), true + return {'\u25c3', 0}, 1, true case "trianglelefteq": // NORMAL SUBGROUP OF OR EQUAL TO - return rune(0x22b4), true + return {'\u22b4', 0}, 1, true case "triangleq": // DELTA EQUAL TO - return rune(0x225c), true + return {'\u225c', 0}, 1, true case "triangleright": // WHITE RIGHT-POINTING SMALL TRIANGLE - return rune(0x25b9), true + return {'\u25b9', 0}, 1, true case "trianglerighteq": // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO - return rune(0x22b5), true + return {'\u22b5', 0}, 1, true case "tribar": // TRIANGLE WITH UNDERBAR - return rune(0x29cb), true + return {'\u29cb', 0}, 1, true case "tridot": // WHITE UP-POINTING TRIANGLE WITH DOT - return rune(0x25ec), true + return {'\u25ec', 0}, 1, true case "tridoto": // TRIANGLE WITH DOT ABOVE - return rune(0x29ca), true + return {'\u29ca', 0}, 1, true case "trie": // DELTA EQUAL TO - return rune(0x225c), true + return {'\u225c', 0}, 1, true case "triminus": // MINUS SIGN IN TRIANGLE - return rune(0x2a3a), true + return {'\u2a3a', 0}, 1, true case "triplus": // PLUS SIGN IN TRIANGLE - return rune(0x2a39), true + return {'\u2a39', 0}, 1, true case "trisb": // TRIANGLE WITH SERIFS AT BOTTOM - return rune(0x29cd), true + return {'\u29cd', 0}, 1, true case "tritime": // MULTIPLICATION SIGN IN TRIANGLE - return rune(0x2a3b), true + return {'\u2a3b', 0}, 1, true case "trpezium": // WHITE TRAPEZIUM - return rune(0x23e2), true + return {'\u23e2', 0}, 1, true case "tscr": // MATHEMATICAL SCRIPT SMALL T - return rune(0x01d4c9), true + return {'\U0001d4c9', 0}, 1, true case "tscy": // CYRILLIC SMALL LETTER TSE - return rune(0x0446), true + return {'\u0446', 0}, 1, true case "tshcy": // CYRILLIC SMALL LETTER TSHE - return rune(0x045b), true + return {'\u045b', 0}, 1, true case "tstrok": // LATIN SMALL LETTER T WITH STROKE - return rune(0x0167), true + return {'\u0167', 0}, 1, true case "tverbar": // TRIPLE VERTICAL BAR DELIMITER - return rune(0x2980), true + return {'\u2980', 0}, 1, true case "twixt": // BETWEEN - return rune(0x226c), true + return {'\u226c', 0}, 1, true case "twoheadleftarrow": // LEFTWARDS TWO HEADED ARROW - return rune(0x219e), true + return {'\u219e', 0}, 1, true case "twoheadrightarrow": // RIGHTWARDS TWO HEADED ARROW - return rune(0x21a0), true + return {'\u21a0', 0}, 1, true } case 'u': switch name { case "uAarr": // UPWARDS TRIPLE ARROW - return rune(0x290a), true + return {'\u290a', 0}, 1, true case "uArr": // UPWARDS DOUBLE ARROW - return rune(0x21d1), true + return {'\u21d1', 0}, 1, true case "uHar": // UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT - return rune(0x2963), true + return {'\u2963', 0}, 1, true case "uacgr": // GREEK SMALL LETTER UPSILON WITH TONOS - return rune(0x03cd), true + return {'\u03cd', 0}, 1, true case "uacute": // LATIN SMALL LETTER U WITH ACUTE - return rune(0xfa), true + return {'ú', 0}, 1, true case "uarr": // UPWARDS ARROW - return rune(0x2191), true + return {'\u2191', 0}, 1, true case "uarr2": // UPWARDS PAIRED ARROWS - return rune(0x21c8), true + return {'\u21c8', 0}, 1, true case "uarrb": // UPWARDS ARROW TO BAR - return rune(0x2912), true + return {'\u2912', 0}, 1, true case "uarrln": // UPWARDS ARROW WITH HORIZONTAL STROKE - return rune(0x2909), true + return {'\u2909', 0}, 1, true case "ubrcy": // CYRILLIC SMALL LETTER SHORT U - return rune(0x045e), true + return {'\u045e', 0}, 1, true case "ubreve": // LATIN SMALL LETTER U WITH BREVE - return rune(0x016d), true + return {'\u016d', 0}, 1, true case "ucirc": // LATIN SMALL LETTER U WITH CIRCUMFLEX - return rune(0xfb), true + return {'û', 0}, 1, true case "ucy": // CYRILLIC SMALL LETTER U - return rune(0x0443), true + return {'\u0443', 0}, 1, true case "udarr": // UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW - return rune(0x21c5), true + return {'\u21c5', 0}, 1, true case "udblac": // LATIN SMALL LETTER U WITH DOUBLE ACUTE - return rune(0x0171), true + return {'\u0171', 0}, 1, true case "udhar": // UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT - return rune(0x296e), true + return {'\u296e', 0}, 1, true case "udiagr": // GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS - return rune(0x03b0), true + return {'\u03b0', 0}, 1, true case "udigr": // GREEK SMALL LETTER UPSILON WITH DIALYTIKA - return rune(0x03cb), true + return {'\u03cb', 0}, 1, true case "udrbrk": // BOTTOM SQUARE BRACKET - return rune(0x23b5), true + return {'\u23b5', 0}, 1, true case "udrcub": // BOTTOM CURLY BRACKET - return rune(0x23df), true + return {'\u23df', 0}, 1, true case "udrpar": // BOTTOM PARENTHESIS - return rune(0x23dd), true + return {'\u23dd', 0}, 1, true case "ufisht": // UP FISH TAIL - return rune(0x297e), true + return {'\u297e', 0}, 1, true case "ufr": // MATHEMATICAL FRAKTUR SMALL U - return rune(0x01d532), true + return {'\U0001d532', 0}, 1, true case "ugr": // GREEK SMALL LETTER UPSILON - return rune(0x03c5), true + return {'\u03c5', 0}, 1, true case "ugrave": // LATIN SMALL LETTER U WITH GRAVE - return rune(0xf9), true + return {'ù', 0}, 1, true case "uharl": // UPWARDS HARPOON WITH BARB LEFTWARDS - return rune(0x21bf), true + return {'\u21bf', 0}, 1, true case "uharr": // UPWARDS HARPOON WITH BARB RIGHTWARDS - return rune(0x21be), true + return {'\u21be', 0}, 1, true case "uhblk": // UPPER HALF BLOCK - return rune(0x2580), true + return {'\u2580', 0}, 1, true case "ulcorn": // TOP LEFT CORNER - return rune(0x231c), true + return {'\u231c', 0}, 1, true case "ulcorner": // TOP LEFT CORNER - return rune(0x231c), true + return {'\u231c', 0}, 1, true case "ulcrop": // TOP LEFT CROP - return rune(0x230f), true + return {'\u230f', 0}, 1, true case "uldlshar": // UP BARB LEFT DOWN BARB LEFT HARPOON - return rune(0x2951), true + return {'\u2951', 0}, 1, true case "ulharb": // UPWARDS HARPOON WITH BARB LEFT TO BAR - return rune(0x2958), true + return {'\u2958', 0}, 1, true case "ultri": // UPPER LEFT TRIANGLE - return rune(0x25f8), true + return {'\u25f8', 0}, 1, true case "umacr": // LATIN SMALL LETTER U WITH MACRON - return rune(0x016b), true + return {'\u016b', 0}, 1, true case "uml": // DIAERESIS - return rune(0xa8), true + return {'¨', 0}, 1, true case "uogon": // LATIN SMALL LETTER U WITH OGONEK - return rune(0x0173), true + return {'\u0173', 0}, 1, true case "uopf": // MATHEMATICAL DOUBLE-STRUCK SMALL U - return rune(0x01d566), true + return {'\U0001d566', 0}, 1, true case "uparrow": // UPWARDS ARROW - return rune(0x2191), true + return {'\u2191', 0}, 1, true case "updownarrow": // UP DOWN ARROW - return rune(0x2195), true + return {'\u2195', 0}, 1, true case "upharpoonleft": // UPWARDS HARPOON WITH BARB LEFTWARDS - return rune(0x21bf), true + return {'\u21bf', 0}, 1, true case "upharpoonright": // UPWARDS HARPOON WITH BARB RIGHTWARDS - return rune(0x21be), true + return {'\u21be', 0}, 1, true case "upint": // INTEGRAL WITH OVERBAR - return rune(0x2a1b), true + return {'\u2a1b', 0}, 1, true case "uplus": // MULTISET UNION - return rune(0x228e), true + return {'\u228e', 0}, 1, true case "upsi": // GREEK SMALL LETTER UPSILON - return rune(0x03c5), true + return {'\u03c5', 0}, 1, true case "upsih": // GREEK UPSILON WITH HOOK SYMBOL - return rune(0x03d2), true + return {'\u03d2', 0}, 1, true case "upsilon": // GREEK SMALL LETTER UPSILON - return rune(0x03c5), true + return {'\u03c5', 0}, 1, true case "upuparrows": // UPWARDS PAIRED ARROWS - return rune(0x21c8), true + return {'\u21c8', 0}, 1, true case "urcorn": // TOP RIGHT CORNER - return rune(0x231d), true + return {'\u231d', 0}, 1, true case "urcorner": // TOP RIGHT CORNER - return rune(0x231d), true + return {'\u231d', 0}, 1, true case "urcrop": // TOP RIGHT CROP - return rune(0x230e), true + return {'\u230e', 0}, 1, true case "urdrshar": // UP BARB RIGHT DOWN BARB RIGHT HARPOON - return rune(0x294f), true + return {'\u294f', 0}, 1, true case "urharb": // UPWARDS HARPOON WITH BARB RIGHT TO BAR - return rune(0x2954), true + return {'\u2954', 0}, 1, true case "uring": // LATIN SMALL LETTER U WITH RING ABOVE - return rune(0x016f), true + return {'\u016f', 0}, 1, true case "urtri": // UPPER RIGHT TRIANGLE - return rune(0x25f9), true + return {'\u25f9', 0}, 1, true case "urtrif": // BLACK UPPER RIGHT TRIANGLE - return rune(0x25e5), true + return {'\u25e5', 0}, 1, true case "uscr": // MATHEMATICAL SCRIPT SMALL U - return rune(0x01d4ca), true + return {'\U0001d4ca', 0}, 1, true case "utdot": // UP RIGHT DIAGONAL ELLIPSIS - return rune(0x22f0), true + return {'\u22f0', 0}, 1, true case "utilde": // LATIN SMALL LETTER U WITH TILDE - return rune(0x0169), true + return {'\u0169', 0}, 1, true case "utri": // WHITE UP-POINTING SMALL TRIANGLE - return rune(0x25b5), true + return {'\u25b5', 0}, 1, true case "utrif": // BLACK UP-POINTING SMALL TRIANGLE - return rune(0x25b4), true + return {'\u25b4', 0}, 1, true case "uuarr": // UPWARDS PAIRED ARROWS - return rune(0x21c8), true + return {'\u21c8', 0}, 1, true case "uuml": // LATIN SMALL LETTER U WITH DIAERESIS - return rune(0xfc), true + return {'ü', 0}, 1, true case "uwangle": // OBLIQUE ANGLE OPENING DOWN - return rune(0x29a7), true + return {'\u29a7', 0}, 1, true } case 'v': switch name { case "vArr": // UP DOWN DOUBLE ARROW - return rune(0x21d5), true + return {'\u21d5', 0}, 1, true case "vBar": // SHORT UP TACK WITH UNDERBAR - return rune(0x2ae8), true + return {'\u2ae8', 0}, 1, true case "vBarv": // SHORT UP TACK ABOVE SHORT DOWN TACK - return rune(0x2ae9), true + return {'\u2ae9', 0}, 1, true case "vDash": // TRUE - return rune(0x22a8), true + return {'\u22a8', 0}, 1, true case "vDdash": // VERTICAL BAR TRIPLE RIGHT TURNSTILE - return rune(0x2ae2), true + return {'\u2ae2', 0}, 1, true case "vangrt": // RIGHT ANGLE VARIANT WITH SQUARE - return rune(0x299c), true + return {'\u299c', 0}, 1, true case "varepsilon": // GREEK LUNATE EPSILON SYMBOL - return rune(0x03f5), true + return {'\u03f5', 0}, 1, true case "varkappa": // GREEK KAPPA SYMBOL - return rune(0x03f0), true + return {'\u03f0', 0}, 1, true case "varnothing": // EMPTY SET - return rune(0x2205), true + return {'\u2205', 0}, 1, true case "varphi": // GREEK PHI SYMBOL - return rune(0x03d5), true + return {'\u03d5', 0}, 1, true case "varpi": // GREEK PI SYMBOL - return rune(0x03d6), true + return {'\u03d6', 0}, 1, true case "varpropto": // PROPORTIONAL TO - return rune(0x221d), true + return {'\u221d', 0}, 1, true case "varr": // UP DOWN ARROW - return rune(0x2195), true + return {'\u2195', 0}, 1, true case "varrho": // GREEK RHO SYMBOL - return rune(0x03f1), true + return {'\u03f1', 0}, 1, true case "varsigma": // GREEK SMALL LETTER FINAL SIGMA - return rune(0x03c2), true + return {'\u03c2', 0}, 1, true case "varsubsetneq": // SUBSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return rune(0x228a), true + return {'\u228a', '\u228a'}, 2, true case "varsubsetneqq": // SUBSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return rune(0x2acb), true + return {'\u2acb', '\u2acb'}, 2, true case "varsupsetneq": // SUPERSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return rune(0x228b), true + return {'\u228b', '\u228b'}, 2, true case "varsupsetneqq": // SUPERSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return rune(0x2acc), true + return {'\u2acc', '\u2acc'}, 2, true case "vartheta": // GREEK THETA SYMBOL - return rune(0x03d1), true + return {'\u03d1', 0}, 1, true case "vartriangleleft": // NORMAL SUBGROUP OF - return rune(0x22b2), true + return {'\u22b2', 0}, 1, true case "vartriangleright": // CONTAINS AS NORMAL SUBGROUP - return rune(0x22b3), true + return {'\u22b3', 0}, 1, true case "vbrtri": // VERTICAL BAR BESIDE RIGHT TRIANGLE - return rune(0x29d0), true + return {'\u29d0', 0}, 1, true case "vcy": // CYRILLIC SMALL LETTER VE - return rune(0x0432), true + return {'\u0432', 0}, 1, true case "vdash": // RIGHT TACK - return rune(0x22a2), true + return {'\u22a2', 0}, 1, true case "vee": // LOGICAL OR - return rune(0x2228), true + return {'\u2228', 0}, 1, true case "veeBar": // LOGICAL OR WITH DOUBLE UNDERBAR - return rune(0x2a63), true + return {'\u2a63', 0}, 1, true case "veebar": // XOR - return rune(0x22bb), true + return {'\u22bb', 0}, 1, true case "veeeq": // EQUIANGULAR TO - return rune(0x225a), true + return {'\u225a', 0}, 1, true case "vellip": // VERTICAL ELLIPSIS - return rune(0x22ee), true + return {'\u22ee', 0}, 1, true case "vellip4": // DOTTED FENCE - return rune(0x2999), true + return {'\u2999', 0}, 1, true case "vellipv": // TRIPLE COLON OPERATOR - return rune(0x2af6), true + return {'\u2af6', 0}, 1, true case "verbar": // VERTICAL LINE - return rune(0x7c), true + return {'|', 0}, 1, true case "vert": // VERTICAL LINE - return rune(0x7c), true + return {'|', 0}, 1, true case "vert3": // TRIPLE VERTICAL BAR BINARY RELATION - return rune(0x2af4), true + return {'\u2af4', 0}, 1, true case "vfr": // MATHEMATICAL FRAKTUR SMALL V - return rune(0x01d533), true + return {'\U0001d533', 0}, 1, true case "vldash": // LEFT SQUARE BRACKET LOWER CORNER - return rune(0x23a3), true + return {'\u23a3', 0}, 1, true case "vltri": // NORMAL SUBGROUP OF - return rune(0x22b2), true + return {'\u22b2', 0}, 1, true case "vnsub": // SUBSET OF with vertical line - return rune(0x2282), true + return {'\u2282', '\u2282'}, 2, true case "vnsup": // SUPERSET OF with vertical line - return rune(0x2283), true + return {'\u2283', '\u2283'}, 2, true case "vopf": // MATHEMATICAL DOUBLE-STRUCK SMALL V - return rune(0x01d567), true + return {'\U0001d567', 0}, 1, true case "vprime": // PRIME - return rune(0x2032), true + return {'\u2032', 0}, 1, true case "vprop": // PROPORTIONAL TO - return rune(0x221d), true + return {'\u221d', 0}, 1, true case "vrtri": // CONTAINS AS NORMAL SUBGROUP - return rune(0x22b3), true + return {'\u22b3', 0}, 1, true case "vscr": // MATHEMATICAL SCRIPT SMALL V - return rune(0x01d4cb), true + return {'\U0001d4cb', 0}, 1, true case "vsubnE": // SUBSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return rune(0x2acb), true + return {'\u2acb', '\u2acb'}, 2, true case "vsubne": // SUBSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return rune(0x228a), true + return {'\u228a', '\u228a'}, 2, true case "vsupnE": // SUPERSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return rune(0x2acc), true + return {'\u2acc', '\u2acc'}, 2, true case "vsupne": // SUPERSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return rune(0x228b), true + return {'\u228b', '\u228b'}, 2, true case "vzigzag": // VERTICAL ZIGZAG LINE - return rune(0x299a), true + return {'\u299a', 0}, 1, true } case 'w': switch name { case "wcirc": // LATIN SMALL LETTER W WITH CIRCUMFLEX - return rune(0x0175), true + return {'\u0175', 0}, 1, true case "wedbar": // LOGICAL AND WITH UNDERBAR - return rune(0x2a5f), true + return {'\u2a5f', 0}, 1, true case "wedge": // LOGICAL AND - return rune(0x2227), true + return {'\u2227', 0}, 1, true case "wedgeq": // ESTIMATES - return rune(0x2259), true + return {'\u2259', 0}, 1, true case "weierp": // SCRIPT CAPITAL P - return rune(0x2118), true + return {'\u2118', 0}, 1, true case "wfr": // MATHEMATICAL FRAKTUR SMALL W - return rune(0x01d534), true + return {'\U0001d534', 0}, 1, true case "wopf": // MATHEMATICAL DOUBLE-STRUCK SMALL W - return rune(0x01d568), true + return {'\U0001d568', 0}, 1, true case "wp": // SCRIPT CAPITAL P - return rune(0x2118), true + return {'\u2118', 0}, 1, true case "wr": // WREATH PRODUCT - return rune(0x2240), true + return {'\u2240', 0}, 1, true case "wreath": // WREATH PRODUCT - return rune(0x2240), true + return {'\u2240', 0}, 1, true case "wscr": // MATHEMATICAL SCRIPT SMALL W - return rune(0x01d4cc), true + return {'\U0001d4cc', 0}, 1, true } case 'x': switch name { case "xandand": // TWO LOGICAL AND OPERATOR - return rune(0x2a07), true + return {'\u2a07', 0}, 1, true case "xbsol": // BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT - return rune(0x2571), true + return {'\u2571', 0}, 1, true case "xcap": // N-ARY INTERSECTION - return rune(0x22c2), true + return {'\u22c2', 0}, 1, true case "xcirc": // LARGE CIRCLE - return rune(0x25ef), true + return {'\u25ef', 0}, 1, true case "xcup": // N-ARY UNION - return rune(0x22c3), true + return {'\u22c3', 0}, 1, true case "xcupdot": // N-ARY UNION OPERATOR WITH DOT - return rune(0x2a03), true + return {'\u2a03', 0}, 1, true case "xdtri": // WHITE DOWN-POINTING TRIANGLE - return rune(0x25bd), true + return {'\u25bd', 0}, 1, true case "xfr": // MATHEMATICAL FRAKTUR SMALL X - return rune(0x01d535), true + return {'\U0001d535', 0}, 1, true case "xgr": // GREEK SMALL LETTER XI - return rune(0x03be), true + return {'\u03be', 0}, 1, true case "xhArr": // LONG LEFT RIGHT DOUBLE ARROW - return rune(0x27fa), true + return {'\u27fa', 0}, 1, true case "xharr": // LONG LEFT RIGHT ARROW - return rune(0x27f7), true + return {'\u27f7', 0}, 1, true case "xi": // GREEK SMALL LETTER XI - return rune(0x03be), true + return {'\u03be', 0}, 1, true case "xlArr": // LONG LEFTWARDS DOUBLE ARROW - return rune(0x27f8), true + return {'\u27f8', 0}, 1, true case "xlarr": // LONG LEFTWARDS ARROW - return rune(0x27f5), true + return {'\u27f5', 0}, 1, true case "xmap": // LONG RIGHTWARDS ARROW FROM BAR - return rune(0x27fc), true + return {'\u27fc', 0}, 1, true case "xnis": // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE - return rune(0x22fb), true + return {'\u22fb', 0}, 1, true case "xodot": // N-ARY CIRCLED DOT OPERATOR - return rune(0x2a00), true + return {'\u2a00', 0}, 1, true case "xopf": // MATHEMATICAL DOUBLE-STRUCK SMALL X - return rune(0x01d569), true + return {'\U0001d569', 0}, 1, true case "xoplus": // N-ARY CIRCLED PLUS OPERATOR - return rune(0x2a01), true + return {'\u2a01', 0}, 1, true case "xoror": // TWO LOGICAL OR OPERATOR - return rune(0x2a08), true + return {'\u2a08', 0}, 1, true case "xotime": // N-ARY CIRCLED TIMES OPERATOR - return rune(0x2a02), true + return {'\u2a02', 0}, 1, true case "xrArr": // LONG RIGHTWARDS DOUBLE ARROW - return rune(0x27f9), true + return {'\u27f9', 0}, 1, true case "xrarr": // LONG RIGHTWARDS ARROW - return rune(0x27f6), true + return {'\u27f6', 0}, 1, true case "xscr": // MATHEMATICAL SCRIPT SMALL X - return rune(0x01d4cd), true + return {'\U0001d4cd', 0}, 1, true case "xsol": // BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT - return rune(0x2572), true + return {'\u2572', 0}, 1, true case "xsqcap": // N-ARY SQUARE INTERSECTION OPERATOR - return rune(0x2a05), true + return {'\u2a05', 0}, 1, true case "xsqcup": // N-ARY SQUARE UNION OPERATOR - return rune(0x2a06), true + return {'\u2a06', 0}, 1, true case "xsqu": // WHITE MEDIUM SQUARE - return rune(0x25fb), true + return {'\u25fb', 0}, 1, true case "xsquf": // BLACK MEDIUM SQUARE - return rune(0x25fc), true + return {'\u25fc', 0}, 1, true case "xtimes": // N-ARY TIMES OPERATOR - return rune(0x2a09), true + return {'\u2a09', 0}, 1, true case "xuplus": // N-ARY UNION OPERATOR WITH PLUS - return rune(0x2a04), true + return {'\u2a04', 0}, 1, true case "xutri": // WHITE UP-POINTING TRIANGLE - return rune(0x25b3), true + return {'\u25b3', 0}, 1, true case "xvee": // N-ARY LOGICAL OR - return rune(0x22c1), true + return {'\u22c1', 0}, 1, true case "xwedge": // N-ARY LOGICAL AND - return rune(0x22c0), true + return {'\u22c0', 0}, 1, true } case 'y': switch name { case "yacute": // LATIN SMALL LETTER Y WITH ACUTE - return rune(0xfd), true + return {'ý', 0}, 1, true case "yacy": // CYRILLIC SMALL LETTER YA - return rune(0x044f), true + return {'\u044f', 0}, 1, true case "ycirc": // LATIN SMALL LETTER Y WITH CIRCUMFLEX - return rune(0x0177), true + return {'\u0177', 0}, 1, true case "ycy": // CYRILLIC SMALL LETTER YERU - return rune(0x044b), true + return {'\u044b', 0}, 1, true case "yen": // YEN SIGN - return rune(0xa5), true + return {'¥', 0}, 1, true case "yfr": // MATHEMATICAL FRAKTUR SMALL Y - return rune(0x01d536), true + return {'\U0001d536', 0}, 1, true case "yicy": // CYRILLIC SMALL LETTER YI - return rune(0x0457), true + return {'\u0457', 0}, 1, true case "yopf": // MATHEMATICAL DOUBLE-STRUCK SMALL Y - return rune(0x01d56a), true + return {'\U0001d56a', 0}, 1, true case "yscr": // MATHEMATICAL SCRIPT SMALL Y - return rune(0x01d4ce), true + return {'\U0001d4ce', 0}, 1, true case "yucy": // CYRILLIC SMALL LETTER YU - return rune(0x044e), true + return {'\u044e', 0}, 1, true case "yuml": // LATIN SMALL LETTER Y WITH DIAERESIS - return rune(0xff), true + return {'ÿ', 0}, 1, true } case 'z': switch name { case "zacute": // LATIN SMALL LETTER Z WITH ACUTE - return rune(0x017a), true + return {'\u017a', 0}, 1, true case "zcaron": // LATIN SMALL LETTER Z WITH CARON - return rune(0x017e), true + return {'\u017e', 0}, 1, true case "zcy": // CYRILLIC SMALL LETTER ZE - return rune(0x0437), true + return {'\u0437', 0}, 1, true case "zdot": // LATIN SMALL LETTER Z WITH DOT ABOVE - return rune(0x017c), true + return {'\u017c', 0}, 1, true case "zeetrf": // BLACK-LETTER CAPITAL Z - return rune(0x2128), true + return {'\u2128', 0}, 1, true case "zeta": // GREEK SMALL LETTER ZETA - return rune(0x03b6), true + return {'\u03b6', 0}, 1, true case "zfr": // MATHEMATICAL FRAKTUR SMALL Z - return rune(0x01d537), true + return {'\U0001d537', 0}, 1, true case "zgr": // GREEK SMALL LETTER ZETA - return rune(0x03b6), true + return {'\u03b6', 0}, 1, true case "zhcy": // CYRILLIC SMALL LETTER ZHE - return rune(0x0436), true + return {'\u0436', 0}, 1, true case "zigrarr": // RIGHTWARDS SQUIGGLE ARROW - return rune(0x21dd), true + return {'\u21dd', 0}, 1, true case "zopf": // MATHEMATICAL DOUBLE-STRUCK SMALL Z - return rune(0x01d56b), true + return {'\U0001d56b', 0}, 1, true case "zscr": // MATHEMATICAL SCRIPT SMALL Z - return rune(0x01d4cf), true + return {'\U0001d4cf', 0}, 1, true case "zwj": // ZERO WIDTH JOINER - return rune(0x200d), true + return {'\u200d', 0}, 1, true case "zwnj": // ZERO WIDTH NON-JOINER - return rune(0x200c), true + return {'\u200c', 0}, 1, true } } - return -1, false + return } /* diff --git a/core/html/escape.odin b/core/html/escape.odin deleted file mode 100644 index 011d1f4cd..000000000 --- a/core/html/escape.odin +++ /dev/null @@ -1,248 +0,0 @@ -package html - -import "base:runtime" -import "core:fmt" -import "core:strings" -import "core:unicode/utf8" - -// escape_string escapes special characters like '&' to become '&'. -// It escapes only 5 different characters: & ' < > and ". -@(require_results) -escape_string :: proc(s: string, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool) { - /* - & -> & - ' -> ' // ' is shorter than ' (NOTE: ' was not available until HTML 5) - < -> < - > -> > - " -> " // " is shorter than " - */ - - b := transmute([]byte)s - - extra_bytes_needed := 0 - - for c in b { - switch c { - case '&': extra_bytes_needed += 4 - case '\'': extra_bytes_needed += 4 - case '<': extra_bytes_needed += 3 - case '>': extra_bytes_needed += 3 - case '"': extra_bytes_needed += 4 - } - } - - if extra_bytes_needed == 0 { - return s, false - } - - t, err := make([]byte, len(s) + extra_bytes_needed, allocator, loc) - if err != nil { - return - } - was_allocation = true - - w := 0 - for c in b { - s := "" - switch c { - case '&': s = "&" - case '\'': s = "'" - case '<': s = "<" - case '>': s = ">" - case '"': s = """ - } - if s != "" { - copy(t[w:], s) - w += len(s) - } else { - t[w] = c - w += 1 - } - } - output = string(t[0:w]) - return -} - -@(require_results) -unescape_string :: proc(s: string, entity_map: Entity_Map, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool, err: runtime.Allocator_Error) { - @(require_results) - do_append :: proc(s: string, amp_idx: int, entity_map: Entity_Map, buf: ^[dynamic]byte) -> (n: int) { - s, amp_idx := s, amp_idx - - n += len(s[:amp_idx]) - if buf != nil { append(buf, s[:amp_idx]) } - s = s[amp_idx:] - for len(s) > 0 { - b, w, j := unescape_entity(s, entity_map) - n += w - if buf != nil { append(buf, ..b[:w]) } - - s = s[j:] - - amp_idx = strings.index_byte(s, '&') - if amp_idx < 0 { - n += len(s) - if buf != nil { append(buf, s) } - break - } - n += amp_idx - if buf != nil { append(buf, s[:amp_idx]) } - s = s[amp_idx:] - } - - return - } - - s := s - amp_idx := strings.index_byte(s, '&') - if amp_idx < 0 { - return s, false, nil - } - - // NOTE(bill): this does a two pass in order to minimize the allocations required - bytes_required := do_append(s, amp_idx, entity_map, nil) - - buf := make([dynamic]byte, 0, bytes_required, allocator, loc) or_return - was_allocation = true - - _ = do_append(s, amp_idx, entity_map, &buf) - - assert(len(buf) == cap(buf)) - output = string(buf[:]) - - return -} - -// Returns an unescaped string of an encoded HTML entity. -@(require_results) -unescape_entity :: proc(s: string, entity_map: Entity_Map) -> (b: [8]byte, w: int, j: int) { - s := s - if len(s) < 2 { - return - } - if s[0] != '&' { - return - } - j = 1 - - if s[j] == '#' { // scan numbers - j += 1 - if len(s) <= 3 { // remove `&#.` - return - } - c := s[j] - hex := false - if c == 'x' || c == 'X' { - hex = true - j += 1 - } - - x := rune(0) - scan_number: for j < len(s) { - c = s[j] - j += 1 - if hex { - switch c { - case '0'..='9': x = 16*x + rune(c) - '0'; continue scan_number - case 'a'..='f': x = 16*x + rune(c) - 'a' + 10; continue scan_number - case 'A'..='F': x = 16*x + rune(c) - 'A' + 10; continue scan_number - } - } else { - switch c { - case '0'..='9': x = 10*x + rune(c) - '0'; continue scan_number - } - } - - // Keep the ';' to check for cases which require it and cases which might not - if c != ';' { - j -= 1 - } - break scan_number - } - - - if j <= 3 { // no replacement characters found - return - } - - @(static, rodata) - windows_1252_replacement_table := [0xa0 - 0x80]rune{ // Windows-1252 -> UTF-8 - '\u20ac', '\u0081', '\u201a', '\u0192', - '\u201e', '\u2026', '\u2020', '\u2021', - '\u02c6', '\u2030', '\u0160', '\u2039', - '\u0152', '\u008d', '\u017d', '\u008f', - '\u0090', '\u2018', '\u2019', '\u201c', - '\u201d', '\u2022', '\u2013', '\u2014', - '\u02dc', '\u2122', '\u0161', '\u203a', - '\u0153', '\u009d', '\u017e', '\u0178', - } - - switch x { - case 0x80..<0xa0: - x = windows_1252_replacement_table[x-0x80] - case 0, 0xd800..=0xdfff: - x = utf8.RUNE_ERROR - case: - if x > 0x10ffff { - x = utf8.RUNE_ERROR - } - - } - - b1, w1 := utf8.encode_rune(x) - w += copy(b[:], b1[:w1]) - return - } - - // Lookup by entity names - - scan_ident: for j < len(s) { // scan over letters and digits - c := s[j] - j += 1 - - switch c { - case 'a'..='z', 'A'..='Z', '0'..='9': - continue scan_ident - } - // Keep the ';' to check for cases which require it and cases which might not - if c != ';' { - j -= 1 - } - break scan_ident - } - - entity_name := s[1:j] - if len(entity_name) == 0 { - return - } - - if r, ok := entity_map.entity1[entity_name]; ok { - b1, w1 := utf8.encode_rune(r) - copy(b[:], b1[:w1]) - w = w1 - return - } - - if r2, ok := entity_map.entity2[entity_name]; ok { - b1, w1 := utf8.encode_rune(r2[0]) - b2, w2 := utf8.encode_rune(r2[1]) - w += copy(b[w:], b1[:w1]) - w += copy(b[w:], b2[:w2]) - return - } - - // The longest entities that do not end with a semicolon are <=6 bytes long - LONGEST_ENTITY_WITHOUT_SEMICOLON :: 6 - - n := min(len(entity_name)-1, LONGEST_ENTITY_WITHOUT_SEMICOLON) - for i := n; i > 1; i -= 1 { - if r, ok := entity_map.entity1[entity_name[:i]]; ok { - b1, w1 := utf8.encode_rune(r) - copy(b[:], b1[:w1]) - w = w1 - return - } - } - - return -} diff --git a/core/html/html_entities.odin b/core/html/html_entities.odin deleted file mode 100644 index be52f5d26..000000000 --- a/core/html/html_entities.odin +++ /dev/null @@ -1,2275 +0,0 @@ -package html - -Entity_Map :: struct { - entity1: map[string]rune, - entity2: map[string][2]rune, -} - - -entity_map_create :: proc(allocator := context.allocator) -> (m: Entity_Map) { - m.entity1.allocator = allocator - m.entity2.allocator = allocator - - reserve(&m.entity1, len(_entity1)*2) - reserve(&m.entity2, len(_entity2)*2) - - for &e in _entity1 { - map_insert(&m.entity1, e.n, e.r) - } - - for &e in _entity2 { - map_insert(&m.entity2, e.n, e.r) - } - - return -} - -entity_map_destroy :: proc(m: ^Entity_Map) { - delete(m.entity1) - delete(m.entity2) - m^ = {} -} - - -// Generated from http://www.w3.org/TR/html4/sgml/entities.html - - -@(private="file", rodata) -_entity1 := [?]struct{n: string, r: rune}{ - {"AElig;", '\U000000C6'}, - {"AMP;", '\U00000026'}, - {"Aacute;", '\U000000C1'}, - {"Abreve;", '\U00000102'}, - {"Acirc;", '\U000000C2'}, - {"Acy;", '\U00000410'}, - {"Afr;", '\U0001D504'}, - {"Agrave;", '\U000000C0'}, - {"Alpha;", '\U00000391'}, - {"Amacr;", '\U00000100'}, - {"And;", '\U00002A53'}, - {"Aogon;", '\U00000104'}, - {"Aopf;", '\U0001D538'}, - {"ApplyFunction;", '\U00002061'}, - {"Aring;", '\U000000C5'}, - {"Ascr;", '\U0001D49C'}, - {"Assign;", '\U00002254'}, - {"Atilde;", '\U000000C3'}, - {"Auml;", '\U000000C4'}, - {"Backslash;", '\U00002216'}, - {"Barv;", '\U00002AE7'}, - {"Barwed;", '\U00002306'}, - {"Bcy;", '\U00000411'}, - {"Because;", '\U00002235'}, - {"Bernoullis;", '\U0000212C'}, - {"Beta;", '\U00000392'}, - {"Bfr;", '\U0001D505'}, - {"Bopf;", '\U0001D539'}, - {"Breve;", '\U000002D8'}, - {"Bscr;", '\U0000212C'}, - {"Bumpeq;", '\U0000224E'}, - {"CHcy;", '\U00000427'}, - {"COPY;", '\U000000A9'}, - {"Cacute;", '\U00000106'}, - {"Cap;", '\U000022D2'}, - {"CapitalDifferentialD;", '\U00002145'}, - {"Cayleys;", '\U0000212D'}, - {"Ccaron;", '\U0000010C'}, - {"Ccedil;", '\U000000C7'}, - {"Ccirc;", '\U00000108'}, - {"Cconint;", '\U00002230'}, - {"Cdot;", '\U0000010A'}, - {"Cedilla;", '\U000000B8'}, - {"CenterDot;", '\U000000B7'}, - {"Cfr;", '\U0000212D'}, - {"Chi;", '\U000003A7'}, - {"CircleDot;", '\U00002299'}, - {"CircleMinus;", '\U00002296'}, - {"CirclePlus;", '\U00002295'}, - {"CircleTimes;", '\U00002297'}, - {"ClockwiseContourIntegral;", '\U00002232'}, - {"CloseCurlyDoubleQuote;", '\U0000201D'}, - {"CloseCurlyQuote;", '\U00002019'}, - {"Colon;", '\U00002237'}, - {"Colone;", '\U00002A74'}, - {"Congruent;", '\U00002261'}, - {"Conint;", '\U0000222F'}, - {"ContourIntegral;", '\U0000222E'}, - {"Copf;", '\U00002102'}, - {"Coproduct;", '\U00002210'}, - {"CounterClockwiseContourIntegral;", '\U00002233'}, - {"Cross;", '\U00002A2F'}, - {"Cscr;", '\U0001D49E'}, - {"Cup;", '\U000022D3'}, - {"CupCap;", '\U0000224D'}, - {"DD;", '\U00002145'}, - {"DDotrahd;", '\U00002911'}, - {"DJcy;", '\U00000402'}, - {"DScy;", '\U00000405'}, - {"DZcy;", '\U0000040F'}, - {"Dagger;", '\U00002021'}, - {"Darr;", '\U000021A1'}, - {"Dashv;", '\U00002AE4'}, - {"Dcaron;", '\U0000010E'}, - {"Dcy;", '\U00000414'}, - {"Del;", '\U00002207'}, - {"Delta;", '\U00000394'}, - {"Dfr;", '\U0001D507'}, - {"DiacriticalAcute;", '\U000000B4'}, - {"DiacriticalDot;", '\U000002D9'}, - {"DiacriticalDoubleAcute;", '\U000002DD'}, - {"DiacriticalGrave;", '\U00000060'}, - {"DiacriticalTilde;", '\U000002DC'}, - {"Diamond;", '\U000022C4'}, - {"DifferentialD;", '\U00002146'}, - {"Dopf;", '\U0001D53B'}, - {"Dot;", '\U000000A8'}, - {"DotDot;", '\U000020DC'}, - {"DotEqual;", '\U00002250'}, - {"DoubleContourIntegral;", '\U0000222F'}, - {"DoubleDot;", '\U000000A8'}, - {"DoubleDownArrow;", '\U000021D3'}, - {"DoubleLeftArrow;", '\U000021D0'}, - {"DoubleLeftRightArrow;", '\U000021D4'}, - {"DoubleLeftTee;", '\U00002AE4'}, - {"DoubleLongLeftArrow;", '\U000027F8'}, - {"DoubleLongLeftRightArrow;", '\U000027FA'}, - {"DoubleLongRightArrow;", '\U000027F9'}, - {"DoubleRightArrow;", '\U000021D2'}, - {"DoubleRightTee;", '\U000022A8'}, - {"DoubleUpArrow;", '\U000021D1'}, - {"DoubleUpDownArrow;", '\U000021D5'}, - {"DoubleVerticalBar;", '\U00002225'}, - {"DownArrow;", '\U00002193'}, - {"DownArrowBar;", '\U00002913'}, - {"DownArrowUpArrow;", '\U000021F5'}, - {"DownBreve;", '\U00000311'}, - {"DownLeftRightVector;", '\U00002950'}, - {"DownLeftTeeVector;", '\U0000295E'}, - {"DownLeftVector;", '\U000021BD'}, - {"DownLeftVectorBar;", '\U00002956'}, - {"DownRightTeeVector;", '\U0000295F'}, - {"DownRightVector;", '\U000021C1'}, - {"DownRightVectorBar;", '\U00002957'}, - {"DownTee;", '\U000022A4'}, - {"DownTeeArrow;", '\U000021A7'}, - {"Downarrow;", '\U000021D3'}, - {"Dscr;", '\U0001D49F'}, - {"Dstrok;", '\U00000110'}, - {"ENG;", '\U0000014A'}, - {"ETH;", '\U000000D0'}, - {"Eacute;", '\U000000C9'}, - {"Ecaron;", '\U0000011A'}, - {"Ecirc;", '\U000000CA'}, - {"Ecy;", '\U0000042D'}, - {"Edot;", '\U00000116'}, - {"Efr;", '\U0001D508'}, - {"Egrave;", '\U000000C8'}, - {"Element;", '\U00002208'}, - {"Emacr;", '\U00000112'}, - {"EmptySmallSquare;", '\U000025FB'}, - {"EmptyVerySmallSquare;", '\U000025AB'}, - {"Eogon;", '\U00000118'}, - {"Eopf;", '\U0001D53C'}, - {"Epsilon;", '\U00000395'}, - {"Equal;", '\U00002A75'}, - {"EqualTilde;", '\U00002242'}, - {"Equilibrium;", '\U000021CC'}, - {"Escr;", '\U00002130'}, - {"Esim;", '\U00002A73'}, - {"Eta;", '\U00000397'}, - {"Euml;", '\U000000CB'}, - {"Exists;", '\U00002203'}, - {"ExponentialE;", '\U00002147'}, - {"Fcy;", '\U00000424'}, - {"Ffr;", '\U0001D509'}, - {"FilledSmallSquare;", '\U000025FC'}, - {"FilledVerySmallSquare;", '\U000025AA'}, - {"Fopf;", '\U0001D53D'}, - {"ForAll;", '\U00002200'}, - {"Fouriertrf;", '\U00002131'}, - {"Fscr;", '\U00002131'}, - {"GJcy;", '\U00000403'}, - {"GT;", '\U0000003E'}, - {"Gamma;", '\U00000393'}, - {"Gammad;", '\U000003DC'}, - {"Gbreve;", '\U0000011E'}, - {"Gcedil;", '\U00000122'}, - {"Gcirc;", '\U0000011C'}, - {"Gcy;", '\U00000413'}, - {"Gdot;", '\U00000120'}, - {"Gfr;", '\U0001D50A'}, - {"Gg;", '\U000022D9'}, - {"Gopf;", '\U0001D53E'}, - {"GreaterEqual;", '\U00002265'}, - {"GreaterEqualLess;", '\U000022DB'}, - {"GreaterFullEqual;", '\U00002267'}, - {"GreaterGreater;", '\U00002AA2'}, - {"GreaterLess;", '\U00002277'}, - {"GreaterSlantEqual;", '\U00002A7E'}, - {"GreaterTilde;", '\U00002273'}, - {"Gscr;", '\U0001D4A2'}, - {"Gt;", '\U0000226B'}, - {"HARDcy;", '\U0000042A'}, - {"Hacek;", '\U000002C7'}, - {"Hat;", '\U0000005E'}, - {"Hcirc;", '\U00000124'}, - {"Hfr;", '\U0000210C'}, - {"HilbertSpace;", '\U0000210B'}, - {"Hopf;", '\U0000210D'}, - {"HorizontalLine;", '\U00002500'}, - {"Hscr;", '\U0000210B'}, - {"Hstrok;", '\U00000126'}, - {"HumpDownHump;", '\U0000224E'}, - {"HumpEqual;", '\U0000224F'}, - {"IEcy;", '\U00000415'}, - {"IJlig;", '\U00000132'}, - {"IOcy;", '\U00000401'}, - {"Iacute;", '\U000000CD'}, - {"Icirc;", '\U000000CE'}, - {"Icy;", '\U00000418'}, - {"Idot;", '\U00000130'}, - {"Ifr;", '\U00002111'}, - {"Igrave;", '\U000000CC'}, - {"Im;", '\U00002111'}, - {"Imacr;", '\U0000012A'}, - {"ImaginaryI;", '\U00002148'}, - {"Implies;", '\U000021D2'}, - {"Int;", '\U0000222C'}, - {"Integral;", '\U0000222B'}, - {"Intersection;", '\U000022C2'}, - {"InvisibleComma;", '\U00002063'}, - {"InvisibleTimes;", '\U00002062'}, - {"Iogon;", '\U0000012E'}, - {"Iopf;", '\U0001D540'}, - {"Iota;", '\U00000399'}, - {"Iscr;", '\U00002110'}, - {"Itilde;", '\U00000128'}, - {"Iukcy;", '\U00000406'}, - {"Iuml;", '\U000000CF'}, - {"Jcirc;", '\U00000134'}, - {"Jcy;", '\U00000419'}, - {"Jfr;", '\U0001D50D'}, - {"Jopf;", '\U0001D541'}, - {"Jscr;", '\U0001D4A5'}, - {"Jsercy;", '\U00000408'}, - {"Jukcy;", '\U00000404'}, - {"KHcy;", '\U00000425'}, - {"KJcy;", '\U0000040C'}, - {"Kappa;", '\U0000039A'}, - {"Kcedil;", '\U00000136'}, - {"Kcy;", '\U0000041A'}, - {"Kfr;", '\U0001D50E'}, - {"Kopf;", '\U0001D542'}, - {"Kscr;", '\U0001D4A6'}, - {"LJcy;", '\U00000409'}, - {"LT;", '\U0000003C'}, - {"Lacute;", '\U00000139'}, - {"Lambda;", '\U0000039B'}, - {"Lang;", '\U000027EA'}, - {"Laplacetrf;", '\U00002112'}, - {"Larr;", '\U0000219E'}, - {"Lcaron;", '\U0000013D'}, - {"Lcedil;", '\U0000013B'}, - {"Lcy;", '\U0000041B'}, - {"LeftAngleBracket;", '\U000027E8'}, - {"LeftArrow;", '\U00002190'}, - {"LeftArrowBar;", '\U000021E4'}, - {"LeftArrowRightArrow;", '\U000021C6'}, - {"LeftCeiling;", '\U00002308'}, - {"LeftDoubleBracket;", '\U000027E6'}, - {"LeftDownTeeVector;", '\U00002961'}, - {"LeftDownVector;", '\U000021C3'}, - {"LeftDownVectorBar;", '\U00002959'}, - {"LeftFloor;", '\U0000230A'}, - {"LeftRightArrow;", '\U00002194'}, - {"LeftRightVector;", '\U0000294E'}, - {"LeftTee;", '\U000022A3'}, - {"LeftTeeArrow;", '\U000021A4'}, - {"LeftTeeVector;", '\U0000295A'}, - {"LeftTriangle;", '\U000022B2'}, - {"LeftTriangleBar;", '\U000029CF'}, - {"LeftTriangleEqual;", '\U000022B4'}, - {"LeftUpDownVector;", '\U00002951'}, - {"LeftUpTeeVector;", '\U00002960'}, - {"LeftUpVector;", '\U000021BF'}, - {"LeftUpVectorBar;", '\U00002958'}, - {"LeftVector;", '\U000021BC'}, - {"LeftVectorBar;", '\U00002952'}, - {"Leftarrow;", '\U000021D0'}, - {"Leftrightarrow;", '\U000021D4'}, - {"LessEqualGreater;", '\U000022DA'}, - {"LessFullEqual;", '\U00002266'}, - {"LessGreater;", '\U00002276'}, - {"LessLess;", '\U00002AA1'}, - {"LessSlantEqual;", '\U00002A7D'}, - {"LessTilde;", '\U00002272'}, - {"Lfr;", '\U0001D50F'}, - {"Ll;", '\U000022D8'}, - {"Lleftarrow;", '\U000021DA'}, - {"Lmidot;", '\U0000013F'}, - {"LongLeftArrow;", '\U000027F5'}, - {"LongLeftRightArrow;", '\U000027F7'}, - {"LongRightArrow;", '\U000027F6'}, - {"Longleftarrow;", '\U000027F8'}, - {"Longleftrightarrow;", '\U000027FA'}, - {"Longrightarrow;", '\U000027F9'}, - {"Lopf;", '\U0001D543'}, - {"LowerLeftArrow;", '\U00002199'}, - {"LowerRightArrow;", '\U00002198'}, - {"Lscr;", '\U00002112'}, - {"Lsh;", '\U000021B0'}, - {"Lstrok;", '\U00000141'}, - {"Lt;", '\U0000226A'}, - {"Map;", '\U00002905'}, - {"Mcy;", '\U0000041C'}, - {"MediumSpace;", '\U0000205F'}, - {"Mellintrf;", '\U00002133'}, - {"Mfr;", '\U0001D510'}, - {"MinusPlus;", '\U00002213'}, - {"Mopf;", '\U0001D544'}, - {"Mscr;", '\U00002133'}, - {"Mu;", '\U0000039C'}, - {"NJcy;", '\U0000040A'}, - {"Nacute;", '\U00000143'}, - {"Ncaron;", '\U00000147'}, - {"Ncedil;", '\U00000145'}, - {"Ncy;", '\U0000041D'}, - {"NegativeMediumSpace;", '\U0000200B'}, - {"NegativeThickSpace;", '\U0000200B'}, - {"NegativeThinSpace;", '\U0000200B'}, - {"NegativeVeryThinSpace;", '\U0000200B'}, - {"NestedGreaterGreater;", '\U0000226B'}, - {"NestedLessLess;", '\U0000226A'}, - {"NewLine;", '\U0000000A'}, - {"Nfr;", '\U0001D511'}, - {"NoBreak;", '\U00002060'}, - {"NonBreakingSpace;", '\U000000A0'}, - {"Nopf;", '\U00002115'}, - {"Not;", '\U00002AEC'}, - {"NotCongruent;", '\U00002262'}, - {"NotCupCap;", '\U0000226D'}, - {"NotDoubleVerticalBar;", '\U00002226'}, - {"NotElement;", '\U00002209'}, - {"NotEqual;", '\U00002260'}, - {"NotExists;", '\U00002204'}, - {"NotGreater;", '\U0000226F'}, - {"NotGreaterEqual;", '\U00002271'}, - {"NotGreaterLess;", '\U00002279'}, - {"NotGreaterTilde;", '\U00002275'}, - {"NotLeftTriangle;", '\U000022EA'}, - {"NotLeftTriangleEqual;", '\U000022EC'}, - {"NotLess;", '\U0000226E'}, - {"NotLessEqual;", '\U00002270'}, - {"NotLessGreater;", '\U00002278'}, - {"NotLessTilde;", '\U00002274'}, - {"NotPrecedes;", '\U00002280'}, - {"NotPrecedesSlantEqual;", '\U000022E0'}, - {"NotReverseElement;", '\U0000220C'}, - {"NotRightTriangle;", '\U000022EB'}, - {"NotRightTriangleEqual;", '\U000022ED'}, - {"NotSquareSubsetEqual;", '\U000022E2'}, - {"NotSquareSupersetEqual;", '\U000022E3'}, - {"NotSubsetEqual;", '\U00002288'}, - {"NotSucceeds;", '\U00002281'}, - {"NotSucceedsSlantEqual;", '\U000022E1'}, - {"NotSupersetEqual;", '\U00002289'}, - {"NotTilde;", '\U00002241'}, - {"NotTildeEqual;", '\U00002244'}, - {"NotTildeFullEqual;", '\U00002247'}, - {"NotTildeTilde;", '\U00002249'}, - {"NotVerticalBar;", '\U00002224'}, - {"Nscr;", '\U0001D4A9'}, - {"Ntilde;", '\U000000D1'}, - {"Nu;", '\U0000039D'}, - {"OElig;", '\U00000152'}, - {"Oacute;", '\U000000D3'}, - {"Ocirc;", '\U000000D4'}, - {"Ocy;", '\U0000041E'}, - {"Odblac;", '\U00000150'}, - {"Ofr;", '\U0001D512'}, - {"Ograve;", '\U000000D2'}, - {"Omacr;", '\U0000014C'}, - {"Omega;", '\U000003A9'}, - {"Omicron;", '\U0000039F'}, - {"Oopf;", '\U0001D546'}, - {"OpenCurlyDoubleQuote;", '\U0000201C'}, - {"OpenCurlyQuote;", '\U00002018'}, - {"Or;", '\U00002A54'}, - {"Oscr;", '\U0001D4AA'}, - {"Oslash;", '\U000000D8'}, - {"Otilde;", '\U000000D5'}, - {"Otimes;", '\U00002A37'}, - {"Ouml;", '\U000000D6'}, - {"OverBar;", '\U0000203E'}, - {"OverBrace;", '\U000023DE'}, - {"OverBracket;", '\U000023B4'}, - {"OverParenthesis;", '\U000023DC'}, - {"PartialD;", '\U00002202'}, - {"Pcy;", '\U0000041F'}, - {"Pfr;", '\U0001D513'}, - {"Phi;", '\U000003A6'}, - {"Pi;", '\U000003A0'}, - {"PlusMinus;", '\U000000B1'}, - {"Poincareplane;", '\U0000210C'}, - {"Popf;", '\U00002119'}, - {"Pr;", '\U00002ABB'}, - {"Precedes;", '\U0000227A'}, - {"PrecedesEqual;", '\U00002AAF'}, - {"PrecedesSlantEqual;", '\U0000227C'}, - {"PrecedesTilde;", '\U0000227E'}, - {"Prime;", '\U00002033'}, - {"Product;", '\U0000220F'}, - {"Proportion;", '\U00002237'}, - {"Proportional;", '\U0000221D'}, - {"Pscr;", '\U0001D4AB'}, - {"Psi;", '\U000003A8'}, - {"QUOT;", '\U00000022'}, - {"Qfr;", '\U0001D514'}, - {"Qopf;", '\U0000211A'}, - {"Qscr;", '\U0001D4AC'}, - {"RBarr;", '\U00002910'}, - {"REG;", '\U000000AE'}, - {"Racute;", '\U00000154'}, - {"Rang;", '\U000027EB'}, - {"Rarr;", '\U000021A0'}, - {"Rarrtl;", '\U00002916'}, - {"Rcaron;", '\U00000158'}, - {"Rcedil;", '\U00000156'}, - {"Rcy;", '\U00000420'}, - {"Re;", '\U0000211C'}, - {"ReverseElement;", '\U0000220B'}, - {"ReverseEquilibrium;", '\U000021CB'}, - {"ReverseUpEquilibrium;", '\U0000296F'}, - {"Rfr;", '\U0000211C'}, - {"Rho;", '\U000003A1'}, - {"RightAngleBracket;", '\U000027E9'}, - {"RightArrow;", '\U00002192'}, - {"RightArrowBar;", '\U000021E5'}, - {"RightArrowLeftArrow;", '\U000021C4'}, - {"RightCeiling;", '\U00002309'}, - {"RightDoubleBracket;", '\U000027E7'}, - {"RightDownTeeVector;", '\U0000295D'}, - {"RightDownVector;", '\U000021C2'}, - {"RightDownVectorBar;", '\U00002955'}, - {"RightFloor;", '\U0000230B'}, - {"RightTee;", '\U000022A2'}, - {"RightTeeArrow;", '\U000021A6'}, - {"RightTeeVector;", '\U0000295B'}, - {"RightTriangle;", '\U000022B3'}, - {"RightTriangleBar;", '\U000029D0'}, - {"RightTriangleEqual;", '\U000022B5'}, - {"RightUpDownVector;", '\U0000294F'}, - {"RightUpTeeVector;", '\U0000295C'}, - {"RightUpVector;", '\U000021BE'}, - {"RightUpVectorBar;", '\U00002954'}, - {"RightVector;", '\U000021C0'}, - {"RightVectorBar;", '\U00002953'}, - {"Rightarrow;", '\U000021D2'}, - {"Ropf;", '\U0000211D'}, - {"RoundImplies;", '\U00002970'}, - {"Rrightarrow;", '\U000021DB'}, - {"Rscr;", '\U0000211B'}, - {"Rsh;", '\U000021B1'}, - {"RuleDelayed;", '\U000029F4'}, - {"SHCHcy;", '\U00000429'}, - {"SHcy;", '\U00000428'}, - {"SOFTcy;", '\U0000042C'}, - {"Sacute;", '\U0000015A'}, - {"Sc;", '\U00002ABC'}, - {"Scaron;", '\U00000160'}, - {"Scedil;", '\U0000015E'}, - {"Scirc;", '\U0000015C'}, - {"Scy;", '\U00000421'}, - {"Sfr;", '\U0001D516'}, - {"ShortDownArrow;", '\U00002193'}, - {"ShortLeftArrow;", '\U00002190'}, - {"ShortRightArrow;", '\U00002192'}, - {"ShortUpArrow;", '\U00002191'}, - {"Sigma;", '\U000003A3'}, - {"SmallCircle;", '\U00002218'}, - {"Sopf;", '\U0001D54A'}, - {"Sqrt;", '\U0000221A'}, - {"Square;", '\U000025A1'}, - {"SquareIntersection;", '\U00002293'}, - {"SquareSubset;", '\U0000228F'}, - {"SquareSubsetEqual;", '\U00002291'}, - {"SquareSuperset;", '\U00002290'}, - {"SquareSupersetEqual;", '\U00002292'}, - {"SquareUnion;", '\U00002294'}, - {"Sscr;", '\U0001D4AE'}, - {"Star;", '\U000022C6'}, - {"Sub;", '\U000022D0'}, - {"Subset;", '\U000022D0'}, - {"SubsetEqual;", '\U00002286'}, - {"Succeeds;", '\U0000227B'}, - {"SucceedsEqual;", '\U00002AB0'}, - {"SucceedsSlantEqual;", '\U0000227D'}, - {"SucceedsTilde;", '\U0000227F'}, - {"SuchThat;", '\U0000220B'}, - {"Sum;", '\U00002211'}, - {"Sup;", '\U000022D1'}, - {"Superset;", '\U00002283'}, - {"SupersetEqual;", '\U00002287'}, - {"Supset;", '\U000022D1'}, - {"THORN;", '\U000000DE'}, - {"TRADE;", '\U00002122'}, - {"TSHcy;", '\U0000040B'}, - {"TScy;", '\U00000426'}, - {"Tab;", '\U00000009'}, - {"Tau;", '\U000003A4'}, - {"Tcaron;", '\U00000164'}, - {"Tcedil;", '\U00000162'}, - {"Tcy;", '\U00000422'}, - {"Tfr;", '\U0001D517'}, - {"Therefore;", '\U00002234'}, - {"Theta;", '\U00000398'}, - {"ThinSpace;", '\U00002009'}, - {"Tilde;", '\U0000223C'}, - {"TildeEqual;", '\U00002243'}, - {"TildeFullEqual;", '\U00002245'}, - {"TildeTilde;", '\U00002248'}, - {"Topf;", '\U0001D54B'}, - {"TripleDot;", '\U000020DB'}, - {"Tscr;", '\U0001D4AF'}, - {"Tstrok;", '\U00000166'}, - {"Uacute;", '\U000000DA'}, - {"Uarr;", '\U0000219F'}, - {"Uarrocir;", '\U00002949'}, - {"Ubrcy;", '\U0000040E'}, - {"Ubreve;", '\U0000016C'}, - {"Ucirc;", '\U000000DB'}, - {"Ucy;", '\U00000423'}, - {"Udblac;", '\U00000170'}, - {"Ufr;", '\U0001D518'}, - {"Ugrave;", '\U000000D9'}, - {"Umacr;", '\U0000016A'}, - {"UnderBar;", '\U0000005F'}, - {"UnderBrace;", '\U000023DF'}, - {"UnderBracket;", '\U000023B5'}, - {"UnderParenthesis;", '\U000023DD'}, - {"Union;", '\U000022C3'}, - {"UnionPlus;", '\U0000228E'}, - {"Uogon;", '\U00000172'}, - {"Uopf;", '\U0001D54C'}, - {"UpArrow;", '\U00002191'}, - {"UpArrowBar;", '\U00002912'}, - {"UpArrowDownArrow;", '\U000021C5'}, - {"UpDownArrow;", '\U00002195'}, - {"UpEquilibrium;", '\U0000296E'}, - {"UpTee;", '\U000022A5'}, - {"UpTeeArrow;", '\U000021A5'}, - {"Uparrow;", '\U000021D1'}, - {"Updownarrow;", '\U000021D5'}, - {"UpperLeftArrow;", '\U00002196'}, - {"UpperRightArrow;", '\U00002197'}, - {"Upsi;", '\U000003D2'}, - {"Upsilon;", '\U000003A5'}, - {"Uring;", '\U0000016E'}, - {"Uscr;", '\U0001D4B0'}, - {"Utilde;", '\U00000168'}, - {"Uuml;", '\U000000DC'}, - {"VDash;", '\U000022AB'}, - {"Vbar;", '\U00002AEB'}, - {"Vcy;", '\U00000412'}, - {"Vdash;", '\U000022A9'}, - {"Vdashl;", '\U00002AE6'}, - {"Vee;", '\U000022C1'}, - {"Verbar;", '\U00002016'}, - {"Vert;", '\U00002016'}, - {"VerticalBar;", '\U00002223'}, - {"VerticalLine;", '\U0000007C'}, - {"VerticalSeparator;", '\U00002758'}, - {"VerticalTilde;", '\U00002240'}, - {"VeryThinSpace;", '\U0000200A'}, - {"Vfr;", '\U0001D519'}, - {"Vopf;", '\U0001D54D'}, - {"Vscr;", '\U0001D4B1'}, - {"Vvdash;", '\U000022AA'}, - {"Wcirc;", '\U00000174'}, - {"Wedge;", '\U000022C0'}, - {"Wfr;", '\U0001D51A'}, - {"Wopf;", '\U0001D54E'}, - {"Wscr;", '\U0001D4B2'}, - {"Xfr;", '\U0001D51B'}, - {"Xi;", '\U0000039E'}, - {"Xopf;", '\U0001D54F'}, - {"Xscr;", '\U0001D4B3'}, - {"YAcy;", '\U0000042F'}, - {"YIcy;", '\U00000407'}, - {"YUcy;", '\U0000042E'}, - {"Yacute;", '\U000000DD'}, - {"Ycirc;", '\U00000176'}, - {"Ycy;", '\U0000042B'}, - {"Yfr;", '\U0001D51C'}, - {"Yopf;", '\U0001D550'}, - {"Yscr;", '\U0001D4B4'}, - {"Yuml;", '\U00000178'}, - {"ZHcy;", '\U00000416'}, - {"Zacute;", '\U00000179'}, - {"Zcaron;", '\U0000017D'}, - {"Zcy;", '\U00000417'}, - {"Zdot;", '\U0000017B'}, - {"ZeroWidthSpace;", '\U0000200B'}, - {"Zeta;", '\U00000396'}, - {"Zfr;", '\U00002128'}, - {"Zopf;", '\U00002124'}, - {"Zscr;", '\U0001D4B5'}, - {"aacute;", '\U000000E1'}, - {"abreve;", '\U00000103'}, - {"ac;", '\U0000223E'}, - {"acd;", '\U0000223F'}, - {"acirc;", '\U000000E2'}, - {"acute;", '\U000000B4'}, - {"acy;", '\U00000430'}, - {"aelig;", '\U000000E6'}, - {"af;", '\U00002061'}, - {"afr;", '\U0001D51E'}, - {"agrave;", '\U000000E0'}, - {"alefsym;", '\U00002135'}, - {"aleph;", '\U00002135'}, - {"alpha;", '\U000003B1'}, - {"amacr;", '\U00000101'}, - {"amalg;", '\U00002A3F'}, - {"amp;", '\U00000026'}, - {"and;", '\U00002227'}, - {"andand;", '\U00002A55'}, - {"andd;", '\U00002A5C'}, - {"andslope;", '\U00002A58'}, - {"andv;", '\U00002A5A'}, - {"ang;", '\U00002220'}, - {"ange;", '\U000029A4'}, - {"angle;", '\U00002220'}, - {"angmsd;", '\U00002221'}, - {"angmsdaa;", '\U000029A8'}, - {"angmsdab;", '\U000029A9'}, - {"angmsdac;", '\U000029AA'}, - {"angmsdad;", '\U000029AB'}, - {"angmsdae;", '\U000029AC'}, - {"angmsdaf;", '\U000029AD'}, - {"angmsdag;", '\U000029AE'}, - {"angmsdah;", '\U000029AF'}, - {"angrt;", '\U0000221F'}, - {"angrtvb;", '\U000022BE'}, - {"angrtvbd;", '\U0000299D'}, - {"angsph;", '\U00002222'}, - {"angst;", '\U000000C5'}, - {"angzarr;", '\U0000237C'}, - {"aogon;", '\U00000105'}, - {"aopf;", '\U0001D552'}, - {"ap;", '\U00002248'}, - {"apE;", '\U00002A70'}, - {"apacir;", '\U00002A6F'}, - {"ape;", '\U0000224A'}, - {"apid;", '\U0000224B'}, - {"apos;", '\U00000027'}, - {"approx;", '\U00002248'}, - {"approxeq;", '\U0000224A'}, - {"aring;", '\U000000E5'}, - {"ascr;", '\U0001D4B6'}, - {"ast;", '\U0000002A'}, - {"asymp;", '\U00002248'}, - {"asympeq;", '\U0000224D'}, - {"atilde;", '\U000000E3'}, - {"auml;", '\U000000E4'}, - {"awconint;", '\U00002233'}, - {"awint;", '\U00002A11'}, - {"bNot;", '\U00002AED'}, - {"backcong;", '\U0000224C'}, - {"backepsilon;", '\U000003F6'}, - {"backprime;", '\U00002035'}, - {"backsim;", '\U0000223D'}, - {"backsimeq;", '\U000022CD'}, - {"barvee;", '\U000022BD'}, - {"barwed;", '\U00002305'}, - {"barwedge;", '\U00002305'}, - {"bbrk;", '\U000023B5'}, - {"bbrktbrk;", '\U000023B6'}, - {"bcong;", '\U0000224C'}, - {"bcy;", '\U00000431'}, - {"bdquo;", '\U0000201E'}, - {"becaus;", '\U00002235'}, - {"because;", '\U00002235'}, - {"bemptyv;", '\U000029B0'}, - {"bepsi;", '\U000003F6'}, - {"bernou;", '\U0000212C'}, - {"beta;", '\U000003B2'}, - {"beth;", '\U00002136'}, - {"between;", '\U0000226C'}, - {"bfr;", '\U0001D51F'}, - {"bigcap;", '\U000022C2'}, - {"bigcirc;", '\U000025EF'}, - {"bigcup;", '\U000022C3'}, - {"bigodot;", '\U00002A00'}, - {"bigoplus;", '\U00002A01'}, - {"bigotimes;", '\U00002A02'}, - {"bigsqcup;", '\U00002A06'}, - {"bigstar;", '\U00002605'}, - {"bigtriangledown;", '\U000025BD'}, - {"bigtriangleup;", '\U000025B3'}, - {"biguplus;", '\U00002A04'}, - {"bigvee;", '\U000022C1'}, - {"bigwedge;", '\U000022C0'}, - {"bkarow;", '\U0000290D'}, - {"blacklozenge;", '\U000029EB'}, - {"blacksquare;", '\U000025AA'}, - {"blacktriangle;", '\U000025B4'}, - {"blacktriangledown;", '\U000025BE'}, - {"blacktriangleleft;", '\U000025C2'}, - {"blacktriangleright;", '\U000025B8'}, - {"blank;", '\U00002423'}, - {"blk12;", '\U00002592'}, - {"blk14;", '\U00002591'}, - {"blk34;", '\U00002593'}, - {"block;", '\U00002588'}, - {"bnot;", '\U00002310'}, - {"bopf;", '\U0001D553'}, - {"bot;", '\U000022A5'}, - {"bottom;", '\U000022A5'}, - {"bowtie;", '\U000022C8'}, - {"boxDL;", '\U00002557'}, - {"boxDR;", '\U00002554'}, - {"boxDl;", '\U00002556'}, - {"boxDr;", '\U00002553'}, - {"boxH;", '\U00002550'}, - {"boxHD;", '\U00002566'}, - {"boxHU;", '\U00002569'}, - {"boxHd;", '\U00002564'}, - {"boxHu;", '\U00002567'}, - {"boxUL;", '\U0000255D'}, - {"boxUR;", '\U0000255A'}, - {"boxUl;", '\U0000255C'}, - {"boxUr;", '\U00002559'}, - {"boxV;", '\U00002551'}, - {"boxVH;", '\U0000256C'}, - {"boxVL;", '\U00002563'}, - {"boxVR;", '\U00002560'}, - {"boxVh;", '\U0000256B'}, - {"boxVl;", '\U00002562'}, - {"boxVr;", '\U0000255F'}, - {"boxbox;", '\U000029C9'}, - {"boxdL;", '\U00002555'}, - {"boxdR;", '\U00002552'}, - {"boxdl;", '\U00002510'}, - {"boxdr;", '\U0000250C'}, - {"boxh;", '\U00002500'}, - {"boxhD;", '\U00002565'}, - {"boxhU;", '\U00002568'}, - {"boxhd;", '\U0000252C'}, - {"boxhu;", '\U00002534'}, - {"boxminus;", '\U0000229F'}, - {"boxplus;", '\U0000229E'}, - {"boxtimes;", '\U000022A0'}, - {"boxuL;", '\U0000255B'}, - {"boxuR;", '\U00002558'}, - {"boxul;", '\U00002518'}, - {"boxur;", '\U00002514'}, - {"boxv;", '\U00002502'}, - {"boxvH;", '\U0000256A'}, - {"boxvL;", '\U00002561'}, - {"boxvR;", '\U0000255E'}, - {"boxvh;", '\U0000253C'}, - {"boxvl;", '\U00002524'}, - {"boxvr;", '\U0000251C'}, - {"bprime;", '\U00002035'}, - {"breve;", '\U000002D8'}, - {"brvbar;", '\U000000A6'}, - {"bscr;", '\U0001D4B7'}, - {"bsemi;", '\U0000204F'}, - {"bsim;", '\U0000223D'}, - {"bsime;", '\U000022CD'}, - {"bsol;", '\U0000005C'}, - {"bsolb;", '\U000029C5'}, - {"bsolhsub;", '\U000027C8'}, - {"bull;", '\U00002022'}, - {"bullet;", '\U00002022'}, - {"bump;", '\U0000224E'}, - {"bumpE;", '\U00002AAE'}, - {"bumpe;", '\U0000224F'}, - {"bumpeq;", '\U0000224F'}, - {"cacute;", '\U00000107'}, - {"cap;", '\U00002229'}, - {"capand;", '\U00002A44'}, - {"capbrcup;", '\U00002A49'}, - {"capcap;", '\U00002A4B'}, - {"capcup;", '\U00002A47'}, - {"capdot;", '\U00002A40'}, - {"caret;", '\U00002041'}, - {"caron;", '\U000002C7'}, - {"ccaps;", '\U00002A4D'}, - {"ccaron;", '\U0000010D'}, - {"ccedil;", '\U000000E7'}, - {"ccirc;", '\U00000109'}, - {"ccups;", '\U00002A4C'}, - {"ccupssm;", '\U00002A50'}, - {"cdot;", '\U0000010B'}, - {"cedil;", '\U000000B8'}, - {"cemptyv;", '\U000029B2'}, - {"cent;", '\U000000A2'}, - {"centerdot;", '\U000000B7'}, - {"cfr;", '\U0001D520'}, - {"chcy;", '\U00000447'}, - {"check;", '\U00002713'}, - {"checkmark;", '\U00002713'}, - {"chi;", '\U000003C7'}, - {"cir;", '\U000025CB'}, - {"cirE;", '\U000029C3'}, - {"circ;", '\U000002C6'}, - {"circeq;", '\U00002257'}, - {"circlearrowleft;", '\U000021BA'}, - {"circlearrowright;", '\U000021BB'}, - {"circledR;", '\U000000AE'}, - {"circledS;", '\U000024C8'}, - {"circledast;", '\U0000229B'}, - {"circledcirc;", '\U0000229A'}, - {"circleddash;", '\U0000229D'}, - {"cire;", '\U00002257'}, - {"cirfnint;", '\U00002A10'}, - {"cirmid;", '\U00002AEF'}, - {"cirscir;", '\U000029C2'}, - {"clubs;", '\U00002663'}, - {"clubsuit;", '\U00002663'}, - {"colon;", '\U0000003A'}, - {"colone;", '\U00002254'}, - {"coloneq;", '\U00002254'}, - {"comma;", '\U0000002C'}, - {"commat;", '\U00000040'}, - {"comp;", '\U00002201'}, - {"compfn;", '\U00002218'}, - {"complement;", '\U00002201'}, - {"complexes;", '\U00002102'}, - {"cong;", '\U00002245'}, - {"congdot;", '\U00002A6D'}, - {"conint;", '\U0000222E'}, - {"copf;", '\U0001D554'}, - {"coprod;", '\U00002210'}, - {"copy;", '\U000000A9'}, - {"copysr;", '\U00002117'}, - {"crarr;", '\U000021B5'}, - {"cross;", '\U00002717'}, - {"cscr;", '\U0001D4B8'}, - {"csub;", '\U00002ACF'}, - {"csube;", '\U00002AD1'}, - {"csup;", '\U00002AD0'}, - {"csupe;", '\U00002AD2'}, - {"ctdot;", '\U000022EF'}, - {"cudarrl;", '\U00002938'}, - {"cudarrr;", '\U00002935'}, - {"cuepr;", '\U000022DE'}, - {"cuesc;", '\U000022DF'}, - {"cularr;", '\U000021B6'}, - {"cularrp;", '\U0000293D'}, - {"cup;", '\U0000222A'}, - {"cupbrcap;", '\U00002A48'}, - {"cupcap;", '\U00002A46'}, - {"cupcup;", '\U00002A4A'}, - {"cupdot;", '\U0000228D'}, - {"cupor;", '\U00002A45'}, - {"curarr;", '\U000021B7'}, - {"curarrm;", '\U0000293C'}, - {"curlyeqprec;", '\U000022DE'}, - {"curlyeqsucc;", '\U000022DF'}, - {"curlyvee;", '\U000022CE'}, - {"curlywedge;", '\U000022CF'}, - {"curren;", '\U000000A4'}, - {"curvearrowleft;", '\U000021B6'}, - {"curvearrowright;", '\U000021B7'}, - {"cuvee;", '\U000022CE'}, - {"cuwed;", '\U000022CF'}, - {"cwconint;", '\U00002232'}, - {"cwint;", '\U00002231'}, - {"cylcty;", '\U0000232D'}, - {"dArr;", '\U000021D3'}, - {"dHar;", '\U00002965'}, - {"dagger;", '\U00002020'}, - {"daleth;", '\U00002138'}, - {"darr;", '\U00002193'}, - {"dash;", '\U00002010'}, - {"dashv;", '\U000022A3'}, - {"dbkarow;", '\U0000290F'}, - {"dblac;", '\U000002DD'}, - {"dcaron;", '\U0000010F'}, - {"dcy;", '\U00000434'}, - {"dd;", '\U00002146'}, - {"ddagger;", '\U00002021'}, - {"ddarr;", '\U000021CA'}, - {"ddotseq;", '\U00002A77'}, - {"deg;", '\U000000B0'}, - {"delta;", '\U000003B4'}, - {"demptyv;", '\U000029B1'}, - {"dfisht;", '\U0000297F'}, - {"dfr;", '\U0001D521'}, - {"dharl;", '\U000021C3'}, - {"dharr;", '\U000021C2'}, - {"diam;", '\U000022C4'}, - {"diamond;", '\U000022C4'}, - {"diamondsuit;", '\U00002666'}, - {"diams;", '\U00002666'}, - {"die;", '\U000000A8'}, - {"digamma;", '\U000003DD'}, - {"disin;", '\U000022F2'}, - {"div;", '\U000000F7'}, - {"divide;", '\U000000F7'}, - {"divideontimes;", '\U000022C7'}, - {"divonx;", '\U000022C7'}, - {"djcy;", '\U00000452'}, - {"dlcorn;", '\U0000231E'}, - {"dlcrop;", '\U0000230D'}, - {"dollar;", '\U00000024'}, - {"dopf;", '\U0001D555'}, - {"dot;", '\U000002D9'}, - {"doteq;", '\U00002250'}, - {"doteqdot;", '\U00002251'}, - {"dotminus;", '\U00002238'}, - {"dotplus;", '\U00002214'}, - {"dotsquare;", '\U000022A1'}, - {"doublebarwedge;", '\U00002306'}, - {"downarrow;", '\U00002193'}, - {"downdownarrows;", '\U000021CA'}, - {"downharpoonleft;", '\U000021C3'}, - {"downharpoonright;", '\U000021C2'}, - {"drbkarow;", '\U00002910'}, - {"drcorn;", '\U0000231F'}, - {"drcrop;", '\U0000230C'}, - {"dscr;", '\U0001D4B9'}, - {"dscy;", '\U00000455'}, - {"dsol;", '\U000029F6'}, - {"dstrok;", '\U00000111'}, - {"dtdot;", '\U000022F1'}, - {"dtri;", '\U000025BF'}, - {"dtrif;", '\U000025BE'}, - {"duarr;", '\U000021F5'}, - {"duhar;", '\U0000296F'}, - {"dwangle;", '\U000029A6'}, - {"dzcy;", '\U0000045F'}, - {"dzigrarr;", '\U000027FF'}, - {"eDDot;", '\U00002A77'}, - {"eDot;", '\U00002251'}, - {"eacute;", '\U000000E9'}, - {"easter;", '\U00002A6E'}, - {"ecaron;", '\U0000011B'}, - {"ecir;", '\U00002256'}, - {"ecirc;", '\U000000EA'}, - {"ecolon;", '\U00002255'}, - {"ecy;", '\U0000044D'}, - {"edot;", '\U00000117'}, - {"ee;", '\U00002147'}, - {"efDot;", '\U00002252'}, - {"efr;", '\U0001D522'}, - {"eg;", '\U00002A9A'}, - {"egrave;", '\U000000E8'}, - {"egs;", '\U00002A96'}, - {"egsdot;", '\U00002A98'}, - {"el;", '\U00002A99'}, - {"elinters;", '\U000023E7'}, - {"ell;", '\U00002113'}, - {"els;", '\U00002A95'}, - {"elsdot;", '\U00002A97'}, - {"emacr;", '\U00000113'}, - {"empty;", '\U00002205'}, - {"emptyset;", '\U00002205'}, - {"emptyv;", '\U00002205'}, - {"emsp;", '\U00002003'}, - {"emsp13;", '\U00002004'}, - {"emsp14;", '\U00002005'}, - {"eng;", '\U0000014B'}, - {"ensp;", '\U00002002'}, - {"eogon;", '\U00000119'}, - {"eopf;", '\U0001D556'}, - {"epar;", '\U000022D5'}, - {"eparsl;", '\U000029E3'}, - {"eplus;", '\U00002A71'}, - {"epsi;", '\U000003B5'}, - {"epsilon;", '\U000003B5'}, - {"epsiv;", '\U000003F5'}, - {"eqcirc;", '\U00002256'}, - {"eqcolon;", '\U00002255'}, - {"eqsim;", '\U00002242'}, - {"eqslantgtr;", '\U00002A96'}, - {"eqslantless;", '\U00002A95'}, - {"equals;", '\U0000003D'}, - {"equest;", '\U0000225F'}, - {"equiv;", '\U00002261'}, - {"equivDD;", '\U00002A78'}, - {"eqvparsl;", '\U000029E5'}, - {"erDot;", '\U00002253'}, - {"erarr;", '\U00002971'}, - {"escr;", '\U0000212F'}, - {"esdot;", '\U00002250'}, - {"esim;", '\U00002242'}, - {"eta;", '\U000003B7'}, - {"eth;", '\U000000F0'}, - {"euml;", '\U000000EB'}, - {"euro;", '\U000020AC'}, - {"excl;", '\U00000021'}, - {"exist;", '\U00002203'}, - {"expectation;", '\U00002130'}, - {"exponentiale;", '\U00002147'}, - {"fallingdotseq;", '\U00002252'}, - {"fcy;", '\U00000444'}, - {"female;", '\U00002640'}, - {"ffilig;", '\U0000FB03'}, - {"fflig;", '\U0000FB00'}, - {"ffllig;", '\U0000FB04'}, - {"ffr;", '\U0001D523'}, - {"filig;", '\U0000FB01'}, - {"flat;", '\U0000266D'}, - {"fllig;", '\U0000FB02'}, - {"fltns;", '\U000025B1'}, - {"fnof;", '\U00000192'}, - {"fopf;", '\U0001D557'}, - {"forall;", '\U00002200'}, - {"fork;", '\U000022D4'}, - {"forkv;", '\U00002AD9'}, - {"fpartint;", '\U00002A0D'}, - {"frac12;", '\U000000BD'}, - {"frac13;", '\U00002153'}, - {"frac14;", '\U000000BC'}, - {"frac15;", '\U00002155'}, - {"frac16;", '\U00002159'}, - {"frac18;", '\U0000215B'}, - {"frac23;", '\U00002154'}, - {"frac25;", '\U00002156'}, - {"frac34;", '\U000000BE'}, - {"frac35;", '\U00002157'}, - {"frac38;", '\U0000215C'}, - {"frac45;", '\U00002158'}, - {"frac56;", '\U0000215A'}, - {"frac58;", '\U0000215D'}, - {"frac78;", '\U0000215E'}, - {"frasl;", '\U00002044'}, - {"frown;", '\U00002322'}, - {"fscr;", '\U0001D4BB'}, - {"gE;", '\U00002267'}, - {"gEl;", '\U00002A8C'}, - {"gacute;", '\U000001F5'}, - {"gamma;", '\U000003B3'}, - {"gammad;", '\U000003DD'}, - {"gap;", '\U00002A86'}, - {"gbreve;", '\U0000011F'}, - {"gcirc;", '\U0000011D'}, - {"gcy;", '\U00000433'}, - {"gdot;", '\U00000121'}, - {"ge;", '\U00002265'}, - {"gel;", '\U000022DB'}, - {"geq;", '\U00002265'}, - {"geqq;", '\U00002267'}, - {"geqslant;", '\U00002A7E'}, - {"ges;", '\U00002A7E'}, - {"gescc;", '\U00002AA9'}, - {"gesdot;", '\U00002A80'}, - {"gesdoto;", '\U00002A82'}, - {"gesdotol;", '\U00002A84'}, - {"gesles;", '\U00002A94'}, - {"gfr;", '\U0001D524'}, - {"gg;", '\U0000226B'}, - {"ggg;", '\U000022D9'}, - {"gimel;", '\U00002137'}, - {"gjcy;", '\U00000453'}, - {"gl;", '\U00002277'}, - {"glE;", '\U00002A92'}, - {"gla;", '\U00002AA5'}, - {"glj;", '\U00002AA4'}, - {"gnE;", '\U00002269'}, - {"gnap;", '\U00002A8A'}, - {"gnapprox;", '\U00002A8A'}, - {"gne;", '\U00002A88'}, - {"gneq;", '\U00002A88'}, - {"gneqq;", '\U00002269'}, - {"gnsim;", '\U000022E7'}, - {"gopf;", '\U0001D558'}, - {"grave;", '\U00000060'}, - {"gscr;", '\U0000210A'}, - {"gsim;", '\U00002273'}, - {"gsime;", '\U00002A8E'}, - {"gsiml;", '\U00002A90'}, - {"gt;", '\U0000003E'}, - {"gtcc;", '\U00002AA7'}, - {"gtcir;", '\U00002A7A'}, - {"gtdot;", '\U000022D7'}, - {"gtlPar;", '\U00002995'}, - {"gtquest;", '\U00002A7C'}, - {"gtrapprox;", '\U00002A86'}, - {"gtrarr;", '\U00002978'}, - {"gtrdot;", '\U000022D7'}, - {"gtreqless;", '\U000022DB'}, - {"gtreqqless;", '\U00002A8C'}, - {"gtrless;", '\U00002277'}, - {"gtrsim;", '\U00002273'}, - {"hArr;", '\U000021D4'}, - {"hairsp;", '\U0000200A'}, - {"half;", '\U000000BD'}, - {"hamilt;", '\U0000210B'}, - {"hardcy;", '\U0000044A'}, - {"harr;", '\U00002194'}, - {"harrcir;", '\U00002948'}, - {"harrw;", '\U000021AD'}, - {"hbar;", '\U0000210F'}, - {"hcirc;", '\U00000125'}, - {"hearts;", '\U00002665'}, - {"heartsuit;", '\U00002665'}, - {"hellip;", '\U00002026'}, - {"hercon;", '\U000022B9'}, - {"hfr;", '\U0001D525'}, - {"hksearow;", '\U00002925'}, - {"hkswarow;", '\U00002926'}, - {"hoarr;", '\U000021FF'}, - {"homtht;", '\U0000223B'}, - {"hookleftarrow;", '\U000021A9'}, - {"hookrightarrow;", '\U000021AA'}, - {"hopf;", '\U0001D559'}, - {"horbar;", '\U00002015'}, - {"hscr;", '\U0001D4BD'}, - {"hslash;", '\U0000210F'}, - {"hstrok;", '\U00000127'}, - {"hybull;", '\U00002043'}, - {"hyphen;", '\U00002010'}, - {"iacute;", '\U000000ED'}, - {"ic;", '\U00002063'}, - {"icirc;", '\U000000EE'}, - {"icy;", '\U00000438'}, - {"iecy;", '\U00000435'}, - {"iexcl;", '\U000000A1'}, - {"iff;", '\U000021D4'}, - {"ifr;", '\U0001D526'}, - {"igrave;", '\U000000EC'}, - {"ii;", '\U00002148'}, - {"iiiint;", '\U00002A0C'}, - {"iiint;", '\U0000222D'}, - {"iinfin;", '\U000029DC'}, - {"iiota;", '\U00002129'}, - {"ijlig;", '\U00000133'}, - {"imacr;", '\U0000012B'}, - {"image;", '\U00002111'}, - {"imagline;", '\U00002110'}, - {"imagpart;", '\U00002111'}, - {"imath;", '\U00000131'}, - {"imof;", '\U000022B7'}, - {"imped;", '\U000001B5'}, - {"in;", '\U00002208'}, - {"incare;", '\U00002105'}, - {"infin;", '\U0000221E'}, - {"infintie;", '\U000029DD'}, - {"inodot;", '\U00000131'}, - {"int;", '\U0000222B'}, - {"intcal;", '\U000022BA'}, - {"integers;", '\U00002124'}, - {"intercal;", '\U000022BA'}, - {"intlarhk;", '\U00002A17'}, - {"intprod;", '\U00002A3C'}, - {"iocy;", '\U00000451'}, - {"iogon;", '\U0000012F'}, - {"iopf;", '\U0001D55A'}, - {"iota;", '\U000003B9'}, - {"iprod;", '\U00002A3C'}, - {"iquest;", '\U000000BF'}, - {"iscr;", '\U0001D4BE'}, - {"isin;", '\U00002208'}, - {"isinE;", '\U000022F9'}, - {"isindot;", '\U000022F5'}, - {"isins;", '\U000022F4'}, - {"isinsv;", '\U000022F3'}, - {"isinv;", '\U00002208'}, - {"it;", '\U00002062'}, - {"itilde;", '\U00000129'}, - {"iukcy;", '\U00000456'}, - {"iuml;", '\U000000EF'}, - {"jcirc;", '\U00000135'}, - {"jcy;", '\U00000439'}, - {"jfr;", '\U0001D527'}, - {"jmath;", '\U00000237'}, - {"jopf;", '\U0001D55B'}, - {"jscr;", '\U0001D4BF'}, - {"jsercy;", '\U00000458'}, - {"jukcy;", '\U00000454'}, - {"kappa;", '\U000003BA'}, - {"kappav;", '\U000003F0'}, - {"kcedil;", '\U00000137'}, - {"kcy;", '\U0000043A'}, - {"kfr;", '\U0001D528'}, - {"kgreen;", '\U00000138'}, - {"khcy;", '\U00000445'}, - {"kjcy;", '\U0000045C'}, - {"kopf;", '\U0001D55C'}, - {"kscr;", '\U0001D4C0'}, - {"lAarr;", '\U000021DA'}, - {"lArr;", '\U000021D0'}, - {"lAtail;", '\U0000291B'}, - {"lBarr;", '\U0000290E'}, - {"lE;", '\U00002266'}, - {"lEg;", '\U00002A8B'}, - {"lHar;", '\U00002962'}, - {"lacute;", '\U0000013A'}, - {"laemptyv;", '\U000029B4'}, - {"lagran;", '\U00002112'}, - {"lambda;", '\U000003BB'}, - {"lang;", '\U000027E8'}, - {"langd;", '\U00002991'}, - {"langle;", '\U000027E8'}, - {"lap;", '\U00002A85'}, - {"laquo;", '\U000000AB'}, - {"larr;", '\U00002190'}, - {"larrb;", '\U000021E4'}, - {"larrbfs;", '\U0000291F'}, - {"larrfs;", '\U0000291D'}, - {"larrhk;", '\U000021A9'}, - {"larrlp;", '\U000021AB'}, - {"larrpl;", '\U00002939'}, - {"larrsim;", '\U00002973'}, - {"larrtl;", '\U000021A2'}, - {"lat;", '\U00002AAB'}, - {"latail;", '\U00002919'}, - {"late;", '\U00002AAD'}, - {"lbarr;", '\U0000290C'}, - {"lbbrk;", '\U00002772'}, - {"lbrace;", '\U0000007B'}, - {"lbrack;", '\U0000005B'}, - {"lbrke;", '\U0000298B'}, - {"lbrksld;", '\U0000298F'}, - {"lbrkslu;", '\U0000298D'}, - {"lcaron;", '\U0000013E'}, - {"lcedil;", '\U0000013C'}, - {"lceil;", '\U00002308'}, - {"lcub;", '\U0000007B'}, - {"lcy;", '\U0000043B'}, - {"ldca;", '\U00002936'}, - {"ldquo;", '\U0000201C'}, - {"ldquor;", '\U0000201E'}, - {"ldrdhar;", '\U00002967'}, - {"ldrushar;", '\U0000294B'}, - {"ldsh;", '\U000021B2'}, - {"le;", '\U00002264'}, - {"leftarrow;", '\U00002190'}, - {"leftarrowtail;", '\U000021A2'}, - {"leftharpoondown;", '\U000021BD'}, - {"leftharpoonup;", '\U000021BC'}, - {"leftleftarrows;", '\U000021C7'}, - {"leftrightarrow;", '\U00002194'}, - {"leftrightarrows;", '\U000021C6'}, - {"leftrightharpoons;", '\U000021CB'}, - {"leftrightsquigarrow;", '\U000021AD'}, - {"leftthreetimes;", '\U000022CB'}, - {"leg;", '\U000022DA'}, - {"leq;", '\U00002264'}, - {"leqq;", '\U00002266'}, - {"leqslant;", '\U00002A7D'}, - {"les;", '\U00002A7D'}, - {"lescc;", '\U00002AA8'}, - {"lesdot;", '\U00002A7F'}, - {"lesdoto;", '\U00002A81'}, - {"lesdotor;", '\U00002A83'}, - {"lesges;", '\U00002A93'}, - {"lessapprox;", '\U00002A85'}, - {"lessdot;", '\U000022D6'}, - {"lesseqgtr;", '\U000022DA'}, - {"lesseqqgtr;", '\U00002A8B'}, - {"lessgtr;", '\U00002276'}, - {"lesssim;", '\U00002272'}, - {"lfisht;", '\U0000297C'}, - {"lfloor;", '\U0000230A'}, - {"lfr;", '\U0001D529'}, - {"lg;", '\U00002276'}, - {"lgE;", '\U00002A91'}, - {"lhard;", '\U000021BD'}, - {"lharu;", '\U000021BC'}, - {"lharul;", '\U0000296A'}, - {"lhblk;", '\U00002584'}, - {"ljcy;", '\U00000459'}, - {"ll;", '\U0000226A'}, - {"llarr;", '\U000021C7'}, - {"llcorner;", '\U0000231E'}, - {"llhard;", '\U0000296B'}, - {"lltri;", '\U000025FA'}, - {"lmidot;", '\U00000140'}, - {"lmoust;", '\U000023B0'}, - {"lmoustache;", '\U000023B0'}, - {"lnE;", '\U00002268'}, - {"lnap;", '\U00002A89'}, - {"lnapprox;", '\U00002A89'}, - {"lne;", '\U00002A87'}, - {"lneq;", '\U00002A87'}, - {"lneqq;", '\U00002268'}, - {"lnsim;", '\U000022E6'}, - {"loang;", '\U000027EC'}, - {"loarr;", '\U000021FD'}, - {"lobrk;", '\U000027E6'}, - {"longleftarrow;", '\U000027F5'}, - {"longleftrightarrow;", '\U000027F7'}, - {"longmapsto;", '\U000027FC'}, - {"longrightarrow;", '\U000027F6'}, - {"looparrowleft;", '\U000021AB'}, - {"looparrowright;", '\U000021AC'}, - {"lopar;", '\U00002985'}, - {"lopf;", '\U0001D55D'}, - {"loplus;", '\U00002A2D'}, - {"lotimes;", '\U00002A34'}, - {"lowast;", '\U00002217'}, - {"lowbar;", '\U0000005F'}, - {"loz;", '\U000025CA'}, - {"lozenge;", '\U000025CA'}, - {"lozf;", '\U000029EB'}, - {"lpar;", '\U00000028'}, - {"lparlt;", '\U00002993'}, - {"lrarr;", '\U000021C6'}, - {"lrcorner;", '\U0000231F'}, - {"lrhar;", '\U000021CB'}, - {"lrhard;", '\U0000296D'}, - {"lrm;", '\U0000200E'}, - {"lrtri;", '\U000022BF'}, - {"lsaquo;", '\U00002039'}, - {"lscr;", '\U0001D4C1'}, - {"lsh;", '\U000021B0'}, - {"lsim;", '\U00002272'}, - {"lsime;", '\U00002A8D'}, - {"lsimg;", '\U00002A8F'}, - {"lsqb;", '\U0000005B'}, - {"lsquo;", '\U00002018'}, - {"lsquor;", '\U0000201A'}, - {"lstrok;", '\U00000142'}, - {"lt;", '\U0000003C'}, - {"ltcc;", '\U00002AA6'}, - {"ltcir;", '\U00002A79'}, - {"ltdot;", '\U000022D6'}, - {"lthree;", '\U000022CB'}, - {"ltimes;", '\U000022C9'}, - {"ltlarr;", '\U00002976'}, - {"ltquest;", '\U00002A7B'}, - {"ltrPar;", '\U00002996'}, - {"ltri;", '\U000025C3'}, - {"ltrie;", '\U000022B4'}, - {"ltrif;", '\U000025C2'}, - {"lurdshar;", '\U0000294A'}, - {"luruhar;", '\U00002966'}, - {"mDDot;", '\U0000223A'}, - {"macr;", '\U000000AF'}, - {"male;", '\U00002642'}, - {"malt;", '\U00002720'}, - {"maltese;", '\U00002720'}, - {"map;", '\U000021A6'}, - {"mapsto;", '\U000021A6'}, - {"mapstodown;", '\U000021A7'}, - {"mapstoleft;", '\U000021A4'}, - {"mapstoup;", '\U000021A5'}, - {"marker;", '\U000025AE'}, - {"mcomma;", '\U00002A29'}, - {"mcy;", '\U0000043C'}, - {"mdash;", '\U00002014'}, - {"measuredangle;", '\U00002221'}, - {"mfr;", '\U0001D52A'}, - {"mho;", '\U00002127'}, - {"micro;", '\U000000B5'}, - {"mid;", '\U00002223'}, - {"midast;", '\U0000002A'}, - {"midcir;", '\U00002AF0'}, - {"middot;", '\U000000B7'}, - {"minus;", '\U00002212'}, - {"minusb;", '\U0000229F'}, - {"minusd;", '\U00002238'}, - {"minusdu;", '\U00002A2A'}, - {"mlcp;", '\U00002ADB'}, - {"mldr;", '\U00002026'}, - {"mnplus;", '\U00002213'}, - {"models;", '\U000022A7'}, - {"mopf;", '\U0001D55E'}, - {"mp;", '\U00002213'}, - {"mscr;", '\U0001D4C2'}, - {"mstpos;", '\U0000223E'}, - {"mu;", '\U000003BC'}, - {"multimap;", '\U000022B8'}, - {"mumap;", '\U000022B8'}, - {"nLeftarrow;", '\U000021CD'}, - {"nLeftrightarrow;", '\U000021CE'}, - {"nRightarrow;", '\U000021CF'}, - {"nVDash;", '\U000022AF'}, - {"nVdash;", '\U000022AE'}, - {"nabla;", '\U00002207'}, - {"nacute;", '\U00000144'}, - {"nap;", '\U00002249'}, - {"napos;", '\U00000149'}, - {"napprox;", '\U00002249'}, - {"natur;", '\U0000266E'}, - {"natural;", '\U0000266E'}, - {"naturals;", '\U00002115'}, - {"nbsp;", '\U000000A0'}, - {"ncap;", '\U00002A43'}, - {"ncaron;", '\U00000148'}, - {"ncedil;", '\U00000146'}, - {"ncong;", '\U00002247'}, - {"ncup;", '\U00002A42'}, - {"ncy;", '\U0000043D'}, - {"ndash;", '\U00002013'}, - {"ne;", '\U00002260'}, - {"neArr;", '\U000021D7'}, - {"nearhk;", '\U00002924'}, - {"nearr;", '\U00002197'}, - {"nearrow;", '\U00002197'}, - {"nequiv;", '\U00002262'}, - {"nesear;", '\U00002928'}, - {"nexist;", '\U00002204'}, - {"nexists;", '\U00002204'}, - {"nfr;", '\U0001D52B'}, - {"nge;", '\U00002271'}, - {"ngeq;", '\U00002271'}, - {"ngsim;", '\U00002275'}, - {"ngt;", '\U0000226F'}, - {"ngtr;", '\U0000226F'}, - {"nhArr;", '\U000021CE'}, - {"nharr;", '\U000021AE'}, - {"nhpar;", '\U00002AF2'}, - {"ni;", '\U0000220B'}, - {"nis;", '\U000022FC'}, - {"nisd;", '\U000022FA'}, - {"niv;", '\U0000220B'}, - {"njcy;", '\U0000045A'}, - {"nlArr;", '\U000021CD'}, - {"nlarr;", '\U0000219A'}, - {"nldr;", '\U00002025'}, - {"nle;", '\U00002270'}, - {"nleftarrow;", '\U0000219A'}, - {"nleftrightarrow;", '\U000021AE'}, - {"nleq;", '\U00002270'}, - {"nless;", '\U0000226E'}, - {"nlsim;", '\U00002274'}, - {"nlt;", '\U0000226E'}, - {"nltri;", '\U000022EA'}, - {"nltrie;", '\U000022EC'}, - {"nmid;", '\U00002224'}, - {"nopf;", '\U0001D55F'}, - {"not;", '\U000000AC'}, - {"notin;", '\U00002209'}, - {"notinva;", '\U00002209'}, - {"notinvb;", '\U000022F7'}, - {"notinvc;", '\U000022F6'}, - {"notni;", '\U0000220C'}, - {"notniva;", '\U0000220C'}, - {"notnivb;", '\U000022FE'}, - {"notnivc;", '\U000022FD'}, - {"npar;", '\U00002226'}, - {"nparallel;", '\U00002226'}, - {"npolint;", '\U00002A14'}, - {"npr;", '\U00002280'}, - {"nprcue;", '\U000022E0'}, - {"nprec;", '\U00002280'}, - {"nrArr;", '\U000021CF'}, - {"nrarr;", '\U0000219B'}, - {"nrightarrow;", '\U0000219B'}, - {"nrtri;", '\U000022EB'}, - {"nrtrie;", '\U000022ED'}, - {"nsc;", '\U00002281'}, - {"nsccue;", '\U000022E1'}, - {"nscr;", '\U0001D4C3'}, - {"nshortmid;", '\U00002224'}, - {"nshortparallel;", '\U00002226'}, - {"nsim;", '\U00002241'}, - {"nsime;", '\U00002244'}, - {"nsimeq;", '\U00002244'}, - {"nsmid;", '\U00002224'}, - {"nspar;", '\U00002226'}, - {"nsqsube;", '\U000022E2'}, - {"nsqsupe;", '\U000022E3'}, - {"nsub;", '\U00002284'}, - {"nsube;", '\U00002288'}, - {"nsubseteq;", '\U00002288'}, - {"nsucc;", '\U00002281'}, - {"nsup;", '\U00002285'}, - {"nsupe;", '\U00002289'}, - {"nsupseteq;", '\U00002289'}, - {"ntgl;", '\U00002279'}, - {"ntilde;", '\U000000F1'}, - {"ntlg;", '\U00002278'}, - {"ntriangleleft;", '\U000022EA'}, - {"ntrianglelefteq;", '\U000022EC'}, - {"ntriangleright;", '\U000022EB'}, - {"ntrianglerighteq;", '\U000022ED'}, - {"nu;", '\U000003BD'}, - {"num;", '\U00000023'}, - {"numero;", '\U00002116'}, - {"numsp;", '\U00002007'}, - {"nvDash;", '\U000022AD'}, - {"nvHarr;", '\U00002904'}, - {"nvdash;", '\U000022AC'}, - {"nvinfin;", '\U000029DE'}, - {"nvlArr;", '\U00002902'}, - {"nvrArr;", '\U00002903'}, - {"nwArr;", '\U000021D6'}, - {"nwarhk;", '\U00002923'}, - {"nwarr;", '\U00002196'}, - {"nwarrow;", '\U00002196'}, - {"nwnear;", '\U00002927'}, - {"oS;", '\U000024C8'}, - {"oacute;", '\U000000F3'}, - {"oast;", '\U0000229B'}, - {"ocir;", '\U0000229A'}, - {"ocirc;", '\U000000F4'}, - {"ocy;", '\U0000043E'}, - {"odash;", '\U0000229D'}, - {"odblac;", '\U00000151'}, - {"odiv;", '\U00002A38'}, - {"odot;", '\U00002299'}, - {"odsold;", '\U000029BC'}, - {"oelig;", '\U00000153'}, - {"ofcir;", '\U000029BF'}, - {"ofr;", '\U0001D52C'}, - {"ogon;", '\U000002DB'}, - {"ograve;", '\U000000F2'}, - {"ogt;", '\U000029C1'}, - {"ohbar;", '\U000029B5'}, - {"ohm;", '\U000003A9'}, - {"oint;", '\U0000222E'}, - {"olarr;", '\U000021BA'}, - {"olcir;", '\U000029BE'}, - {"olcross;", '\U000029BB'}, - {"oline;", '\U0000203E'}, - {"olt;", '\U000029C0'}, - {"omacr;", '\U0000014D'}, - {"omega;", '\U000003C9'}, - {"omicron;", '\U000003BF'}, - {"omid;", '\U000029B6'}, - {"ominus;", '\U00002296'}, - {"oopf;", '\U0001D560'}, - {"opar;", '\U000029B7'}, - {"operp;", '\U000029B9'}, - {"oplus;", '\U00002295'}, - {"or;", '\U00002228'}, - {"orarr;", '\U000021BB'}, - {"ord;", '\U00002A5D'}, - {"order;", '\U00002134'}, - {"orderof;", '\U00002134'}, - {"ordf;", '\U000000AA'}, - {"ordm;", '\U000000BA'}, - {"origof;", '\U000022B6'}, - {"oror;", '\U00002A56'}, - {"orslope;", '\U00002A57'}, - {"orv;", '\U00002A5B'}, - {"oscr;", '\U00002134'}, - {"oslash;", '\U000000F8'}, - {"osol;", '\U00002298'}, - {"otilde;", '\U000000F5'}, - {"otimes;", '\U00002297'}, - {"otimesas;", '\U00002A36'}, - {"ouml;", '\U000000F6'}, - {"ovbar;", '\U0000233D'}, - {"par;", '\U00002225'}, - {"para;", '\U000000B6'}, - {"parallel;", '\U00002225'}, - {"parsim;", '\U00002AF3'}, - {"parsl;", '\U00002AFD'}, - {"part;", '\U00002202'}, - {"pcy;", '\U0000043F'}, - {"percnt;", '\U00000025'}, - {"period;", '\U0000002E'}, - {"permil;", '\U00002030'}, - {"perp;", '\U000022A5'}, - {"pertenk;", '\U00002031'}, - {"pfr;", '\U0001D52D'}, - {"phi;", '\U000003C6'}, - {"phiv;", '\U000003D5'}, - {"phmmat;", '\U00002133'}, - {"phone;", '\U0000260E'}, - {"pi;", '\U000003C0'}, - {"pitchfork;", '\U000022D4'}, - {"piv;", '\U000003D6'}, - {"planck;", '\U0000210F'}, - {"planckh;", '\U0000210E'}, - {"plankv;", '\U0000210F'}, - {"plus;", '\U0000002B'}, - {"plusacir;", '\U00002A23'}, - {"plusb;", '\U0000229E'}, - {"pluscir;", '\U00002A22'}, - {"plusdo;", '\U00002214'}, - {"plusdu;", '\U00002A25'}, - {"pluse;", '\U00002A72'}, - {"plusmn;", '\U000000B1'}, - {"plussim;", '\U00002A26'}, - {"plustwo;", '\U00002A27'}, - {"pm;", '\U000000B1'}, - {"pointint;", '\U00002A15'}, - {"popf;", '\U0001D561'}, - {"pound;", '\U000000A3'}, - {"pr;", '\U0000227A'}, - {"prE;", '\U00002AB3'}, - {"prap;", '\U00002AB7'}, - {"prcue;", '\U0000227C'}, - {"pre;", '\U00002AAF'}, - {"prec;", '\U0000227A'}, - {"precapprox;", '\U00002AB7'}, - {"preccurlyeq;", '\U0000227C'}, - {"preceq;", '\U00002AAF'}, - {"precnapprox;", '\U00002AB9'}, - {"precneqq;", '\U00002AB5'}, - {"precnsim;", '\U000022E8'}, - {"precsim;", '\U0000227E'}, - {"prime;", '\U00002032'}, - {"primes;", '\U00002119'}, - {"prnE;", '\U00002AB5'}, - {"prnap;", '\U00002AB9'}, - {"prnsim;", '\U000022E8'}, - {"prod;", '\U0000220F'}, - {"profalar;", '\U0000232E'}, - {"profline;", '\U00002312'}, - {"profsurf;", '\U00002313'}, - {"prop;", '\U0000221D'}, - {"propto;", '\U0000221D'}, - {"prsim;", '\U0000227E'}, - {"prurel;", '\U000022B0'}, - {"pscr;", '\U0001D4C5'}, - {"psi;", '\U000003C8'}, - {"puncsp;", '\U00002008'}, - {"qfr;", '\U0001D52E'}, - {"qint;", '\U00002A0C'}, - {"qopf;", '\U0001D562'}, - {"qprime;", '\U00002057'}, - {"qscr;", '\U0001D4C6'}, - {"quaternions;", '\U0000210D'}, - {"quatint;", '\U00002A16'}, - {"quest;", '\U0000003F'}, - {"questeq;", '\U0000225F'}, - {"quot;", '\U00000022'}, - {"rAarr;", '\U000021DB'}, - {"rArr;", '\U000021D2'}, - {"rAtail;", '\U0000291C'}, - {"rBarr;", '\U0000290F'}, - {"rHar;", '\U00002964'}, - {"racute;", '\U00000155'}, - {"radic;", '\U0000221A'}, - {"raemptyv;", '\U000029B3'}, - {"rang;", '\U000027E9'}, - {"rangd;", '\U00002992'}, - {"range;", '\U000029A5'}, - {"rangle;", '\U000027E9'}, - {"raquo;", '\U000000BB'}, - {"rarr;", '\U00002192'}, - {"rarrap;", '\U00002975'}, - {"rarrb;", '\U000021E5'}, - {"rarrbfs;", '\U00002920'}, - {"rarrc;", '\U00002933'}, - {"rarrfs;", '\U0000291E'}, - {"rarrhk;", '\U000021AA'}, - {"rarrlp;", '\U000021AC'}, - {"rarrpl;", '\U00002945'}, - {"rarrsim;", '\U00002974'}, - {"rarrtl;", '\U000021A3'}, - {"rarrw;", '\U0000219D'}, - {"ratail;", '\U0000291A'}, - {"ratio;", '\U00002236'}, - {"rationals;", '\U0000211A'}, - {"rbarr;", '\U0000290D'}, - {"rbbrk;", '\U00002773'}, - {"rbrace;", '\U0000007D'}, - {"rbrack;", '\U0000005D'}, - {"rbrke;", '\U0000298C'}, - {"rbrksld;", '\U0000298E'}, - {"rbrkslu;", '\U00002990'}, - {"rcaron;", '\U00000159'}, - {"rcedil;", '\U00000157'}, - {"rceil;", '\U00002309'}, - {"rcub;", '\U0000007D'}, - {"rcy;", '\U00000440'}, - {"rdca;", '\U00002937'}, - {"rdldhar;", '\U00002969'}, - {"rdquo;", '\U0000201D'}, - {"rdquor;", '\U0000201D'}, - {"rdsh;", '\U000021B3'}, - {"real;", '\U0000211C'}, - {"realine;", '\U0000211B'}, - {"realpart;", '\U0000211C'}, - {"reals;", '\U0000211D'}, - {"rect;", '\U000025AD'}, - {"reg;", '\U000000AE'}, - {"rfisht;", '\U0000297D'}, - {"rfloor;", '\U0000230B'}, - {"rfr;", '\U0001D52F'}, - {"rhard;", '\U000021C1'}, - {"rharu;", '\U000021C0'}, - {"rharul;", '\U0000296C'}, - {"rho;", '\U000003C1'}, - {"rhov;", '\U000003F1'}, - {"rightarrow;", '\U00002192'}, - {"rightarrowtail;", '\U000021A3'}, - {"rightharpoondown;", '\U000021C1'}, - {"rightharpoonup;", '\U000021C0'}, - {"rightleftarrows;", '\U000021C4'}, - {"rightleftharpoons;", '\U000021CC'}, - {"rightrightarrows;", '\U000021C9'}, - {"rightsquigarrow;", '\U0000219D'}, - {"rightthreetimes;", '\U000022CC'}, - {"ring;", '\U000002DA'}, - {"risingdotseq;", '\U00002253'}, - {"rlarr;", '\U000021C4'}, - {"rlhar;", '\U000021CC'}, - {"rlm;", '\U0000200F'}, - {"rmoust;", '\U000023B1'}, - {"rmoustache;", '\U000023B1'}, - {"rnmid;", '\U00002AEE'}, - {"roang;", '\U000027ED'}, - {"roarr;", '\U000021FE'}, - {"robrk;", '\U000027E7'}, - {"ropar;", '\U00002986'}, - {"ropf;", '\U0001D563'}, - {"roplus;", '\U00002A2E'}, - {"rotimes;", '\U00002A35'}, - {"rpar;", '\U00000029'}, - {"rpargt;", '\U00002994'}, - {"rppolint;", '\U00002A12'}, - {"rrarr;", '\U000021C9'}, - {"rsaquo;", '\U0000203A'}, - {"rscr;", '\U0001D4C7'}, - {"rsh;", '\U000021B1'}, - {"rsqb;", '\U0000005D'}, - {"rsquo;", '\U00002019'}, - {"rsquor;", '\U00002019'}, - {"rthree;", '\U000022CC'}, - {"rtimes;", '\U000022CA'}, - {"rtri;", '\U000025B9'}, - {"rtrie;", '\U000022B5'}, - {"rtrif;", '\U000025B8'}, - {"rtriltri;", '\U000029CE'}, - {"ruluhar;", '\U00002968'}, - {"rx;", '\U0000211E'}, - {"sacute;", '\U0000015B'}, - {"sbquo;", '\U0000201A'}, - {"sc;", '\U0000227B'}, - {"scE;", '\U00002AB4'}, - {"scap;", '\U00002AB8'}, - {"scaron;", '\U00000161'}, - {"sccue;", '\U0000227D'}, - {"sce;", '\U00002AB0'}, - {"scedil;", '\U0000015F'}, - {"scirc;", '\U0000015D'}, - {"scnE;", '\U00002AB6'}, - {"scnap;", '\U00002ABA'}, - {"scnsim;", '\U000022E9'}, - {"scpolint;", '\U00002A13'}, - {"scsim;", '\U0000227F'}, - {"scy;", '\U00000441'}, - {"sdot;", '\U000022C5'}, - {"sdotb;", '\U000022A1'}, - {"sdote;", '\U00002A66'}, - {"seArr;", '\U000021D8'}, - {"searhk;", '\U00002925'}, - {"searr;", '\U00002198'}, - {"searrow;", '\U00002198'}, - {"sect;", '\U000000A7'}, - {"semi;", '\U0000003B'}, - {"seswar;", '\U00002929'}, - {"setminus;", '\U00002216'}, - {"setmn;", '\U00002216'}, - {"sext;", '\U00002736'}, - {"sfr;", '\U0001D530'}, - {"sfrown;", '\U00002322'}, - {"sharp;", '\U0000266F'}, - {"shchcy;", '\U00000449'}, - {"shcy;", '\U00000448'}, - {"shortmid;", '\U00002223'}, - {"shortparallel;", '\U00002225'}, - {"shy;", '\U000000AD'}, - {"sigma;", '\U000003C3'}, - {"sigmaf;", '\U000003C2'}, - {"sigmav;", '\U000003C2'}, - {"sim;", '\U0000223C'}, - {"simdot;", '\U00002A6A'}, - {"sime;", '\U00002243'}, - {"simeq;", '\U00002243'}, - {"simg;", '\U00002A9E'}, - {"simgE;", '\U00002AA0'}, - {"siml;", '\U00002A9D'}, - {"simlE;", '\U00002A9F'}, - {"simne;", '\U00002246'}, - {"simplus;", '\U00002A24'}, - {"simrarr;", '\U00002972'}, - {"slarr;", '\U00002190'}, - {"smallsetminus;", '\U00002216'}, - {"smashp;", '\U00002A33'}, - {"smeparsl;", '\U000029E4'}, - {"smid;", '\U00002223'}, - {"smile;", '\U00002323'}, - {"smt;", '\U00002AAA'}, - {"smte;", '\U00002AAC'}, - {"softcy;", '\U0000044C'}, - {"sol;", '\U0000002F'}, - {"solb;", '\U000029C4'}, - {"solbar;", '\U0000233F'}, - {"sopf;", '\U0001D564'}, - {"spades;", '\U00002660'}, - {"spadesuit;", '\U00002660'}, - {"spar;", '\U00002225'}, - {"sqcap;", '\U00002293'}, - {"sqcup;", '\U00002294'}, - {"sqsub;", '\U0000228F'}, - {"sqsube;", '\U00002291'}, - {"sqsubset;", '\U0000228F'}, - {"sqsubseteq;", '\U00002291'}, - {"sqsup;", '\U00002290'}, - {"sqsupe;", '\U00002292'}, - {"sqsupset;", '\U00002290'}, - {"sqsupseteq;", '\U00002292'}, - {"squ;", '\U000025A1'}, - {"square;", '\U000025A1'}, - {"squarf;", '\U000025AA'}, - {"squf;", '\U000025AA'}, - {"srarr;", '\U00002192'}, - {"sscr;", '\U0001D4C8'}, - {"ssetmn;", '\U00002216'}, - {"ssmile;", '\U00002323'}, - {"sstarf;", '\U000022C6'}, - {"star;", '\U00002606'}, - {"starf;", '\U00002605'}, - {"straightepsilon;", '\U000003F5'}, - {"straightphi;", '\U000003D5'}, - {"strns;", '\U000000AF'}, - {"sub;", '\U00002282'}, - {"subE;", '\U00002AC5'}, - {"subdot;", '\U00002ABD'}, - {"sube;", '\U00002286'}, - {"subedot;", '\U00002AC3'}, - {"submult;", '\U00002AC1'}, - {"subnE;", '\U00002ACB'}, - {"subne;", '\U0000228A'}, - {"subplus;", '\U00002ABF'}, - {"subrarr;", '\U00002979'}, - {"subset;", '\U00002282'}, - {"subseteq;", '\U00002286'}, - {"subseteqq;", '\U00002AC5'}, - {"subsetneq;", '\U0000228A'}, - {"subsetneqq;", '\U00002ACB'}, - {"subsim;", '\U00002AC7'}, - {"subsub;", '\U00002AD5'}, - {"subsup;", '\U00002AD3'}, - {"succ;", '\U0000227B'}, - {"succapprox;", '\U00002AB8'}, - {"succcurlyeq;", '\U0000227D'}, - {"succeq;", '\U00002AB0'}, - {"succnapprox;", '\U00002ABA'}, - {"succneqq;", '\U00002AB6'}, - {"succnsim;", '\U000022E9'}, - {"succsim;", '\U0000227F'}, - {"sum;", '\U00002211'}, - {"sung;", '\U0000266A'}, - {"sup;", '\U00002283'}, - {"sup1;", '\U000000B9'}, - {"sup2;", '\U000000B2'}, - {"sup3;", '\U000000B3'}, - {"supE;", '\U00002AC6'}, - {"supdot;", '\U00002ABE'}, - {"supdsub;", '\U00002AD8'}, - {"supe;", '\U00002287'}, - {"supedot;", '\U00002AC4'}, - {"suphsol;", '\U000027C9'}, - {"suphsub;", '\U00002AD7'}, - {"suplarr;", '\U0000297B'}, - {"supmult;", '\U00002AC2'}, - {"supnE;", '\U00002ACC'}, - {"supne;", '\U0000228B'}, - {"supplus;", '\U00002AC0'}, - {"supset;", '\U00002283'}, - {"supseteq;", '\U00002287'}, - {"supseteqq;", '\U00002AC6'}, - {"supsetneq;", '\U0000228B'}, - {"supsetneqq;", '\U00002ACC'}, - {"supsim;", '\U00002AC8'}, - {"supsub;", '\U00002AD4'}, - {"supsup;", '\U00002AD6'}, - {"swArr;", '\U000021D9'}, - {"swarhk;", '\U00002926'}, - {"swarr;", '\U00002199'}, - {"swarrow;", '\U00002199'}, - {"swnwar;", '\U0000292A'}, - {"szlig;", '\U000000DF'}, - {"target;", '\U00002316'}, - {"tau;", '\U000003C4'}, - {"tbrk;", '\U000023B4'}, - {"tcaron;", '\U00000165'}, - {"tcedil;", '\U00000163'}, - {"tcy;", '\U00000442'}, - {"tdot;", '\U000020DB'}, - {"telrec;", '\U00002315'}, - {"tfr;", '\U0001D531'}, - {"there4;", '\U00002234'}, - {"therefore;", '\U00002234'}, - {"theta;", '\U000003B8'}, - {"thetasym;", '\U000003D1'}, - {"thetav;", '\U000003D1'}, - {"thickapprox;", '\U00002248'}, - {"thicksim;", '\U0000223C'}, - {"thinsp;", '\U00002009'}, - {"thkap;", '\U00002248'}, - {"thksim;", '\U0000223C'}, - {"thorn;", '\U000000FE'}, - {"tilde;", '\U000002DC'}, - {"times;", '\U000000D7'}, - {"timesb;", '\U000022A0'}, - {"timesbar;", '\U00002A31'}, - {"timesd;", '\U00002A30'}, - {"tint;", '\U0000222D'}, - {"toea;", '\U00002928'}, - {"top;", '\U000022A4'}, - {"topbot;", '\U00002336'}, - {"topcir;", '\U00002AF1'}, - {"topf;", '\U0001D565'}, - {"topfork;", '\U00002ADA'}, - {"tosa;", '\U00002929'}, - {"tprime;", '\U00002034'}, - {"trade;", '\U00002122'}, - {"triangle;", '\U000025B5'}, - {"triangledown;", '\U000025BF'}, - {"triangleleft;", '\U000025C3'}, - {"trianglelefteq;", '\U000022B4'}, - {"triangleq;", '\U0000225C'}, - {"triangleright;", '\U000025B9'}, - {"trianglerighteq;", '\U000022B5'}, - {"tridot;", '\U000025EC'}, - {"trie;", '\U0000225C'}, - {"triminus;", '\U00002A3A'}, - {"triplus;", '\U00002A39'}, - {"trisb;", '\U000029CD'}, - {"tritime;", '\U00002A3B'}, - {"trpezium;", '\U000023E2'}, - {"tscr;", '\U0001D4C9'}, - {"tscy;", '\U00000446'}, - {"tshcy;", '\U0000045B'}, - {"tstrok;", '\U00000167'}, - {"twixt;", '\U0000226C'}, - {"twoheadleftarrow;", '\U0000219E'}, - {"twoheadrightarrow;", '\U000021A0'}, - {"uArr;", '\U000021D1'}, - {"uHar;", '\U00002963'}, - {"uacute;", '\U000000FA'}, - {"uarr;", '\U00002191'}, - {"ubrcy;", '\U0000045E'}, - {"ubreve;", '\U0000016D'}, - {"ucirc;", '\U000000FB'}, - {"ucy;", '\U00000443'}, - {"udarr;", '\U000021C5'}, - {"udblac;", '\U00000171'}, - {"udhar;", '\U0000296E'}, - {"ufisht;", '\U0000297E'}, - {"ufr;", '\U0001D532'}, - {"ugrave;", '\U000000F9'}, - {"uharl;", '\U000021BF'}, - {"uharr;", '\U000021BE'}, - {"uhblk;", '\U00002580'}, - {"ulcorn;", '\U0000231C'}, - {"ulcorner;", '\U0000231C'}, - {"ulcrop;", '\U0000230F'}, - {"ultri;", '\U000025F8'}, - {"umacr;", '\U0000016B'}, - {"uml;", '\U000000A8'}, - {"uogon;", '\U00000173'}, - {"uopf;", '\U0001D566'}, - {"uparrow;", '\U00002191'}, - {"updownarrow;", '\U00002195'}, - {"upharpoonleft;", '\U000021BF'}, - {"upharpoonright;", '\U000021BE'}, - {"uplus;", '\U0000228E'}, - {"upsi;", '\U000003C5'}, - {"upsih;", '\U000003D2'}, - {"upsilon;", '\U000003C5'}, - {"upuparrows;", '\U000021C8'}, - {"urcorn;", '\U0000231D'}, - {"urcorner;", '\U0000231D'}, - {"urcrop;", '\U0000230E'}, - {"uring;", '\U0000016F'}, - {"urtri;", '\U000025F9'}, - {"uscr;", '\U0001D4CA'}, - {"utdot;", '\U000022F0'}, - {"utilde;", '\U00000169'}, - {"utri;", '\U000025B5'}, - {"utrif;", '\U000025B4'}, - {"uuarr;", '\U000021C8'}, - {"uuml;", '\U000000FC'}, - {"uwangle;", '\U000029A7'}, - {"vArr;", '\U000021D5'}, - {"vBar;", '\U00002AE8'}, - {"vBarv;", '\U00002AE9'}, - {"vDash;", '\U000022A8'}, - {"vangrt;", '\U0000299C'}, - {"varepsilon;", '\U000003F5'}, - {"varkappa;", '\U000003F0'}, - {"varnothing;", '\U00002205'}, - {"varphi;", '\U000003D5'}, - {"varpi;", '\U000003D6'}, - {"varpropto;", '\U0000221D'}, - {"varr;", '\U00002195'}, - {"varrho;", '\U000003F1'}, - {"varsigma;", '\U000003C2'}, - {"vartheta;", '\U000003D1'}, - {"vartriangleleft;", '\U000022B2'}, - {"vartriangleright;", '\U000022B3'}, - {"vcy;", '\U00000432'}, - {"vdash;", '\U000022A2'}, - {"vee;", '\U00002228'}, - {"veebar;", '\U000022BB'}, - {"veeeq;", '\U0000225A'}, - {"vellip;", '\U000022EE'}, - {"verbar;", '\U0000007C'}, - {"vert;", '\U0000007C'}, - {"vfr;", '\U0001D533'}, - {"vltri;", '\U000022B2'}, - {"vopf;", '\U0001D567'}, - {"vprop;", '\U0000221D'}, - {"vrtri;", '\U000022B3'}, - {"vscr;", '\U0001D4CB'}, - {"vzigzag;", '\U0000299A'}, - {"wcirc;", '\U00000175'}, - {"wedbar;", '\U00002A5F'}, - {"wedge;", '\U00002227'}, - {"wedgeq;", '\U00002259'}, - {"weierp;", '\U00002118'}, - {"wfr;", '\U0001D534'}, - {"wopf;", '\U0001D568'}, - {"wp;", '\U00002118'}, - {"wr;", '\U00002240'}, - {"wreath;", '\U00002240'}, - {"wscr;", '\U0001D4CC'}, - {"xcap;", '\U000022C2'}, - {"xcirc;", '\U000025EF'}, - {"xcup;", '\U000022C3'}, - {"xdtri;", '\U000025BD'}, - {"xfr;", '\U0001D535'}, - {"xhArr;", '\U000027FA'}, - {"xharr;", '\U000027F7'}, - {"xi;", '\U000003BE'}, - {"xlArr;", '\U000027F8'}, - {"xlarr;", '\U000027F5'}, - {"xmap;", '\U000027FC'}, - {"xnis;", '\U000022FB'}, - {"xodot;", '\U00002A00'}, - {"xopf;", '\U0001D569'}, - {"xoplus;", '\U00002A01'}, - {"xotime;", '\U00002A02'}, - {"xrArr;", '\U000027F9'}, - {"xrarr;", '\U000027F6'}, - {"xscr;", '\U0001D4CD'}, - {"xsqcup;", '\U00002A06'}, - {"xuplus;", '\U00002A04'}, - {"xutri;", '\U000025B3'}, - {"xvee;", '\U000022C1'}, - {"xwedge;", '\U000022C0'}, - {"yacute;", '\U000000FD'}, - {"yacy;", '\U0000044F'}, - {"ycirc;", '\U00000177'}, - {"ycy;", '\U0000044B'}, - {"yen;", '\U000000A5'}, - {"yfr;", '\U0001D536'}, - {"yicy;", '\U00000457'}, - {"yopf;", '\U0001D56A'}, - {"yscr;", '\U0001D4CE'}, - {"yucy;", '\U0000044E'}, - {"yuml;", '\U000000FF'}, - {"zacute;", '\U0000017A'}, - {"zcaron;", '\U0000017E'}, - {"zcy;", '\U00000437'}, - {"zdot;", '\U0000017C'}, - {"zeetrf;", '\U00002128'}, - {"zeta;", '\U000003B6'}, - {"zfr;", '\U0001D537'}, - {"zhcy;", '\U00000436'}, - {"zigrarr;", '\U000021DD'}, - {"zopf;", '\U0001D56B'}, - {"zscr;", '\U0001D4CF'}, - {"zwj;", '\U0000200D'}, - {"zwnj;", '\U0000200C'}, - - {"Aacute", '\U000000C1'}, - {"aacute", '\U000000E1'}, - {"Acirc", '\U000000C2'}, - {"acirc", '\U000000E2'}, - {"acute", '\U000000B4'}, - {"AElig", '\U000000C6'}, - {"aelig", '\U000000E6'}, - {"Agrave", '\U000000C0'}, - {"agrave", '\U000000E0'}, - {"AMP", '\U00000026'}, - {"amp", '\U00000026'}, - {"Aring", '\U000000C5'}, - {"aring", '\U000000E5'}, - {"Atilde", '\U000000C3'}, - {"atilde", '\U000000E3'}, - {"Auml", '\U000000C4'}, - {"auml", '\U000000E4'}, - {"brvbar", '\U000000A6'}, - {"Ccedil", '\U000000C7'}, - {"ccedil", '\U000000E7'}, - {"cedil", '\U000000B8'}, - {"cent", '\U000000A2'}, - {"COPY", '\U000000A9'}, - {"copy", '\U000000A9'}, - {"curren", '\U000000A4'}, - {"deg", '\U000000B0'}, - {"divide", '\U000000F7'}, - {"Eacute", '\U000000C9'}, - {"eacute", '\U000000E9'}, - {"Ecirc", '\U000000CA'}, - {"ecirc", '\U000000EA'}, - {"Egrave", '\U000000C8'}, - {"egrave", '\U000000E8'}, - {"ETH", '\U000000D0'}, - {"eth", '\U000000F0'}, - {"Euml", '\U000000CB'}, - {"euml", '\U000000EB'}, - {"frac12", '\U000000BD'}, - {"frac14", '\U000000BC'}, - {"frac34", '\U000000BE'}, - {"GT", '\U0000003E'}, - {"gt", '\U0000003E'}, - {"Iacute", '\U000000CD'}, - {"iacute", '\U000000ED'}, - {"Icirc", '\U000000CE'}, - {"icirc", '\U000000EE'}, - {"iexcl", '\U000000A1'}, - {"Igrave", '\U000000CC'}, - {"igrave", '\U000000EC'}, - {"iquest", '\U000000BF'}, - {"Iuml", '\U000000CF'}, - {"iuml", '\U000000EF'}, - {"laquo", '\U000000AB'}, - {"LT", '\U0000003C'}, - {"lt", '\U0000003C'}, - {"macr", '\U000000AF'}, - {"micro", '\U000000B5'}, - {"middot", '\U000000B7'}, - {"nbsp", '\U000000A0'}, - {"not", '\U000000AC'}, - {"Ntilde", '\U000000D1'}, - {"ntilde", '\U000000F1'}, - {"Oacute", '\U000000D3'}, - {"oacute", '\U000000F3'}, - {"Ocirc", '\U000000D4'}, - {"ocirc", '\U000000F4'}, - {"Ograve", '\U000000D2'}, - {"ograve", '\U000000F2'}, - {"ordf", '\U000000AA'}, - {"ordm", '\U000000BA'}, - {"Oslash", '\U000000D8'}, - {"oslash", '\U000000F8'}, - {"Otilde", '\U000000D5'}, - {"otilde", '\U000000F5'}, - {"Ouml", '\U000000D6'}, - {"ouml", '\U000000F6'}, - {"para", '\U000000B6'}, - {"plusmn", '\U000000B1'}, - {"pound", '\U000000A3'}, - {"QUOT", '\U00000022'}, - {"quot", '\U00000022'}, - {"raquo", '\U000000BB'}, - {"REG", '\U000000AE'}, - {"reg", '\U000000AE'}, - {"sect", '\U000000A7'}, - {"shy", '\U000000AD'}, - {"sup1", '\U000000B9'}, - {"sup2", '\U000000B2'}, - {"sup3", '\U000000B3'}, - {"szlig", '\U000000DF'}, - {"THORN", '\U000000DE'}, - {"thorn", '\U000000FE'}, - {"times", '\U000000D7'}, - {"Uacute", '\U000000DA'}, - {"uacute", '\U000000FA'}, - {"Ucirc", '\U000000DB'}, - {"ucirc", '\U000000FB'}, - {"Ugrave", '\U000000D9'}, - {"ugrave", '\U000000F9'}, - {"uml", '\U000000A8'}, - {"Uuml", '\U000000DC'}, - {"uuml", '\U000000FC'}, - {"Yacute", '\U000000DD'}, - {"yacute", '\U000000FD'}, - {"yen", '\U000000A5'}, - {"yuml", '\U000000FF'}, -} - -@(private="file", rodata) -_entity2 := [?]struct{n: string, r: [2]rune}{ - {"acE;", {'\u223E', '\u0333'}}, - {"bne;", {'\u003D', '\u20E5'}}, - {"bnequiv;", {'\u2261', '\u20E5'}}, - {"caps;", {'\u2229', '\uFE00'}}, - {"cups;", {'\u222A', '\uFE00'}}, - {"fjlig;", {'\u0066', '\u006A'}}, - {"gesl;", {'\u22DB', '\uFE00'}}, - {"gvertneqq;", {'\u2269', '\uFE00'}}, - {"gvnE;", {'\u2269', '\uFE00'}}, - {"lates;", {'\u2AAD', '\uFE00'}}, - {"lesg;", {'\u22DA', '\uFE00'}}, - {"lvertneqq;", {'\u2268', '\uFE00'}}, - {"lvnE;", {'\u2268', '\uFE00'}}, - {"nang;", {'\u2220', '\u20D2'}}, - {"napE;", {'\u2A70', '\u0338'}}, - {"napid;", {'\u224B', '\u0338'}}, - {"nbump;", {'\u224E', '\u0338'}}, - {"nbumpe;", {'\u224F', '\u0338'}}, - {"ncongdot;", {'\u2A6D', '\u0338'}}, - {"nedot;", {'\u2250', '\u0338'}}, - {"nesim;", {'\u2242', '\u0338'}}, - {"ngE;", {'\u2267', '\u0338'}}, - {"ngeqq;", {'\u2267', '\u0338'}}, - {"ngeqslant;", {'\u2A7E', '\u0338'}}, - {"nges;", {'\u2A7E', '\u0338'}}, - {"nGg;", {'\u22D9', '\u0338'}}, - {"nGt;", {'\u226B', '\u20D2'}}, - {"nGtv;", {'\u226B', '\u0338'}}, - {"nlE;", {'\u2266', '\u0338'}}, - {"nleqq;", {'\u2266', '\u0338'}}, - {"nleqslant;", {'\u2A7D', '\u0338'}}, - {"nles;", {'\u2A7D', '\u0338'}}, - {"nLl;", {'\u22D8', '\u0338'}}, - {"nLt;", {'\u226A', '\u20D2'}}, - {"nLtv;", {'\u226A', '\u0338'}}, - {"NotEqualTilde;", {'\u2242', '\u0338'}}, - {"NotGreaterFullEqual;", {'\u2267', '\u0338'}}, - {"NotGreaterGreater;", {'\u226B', '\u0338'}}, - {"NotGreaterSlantEqual;", {'\u2A7E', '\u0338'}}, - {"NotHumpDownHump;", {'\u224E', '\u0338'}}, - {"NotHumpEqual;", {'\u224F', '\u0338'}}, - {"notindot;", {'\u22F5', '\u0338'}}, - {"notinE;", {'\u22F9', '\u0338'}}, - {"NotLeftTriangleBar;", {'\u29CF', '\u0338'}}, - {"NotLessLess;", {'\u226A', '\u0338'}}, - {"NotLessSlantEqual;", {'\u2A7D', '\u0338'}}, - {"NotNestedGreaterGreater;", {'\u2AA2', '\u0338'}}, - {"NotNestedLessLess;", {'\u2AA1', '\u0338'}}, - {"NotPrecedesEqual;", {'\u2AAF', '\u0338'}}, - {"NotRightTriangleBar;", {'\u29D0', '\u0338'}}, - {"NotSquareSubset;", {'\u228F', '\u0338'}}, - {"NotSquareSuperset;", {'\u2290', '\u0338'}}, - {"NotSubset;", {'\u2282', '\u20D2'}}, - {"NotSucceedsEqual;", {'\u2AB0', '\u0338'}}, - {"NotSucceedsTilde;", {'\u227F', '\u0338'}}, - {"NotSuperset;", {'\u2283', '\u20D2'}}, - {"nparsl;", {'\u2AFD', '\u20E5'}}, - {"npart;", {'\u2202', '\u0338'}}, - {"npre;", {'\u2AAF', '\u0338'}}, - {"npreceq;", {'\u2AAF', '\u0338'}}, - {"nrarrc;", {'\u2933', '\u0338'}}, - {"nrarrw;", {'\u219D', '\u0338'}}, - {"nsce;", {'\u2AB0', '\u0338'}}, - {"nsubE;", {'\u2AC5', '\u0338'}}, - {"nsubset;", {'\u2282', '\u20D2'}}, - {"nsubseteqq;", {'\u2AC5', '\u0338'}}, - {"nsucceq;", {'\u2AB0', '\u0338'}}, - {"nsupE;", {'\u2AC6', '\u0338'}}, - {"nsupset;", {'\u2283', '\u20D2'}}, - {"nsupseteqq;", {'\u2AC6', '\u0338'}}, - {"nvap;", {'\u224D', '\u20D2'}}, - {"nvge;", {'\u2265', '\u20D2'}}, - {"nvgt;", {'\u003E', '\u20D2'}}, - {"nvle;", {'\u2264', '\u20D2'}}, - {"nvlt;", {'\u003C', '\u20D2'}}, - {"nvltrie;", {'\u22B4', '\u20D2'}}, - {"nvrtrie;", {'\u22B5', '\u20D2'}}, - {"nvsim;", {'\u223C', '\u20D2'}}, - {"race;", {'\u223D', '\u0331'}}, - {"smtes;", {'\u2AAC', '\uFE00'}}, - {"sqcaps;", {'\u2293', '\uFE00'}}, - {"sqcups;", {'\u2294', '\uFE00'}}, - {"ThickSpace;", {'\u205F', '\u200A'}}, - {"varsubsetneq;", {'\u228A', '\uFE00'}}, - {"varsubsetneqq;", {'\u2ACB', '\uFE00'}}, - {"varsupsetneq;", {'\u228B', '\uFE00'}}, - {"varsupsetneqq;", {'\u2ACC', '\uFE00'}}, - {"vnsub;", {'\u2282', '\u20D2'}}, - {"vnsup;", {'\u2283', '\u20D2'}}, - {"vsubne;", {'\u228A', '\uFE00'}}, - {"vsubnE;", {'\u2ACB', '\uFE00'}}, - {"vsupne;", {'\u228B', '\uFE00'}}, - {"vsupnE;", {'\u2ACC', '\uFE00'}}, -} \ No newline at end of file diff --git a/core/unicode/tools/generate_entity_table.odin b/core/unicode/tools/generate_entity_table.odin index 020ef94e4..b5ee0d22d 100644 --- a/core/unicode/tools/generate_entity_table.odin +++ b/core/unicode/tools/generate_entity_table.odin @@ -18,7 +18,7 @@ OPTIONS :: xml.Options{ flags = { .Ignore_Unsupported, }, expected_doctype = "un Entity :: struct { name: string, - codepoint: rune, + codepoints: [2]rune, description: string, } @@ -57,7 +57,10 @@ generate_encoding_entity_table :: proc() { fmt.printf("Found `` with %v children.\n", len(charlist.value)) entity_map: map[string]Entity + defer delete(entity_map) + names: [dynamic]string + defer delete(names) min_name_length := max(int) max_name_length := min(int) @@ -78,7 +81,13 @@ generate_encoding_entity_table :: proc() { fmt.eprintln("`` attribute not found.") os.exit(1) } else { - codepoint := strconv.atoi(codepoint_string) + r1, _, r2 := strings.partition(codepoint_string, "-") + + codepoint, codepoint2: int + codepoint, _ = strconv.parse_int(r1) + if r2 != "" { + codepoint2, _ = strconv.parse_int(r1) + } desc, desc_ok := xml.find_child_by_ident(doc, id, "description") description := "" @@ -115,7 +124,7 @@ generate_encoding_entity_table :: proc() { e := Entity{ name = name, - codepoint = rune(codepoint), + codepoints = {rune(codepoint), rune(codepoint2)}, description = description, } @@ -162,22 +171,22 @@ generate_encoding_entity_table :: proc() { entity_name - a string, like "copy" that describes a user-encoded Unicode entity as used in XML. Returns: - "decoded" - The decoded rune if found by name, or -1 otherwise. - "ok" - true if found, false if not. + "decoded" - The decoded runes if found by name, or all zero otherwise. + "rune_count" - The number of decoded runes + "ok" - true if found, false if not. IMPORTANT: XML processors (including browsers) treat these names as case-sensitive. So do we. */ -named_xml_entity_to_rune :: proc(name: string) -> (decoded: rune, ok: bool) { +named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: int, ok: bool) { /* Early out if the name is too short or too long. min as a precaution in case the generated table has a bogus value. */ if len(name) < min(1, XML_NAME_TO_RUNE_MIN_LENGTH) || len(name) > XML_NAME_TO_RUNE_MAX_LENGTH { - return -1, false + return } - switch rune(name[0]) { -`) + switch rune(name[0]) {`) prefix := '?' should_close := false @@ -200,13 +209,17 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: rune, ok: bool) { fmt.wprintf(w, " ") } fmt.wprintf(w, " // %v\n", e.description) - fmt.wprintf(w, "\t\t\treturn %v, true\n", rune_to_string(e.codepoint)) + if e.codepoints[1] != 0 { + fmt.wprintf(w, "\t\t\treturn {{%q, %q}}, 2, true\n", e.codepoints[0], e.codepoints[1]) + } else { + fmt.wprintf(w, "\t\t\treturn {{%q, 0}}, 1, true\n", e.codepoints[0]) + } should_close = true } fmt.wprintln(w, "\t\t}") fmt.wprintln(w, "\t}") - fmt.wprintln(w, "\treturn -1, false") + fmt.wprintln(w, "\treturn") fmt.wprintln(w, "}\n") fmt.wprintln(w, GENERATED) @@ -221,12 +234,6 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: rune, ok: bool) { } else { fmt.printf("Failed to write generated \"%v\".\n", generated_filename) } - - delete(entity_map) - delete(names) - for &name in names { - free(&name) - } } GENERATED :: `/* @@ -262,14 +269,6 @@ TABLE_FILE_PROLOG :: `/* */ ` -rune_to_string :: proc(r: rune) -> (res: string) { - res = fmt.tprintf("%08x", int(r)) - for len(res) > 2 && res[:2] == "00" { - res = res[2:] - } - return fmt.tprintf("rune(0x%v)", res) -} - is_dotted_name :: proc(name: string) -> (dotted: bool) { for r in name { if r == '.' { return true} From 871cedc70173503d6cfec16d8533c3b3520b6afb Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Jan 2026 11:47:51 +0000 Subject: [PATCH 137/212] Keep `-vet` happy --- core/encoding/entity/entity.odin | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/core/encoding/entity/entity.odin b/core/encoding/entity/entity.odin index 0d455ef88..95a404a81 100644 --- a/core/encoding/entity/entity.odin +++ b/core/encoding/entity/entity.odin @@ -300,17 +300,17 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo w := 0 for c in b { - s := "" + x := "" switch c { - case '&': s = "&" - case '\'': s = "'" - case '<': s = "<" - case '>': s = ">" - case '"': s = """ + case '&': x = "&" + case '\'': x = "'" + case '<': x = "<" + case '>': x = ">" + case '"': x = """ } - if s != "" { - copy(t[w:], s) - w += len(s) + if x != "" { + copy(t[w:], x) + w += len(x) } else { t[w] = c w += 1 From 625e17212d5e99a99ec5e35defa2ad0bb6a39a10 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Jan 2026 12:13:03 +0000 Subject: [PATCH 138/212] Correct 2 rune printing --- core/unicode/tools/generate_entity_table.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/unicode/tools/generate_entity_table.odin b/core/unicode/tools/generate_entity_table.odin index b5ee0d22d..9517b632b 100644 --- a/core/unicode/tools/generate_entity_table.odin +++ b/core/unicode/tools/generate_entity_table.odin @@ -86,7 +86,7 @@ generate_encoding_entity_table :: proc() { codepoint, codepoint2: int codepoint, _ = strconv.parse_int(r1) if r2 != "" { - codepoint2, _ = strconv.parse_int(r1) + codepoint2, _ = strconv.parse_int(r2) } desc, desc_ok := xml.find_child_by_ident(doc, id, "description") From ba20bfa5f45d4f4357bbbce5ccf931b27cf38431 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Jan 2026 12:17:28 +0000 Subject: [PATCH 139/212] Update generated.odin --- core/encoding/entity/generated.odin | 202 ++++++++++++++-------------- 1 file changed, 101 insertions(+), 101 deletions(-) diff --git a/core/encoding/entity/generated.odin b/core/encoding/entity/generated.odin index 553554976..0096c8199 100644 --- a/core/encoding/entity/generated.odin +++ b/core/encoding/entity/generated.odin @@ -794,7 +794,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "NotEqual": // NOT EQUAL TO return {'\u2260', 0}, 1, true case "NotEqualTilde": // MINUS TILDE with slash - return {'\u2242', '\u2242'}, 2, true + return {'\u2242', '\u0338'}, 2, true case "NotExists": // THERE DOES NOT EXIST return {'\u2204', 0}, 1, true case "NotGreater": // NOT GREATER-THAN @@ -802,23 +802,23 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "NotGreaterEqual": // NEITHER GREATER-THAN NOR EQUAL TO return {'\u2271', 0}, 1, true case "NotGreaterFullEqual": // GREATER-THAN OVER EQUAL TO with slash - return {'\u2267', '\u2267'}, 2, true + return {'\u2267', '\u0338'}, 2, true case "NotGreaterGreater": // MUCH GREATER THAN with slash - return {'\u226b', '\u226b'}, 2, true + return {'\u226b', '\u0338'}, 2, true case "NotGreaterLess": // NEITHER GREATER-THAN NOR LESS-THAN return {'\u2279', 0}, 1, true case "NotGreaterSlantEqual": // GREATER-THAN OR SLANTED EQUAL TO with slash - return {'\u2a7e', '\u2a7e'}, 2, true + return {'\u2a7e', '\u0338'}, 2, true case "NotGreaterTilde": // NEITHER GREATER-THAN NOR EQUIVALENT TO return {'\u2275', 0}, 1, true case "NotHumpDownHump": // GEOMETRICALLY EQUIVALENT TO with slash - return {'\u224e', '\u224e'}, 2, true + return {'\u224e', '\u0338'}, 2, true case "NotHumpEqual": // DIFFERENCE BETWEEN with slash - return {'\u224f', '\u224f'}, 2, true + return {'\u224f', '\u0338'}, 2, true case "NotLeftTriangle": // NOT NORMAL SUBGROUP OF return {'\u22ea', 0}, 1, true case "NotLeftTriangleBar": // LEFT TRIANGLE BESIDE VERTICAL BAR with slash - return {'\u29cf', '\u29cf'}, 2, true + return {'\u29cf', '\u0338'}, 2, true case "NotLeftTriangleEqual": // NOT NORMAL SUBGROUP OF OR EQUAL TO return {'\u22ec', 0}, 1, true case "NotLess": // NOT LESS-THAN @@ -828,19 +828,19 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "NotLessGreater": // NEITHER LESS-THAN NOR GREATER-THAN return {'\u2278', 0}, 1, true case "NotLessLess": // MUCH LESS THAN with slash - return {'\u226a', '\u226a'}, 2, true + return {'\u226a', '\u0338'}, 2, true case "NotLessSlantEqual": // LESS-THAN OR SLANTED EQUAL TO with slash - return {'\u2a7d', '\u2a7d'}, 2, true + return {'\u2a7d', '\u0338'}, 2, true case "NotLessTilde": // NEITHER LESS-THAN NOR EQUIVALENT TO return {'\u2274', 0}, 1, true case "NotNestedGreaterGreater": // DOUBLE NESTED GREATER-THAN with slash - return {'\u2aa2', '\u2aa2'}, 2, true + return {'\u2aa2', '\u0338'}, 2, true case "NotNestedLessLess": // DOUBLE NESTED LESS-THAN with slash - return {'\u2aa1', '\u2aa1'}, 2, true + return {'\u2aa1', '\u0338'}, 2, true case "NotPrecedes": // DOES NOT PRECEDE return {'\u2280', 0}, 1, true case "NotPrecedesEqual": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash - return {'\u2aaf', '\u2aaf'}, 2, true + return {'\u2aaf', '\u0338'}, 2, true case "NotPrecedesSlantEqual": // DOES NOT PRECEDE OR EQUAL return {'\u22e0', 0}, 1, true case "NotReverseElement": // DOES NOT CONTAIN AS MEMBER @@ -848,31 +848,31 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "NotRightTriangle": // DOES NOT CONTAIN AS NORMAL SUBGROUP return {'\u22eb', 0}, 1, true case "NotRightTriangleBar": // VERTICAL BAR BESIDE RIGHT TRIANGLE with slash - return {'\u29d0', '\u29d0'}, 2, true + return {'\u29d0', '\u0338'}, 2, true case "NotRightTriangleEqual": // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL return {'\u22ed', 0}, 1, true case "NotSquareSubset": // SQUARE IMAGE OF with slash - return {'\u228f', '\u228f'}, 2, true + return {'\u228f', '\u0338'}, 2, true case "NotSquareSubsetEqual": // NOT SQUARE IMAGE OF OR EQUAL TO return {'\u22e2', 0}, 1, true case "NotSquareSuperset": // SQUARE ORIGINAL OF with slash - return {'\u2290', '\u2290'}, 2, true + return {'\u2290', '\u0338'}, 2, true case "NotSquareSupersetEqual": // NOT SQUARE ORIGINAL OF OR EQUAL TO return {'\u22e3', 0}, 1, true case "NotSubset": // SUBSET OF with vertical line - return {'\u2282', '\u2282'}, 2, true + return {'\u2282', '\u20d2'}, 2, true case "NotSubsetEqual": // NEITHER A SUBSET OF NOR EQUAL TO return {'\u2288', 0}, 1, true case "NotSucceeds": // DOES NOT SUCCEED return {'\u2281', 0}, 1, true case "NotSucceedsEqual": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash - return {'\u2ab0', '\u2ab0'}, 2, true + return {'\u2ab0', '\u0338'}, 2, true case "NotSucceedsSlantEqual": // DOES NOT SUCCEED OR EQUAL return {'\u22e1', 0}, 1, true case "NotSucceedsTilde": // SUCCEEDS OR EQUIVALENT TO with slash - return {'\u227f', '\u227f'}, 2, true + return {'\u227f', '\u0338'}, 2, true case "NotSuperset": // SUPERSET OF with vertical line - return {'\u2283', '\u2283'}, 2, true + return {'\u2283', '\u20d2'}, 2, true case "NotSupersetEqual": // NEITHER A SUPERSET OF NOR EQUAL TO return {'\u2289', 0}, 1, true case "NotTilde": // NOT TILDE @@ -1224,7 +1224,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "Thetav": // GREEK CAPITAL THETA SYMBOL return {'\u03f4', 0}, 1, true case "ThickSpace": // space of width 5/18 em - return {'\u205f', '\u205f'}, 2, true + return {'\u205f', '\u200a'}, 2, true case "ThinSpace": // THIN SPACE return {'\u2009', 0}, 1, true case "Tilde": // TILDE OPERATOR @@ -1454,7 +1454,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "ac": // INVERTED LAZY S return {'\u223e', 0}, 1, true case "acE": // INVERTED LAZY S with double underline - return {'\u223e', '\u223e'}, 2, true + return {'\u223e', '\u0333'}, 2, true case "acd": // SINE WAVE return {'\u223f', 0}, 1, true case "acirc": // LATIN SMALL LETTER A WITH CIRCUMFLEX @@ -1788,9 +1788,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "bluhar": // LEFTWARDS HARPOON WITH BARB UP FROM BAR return {'\u295a', 0}, 1, true case "bne": // EQUALS SIGN with reverse slash - return {'=', '='}, 2, true + return {'=', '\u20e5'}, 2, true case "bnequiv": // IDENTICAL TO with reverse slash - return {'\u2261', '\u2261'}, 2, true + return {'\u2261', '\u20e5'}, 2, true case "bnot": // REVERSED NOT SIGN return {'\u2310', 0}, 1, true case "bopf": // MATHEMATICAL DOUBLE-STRUCK SMALL B @@ -1952,7 +1952,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "capint": // INTEGRAL WITH INTERSECTION return {'\u2a19', 0}, 1, true case "caps": // INTERSECTION with serifs - return {'\u2229', '\u2229'}, 2, true + return {'\u2229', '\ufe00'}, 2, true case "caret": // CARET INSERTION POINT return {'\u2041', 0}, 1, true case "caron": // CARON @@ -2112,7 +2112,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "cupre": // PRECEDES OR EQUAL TO return {'\u227c', 0}, 1, true case "cups": // UNION with serifs - return {'\u222a', '\u222a'}, 2, true + return {'\u222a', '\ufe00'}, 2, true case "curarr": // CLOCKWISE TOP SEMICIRCLE ARROW return {'\u21b7', 0}, 1, true case "curarrm": // TOP ARC CLOCKWISE ARROW WITH MINUS @@ -2478,7 +2478,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "filig": // LATIN SMALL LIGATURE FI return {'\ufb01', 0}, 1, true case "fjlig": // fj ligature - return {'f', 'f'}, 2, true + return {'f', 'j'}, 2, true case "flat": // MUSIC FLAT SIGN return {'\u266d', 0}, 1, true case "fllig": // LATIN SMALL LIGATURE FL @@ -2580,7 +2580,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "gesdotol": // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT return {'\u2a84', 0}, 1, true case "gesl": // GREATER-THAN slanted EQUAL TO OR LESS-THAN - return {'\u22db', '\u22db'}, 2, true + return {'\u22db', '\ufe00'}, 2, true case "gesles": // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL return {'\u2a94', 0}, 1, true case "gfr": // MATHEMATICAL FRAKTUR SMALL G @@ -2660,9 +2660,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "gtrsim": // GREATER-THAN OR EQUIVALENT TO return {'\u2273', 0}, 1, true case "gvertneqq": // GREATER-THAN BUT NOT EQUAL TO - with vertical stroke - return {'\u2269', '\u2269'}, 2, true + return {'\u2269', '\ufe00'}, 2, true case "gvnE": // GREATER-THAN BUT NOT EQUAL TO - with vertical stroke - return {'\u2269', '\u2269'}, 2, true + return {'\u2269', '\ufe00'}, 2, true } case 'h': @@ -2958,7 +2958,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "late": // LARGER THAN OR EQUAL TO return {'\u2aad', 0}, 1, true case "lates": // LARGER THAN OR slanted EQUAL - return {'\u2aad', '\u2aad'}, 2, true + return {'\u2aad', '\ufe00'}, 2, true case "lbarr": // LEFTWARDS DOUBLE DASH ARROW return {'\u290c', 0}, 1, true case "lbbrk": // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT @@ -3042,7 +3042,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "lesdotor": // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT return {'\u2a83', 0}, 1, true case "lesg": // LESS-THAN slanted EQUAL TO OR GREATER-THAN - return {'\u22da', '\u22da'}, 2, true + return {'\u22da', '\ufe00'}, 2, true case "lesges": // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL return {'\u2a93', 0}, 1, true case "lessapprox": // LESS-THAN OR APPROXIMATE @@ -3232,9 +3232,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "lurushar": // LEFT BARB UP RIGHT BARB UP HARPOON return {'\u294e', 0}, 1, true case "lvertneqq": // LESS-THAN BUT NOT EQUAL TO - with vertical stroke - return {'\u2268', '\u2268'}, 2, true + return {'\u2268', '\ufe00'}, 2, true case "lvnE": // LESS-THAN BUT NOT EQUAL TO - with vertical stroke - return {'\u2268', '\u2268'}, 2, true + return {'\u2268', '\ufe00'}, 2, true } case 'm': @@ -3320,21 +3320,21 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case 'n': switch name { case "nGg": // VERY MUCH GREATER-THAN with slash - return {'\u22d9', '\u22d9'}, 2, true + return {'\u22d9', '\u0338'}, 2, true case "nGt": // MUCH GREATER THAN with vertical line - return {'\u226b', '\u226b'}, 2, true + return {'\u226b', '\u20d2'}, 2, true case "nGtv": // MUCH GREATER THAN with slash - return {'\u226b', '\u226b'}, 2, true + return {'\u226b', '\u0338'}, 2, true case "nLeftarrow": // LEFTWARDS DOUBLE ARROW WITH STROKE return {'\u21cd', 0}, 1, true case "nLeftrightarrow": // LEFT RIGHT DOUBLE ARROW WITH STROKE return {'\u21ce', 0}, 1, true case "nLl": // VERY MUCH LESS-THAN with slash - return {'\u22d8', '\u22d8'}, 2, true + return {'\u22d8', '\u0338'}, 2, true case "nLt": // MUCH LESS THAN with vertical line - return {'\u226a', '\u226a'}, 2, true + return {'\u226a', '\u20d2'}, 2, true case "nLtv": // MUCH LESS THAN with slash - return {'\u226a', '\u226a'}, 2, true + return {'\u226a', '\u0338'}, 2, true case "nRightarrow": // RIGHTWARDS DOUBLE ARROW WITH STROKE return {'\u21cf', 0}, 1, true case "nVDash": // NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE @@ -3346,13 +3346,13 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nacute": // LATIN SMALL LETTER N WITH ACUTE return {'\u0144', 0}, 1, true case "nang": // ANGLE with vertical line - return {'\u2220', '\u2220'}, 2, true + return {'\u2220', '\u20d2'}, 2, true case "nap": // NOT ALMOST EQUAL TO return {'\u2249', 0}, 1, true case "napE": // APPROXIMATELY EQUAL OR EQUAL TO with slash - return {'\u2a70', '\u2a70'}, 2, true + return {'\u2a70', '\u0338'}, 2, true case "napid": // TRIPLE TILDE with slash - return {'\u224b', '\u224b'}, 2, true + return {'\u224b', '\u0338'}, 2, true case "napos": // LATIN SMALL LETTER N PRECEDED BY APOSTROPHE return {'\u0149', 0}, 1, true case "napprox": // NOT ALMOST EQUAL TO @@ -3366,9 +3366,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nbsp": // NO-BREAK SPACE return {'\u00a0', 0}, 1, true case "nbump": // GEOMETRICALLY EQUIVALENT TO with slash - return {'\u224e', '\u224e'}, 2, true + return {'\u224e', '\u0338'}, 2, true case "nbumpe": // DIFFERENCE BETWEEN with slash - return {'\u224f', '\u224f'}, 2, true + return {'\u224f', '\u0338'}, 2, true case "ncap": // INTERSECTION WITH OVERBAR return {'\u2a43', 0}, 1, true case "ncaron": // LATIN SMALL LETTER N WITH CARON @@ -3378,7 +3378,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "ncong": // NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO return {'\u2247', 0}, 1, true case "ncongdot": // CONGRUENT WITH DOT ABOVE with slash - return {'\u2a6d', '\u2a6d'}, 2, true + return {'\u2a6d', '\u0338'}, 2, true case "ncup": // UNION WITH OVERBAR return {'\u2a42', 0}, 1, true case "ncy": // CYRILLIC SMALL LETTER EN @@ -3396,7 +3396,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nearrow": // NORTH EAST ARROW return {'\u2197', 0}, 1, true case "nedot": // APPROACHES THE LIMIT with slash - return {'\u2250', '\u2250'}, 2, true + return {'\u2250', '\u0338'}, 2, true case "neonwarr": // NORTH EAST ARROW CROSSING NORTH WEST ARROW return {'\u2931', 0}, 1, true case "neosearr": // NORTH EAST ARROW CROSSING SOUTH EAST ARROW @@ -3406,7 +3406,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nesear": // NORTH EAST ARROW AND SOUTH EAST ARROW return {'\u2928', 0}, 1, true case "nesim": // MINUS TILDE with slash - return {'\u2242', '\u2242'}, 2, true + return {'\u2242', '\u0338'}, 2, true case "neswsarr": // NORTH EAST AND SOUTH WEST ARROW return {'\u2922', 0}, 1, true case "nexist": // THERE DOES NOT EXIST @@ -3416,17 +3416,17 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nfr": // MATHEMATICAL FRAKTUR SMALL N return {'\U0001d52b', 0}, 1, true case "ngE": // GREATER-THAN OVER EQUAL TO with slash - return {'\u2267', '\u2267'}, 2, true + return {'\u2267', '\u0338'}, 2, true case "nge": // NEITHER GREATER-THAN NOR EQUAL TO return {'\u2271', 0}, 1, true case "ngeq": // NEITHER GREATER-THAN NOR EQUAL TO return {'\u2271', 0}, 1, true case "ngeqq": // GREATER-THAN OVER EQUAL TO with slash - return {'\u2267', '\u2267'}, 2, true + return {'\u2267', '\u0338'}, 2, true case "ngeqslant": // GREATER-THAN OR SLANTED EQUAL TO with slash - return {'\u2a7e', '\u2a7e'}, 2, true + return {'\u2a7e', '\u0338'}, 2, true case "nges": // GREATER-THAN OR SLANTED EQUAL TO with slash - return {'\u2a7e', '\u2a7e'}, 2, true + return {'\u2a7e', '\u0338'}, 2, true case "ngr": // GREEK SMALL LETTER NU return {'\u03bd', 0}, 1, true case "ngsim": // NEITHER GREATER-THAN NOR EQUIVALENT TO @@ -3454,7 +3454,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nlArr": // LEFTWARDS DOUBLE ARROW WITH STROKE return {'\u21cd', 0}, 1, true case "nlE": // LESS-THAN OVER EQUAL TO with slash - return {'\u2266', '\u2266'}, 2, true + return {'\u2266', '\u0338'}, 2, true case "nlarr": // LEFTWARDS ARROW WITH STROKE return {'\u219a', 0}, 1, true case "nldr": // TWO DOT LEADER @@ -3468,11 +3468,11 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nleq": // NEITHER LESS-THAN NOR EQUAL TO return {'\u2270', 0}, 1, true case "nleqq": // LESS-THAN OVER EQUAL TO with slash - return {'\u2266', '\u2266'}, 2, true + return {'\u2266', '\u0338'}, 2, true case "nleqslant": // LESS-THAN OR SLANTED EQUAL TO with slash - return {'\u2a7d', '\u2a7d'}, 2, true + return {'\u2a7d', '\u0338'}, 2, true case "nles": // LESS-THAN OR SLANTED EQUAL TO with slash - return {'\u2a7d', '\u2a7d'}, 2, true + return {'\u2a7d', '\u0338'}, 2, true case "nless": // NOT LESS-THAN return {'\u226e', 0}, 1, true case "nlsim": // NEITHER LESS-THAN NOR EQUIVALENT TO @@ -3484,7 +3484,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nltrie": // NOT NORMAL SUBGROUP OF OR EQUAL TO return {'\u22ec', 0}, 1, true case "nltrivb": // LEFT TRIANGLE BESIDE VERTICAL BAR with slash - return {'\u29cf', '\u29cf'}, 2, true + return {'\u29cf', '\u0338'}, 2, true case "nmid": // DOES NOT DIVIDE return {'\u2224', 0}, 1, true case "nopf": // MATHEMATICAL DOUBLE-STRUCK SMALL N @@ -3494,9 +3494,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "notin": // NOT AN ELEMENT OF return {'\u2209', 0}, 1, true case "notinE": // ELEMENT OF WITH TWO HORIZONTAL STROKES with slash - return {'\u22f9', '\u22f9'}, 2, true + return {'\u22f9', '\u0338'}, 2, true case "notindot": // ELEMENT OF WITH DOT ABOVE with slash - return {'\u22f5', '\u22f5'}, 2, true + return {'\u22f5', '\u0338'}, 2, true case "notinva": // NOT AN ELEMENT OF return {'\u2209', 0}, 1, true case "notinvb": // SMALL ELEMENT OF WITH OVERBAR @@ -3516,9 +3516,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nparallel": // NOT PARALLEL TO return {'\u2226', 0}, 1, true case "nparsl": // DOUBLE SOLIDUS OPERATOR with reverse slash - return {'\u2afd', '\u2afd'}, 2, true + return {'\u2afd', '\u20e5'}, 2, true case "npart": // PARTIAL DIFFERENTIAL with slash - return {'\u2202', '\u2202'}, 2, true + return {'\u2202', '\u0338'}, 2, true case "npolint": // LINE INTEGRATION NOT INCLUDING THE POLE return {'\u2a14', 0}, 1, true case "npr": // DOES NOT PRECEDE @@ -3526,21 +3526,21 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nprcue": // DOES NOT PRECEDE OR EQUAL return {'\u22e0', 0}, 1, true case "npre": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash - return {'\u2aaf', '\u2aaf'}, 2, true + return {'\u2aaf', '\u0338'}, 2, true case "nprec": // DOES NOT PRECEDE return {'\u2280', 0}, 1, true case "npreceq": // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN with slash - return {'\u2aaf', '\u2aaf'}, 2, true + return {'\u2aaf', '\u0338'}, 2, true case "nprsim": // PRECEDES OR EQUIVALENT TO with slash - return {'\u227e', '\u227e'}, 2, true + return {'\u227e', '\u0338'}, 2, true case "nrArr": // RIGHTWARDS DOUBLE ARROW WITH STROKE return {'\u21cf', 0}, 1, true case "nrarr": // RIGHTWARDS ARROW WITH STROKE return {'\u219b', 0}, 1, true case "nrarrc": // WAVE ARROW POINTING DIRECTLY RIGHT with slash - return {'\u2933', '\u2933'}, 2, true + return {'\u2933', '\u0338'}, 2, true case "nrarrw": // RIGHTWARDS WAVE ARROW with slash - return {'\u219d', '\u219d'}, 2, true + return {'\u219d', '\u0338'}, 2, true case "nrightarrow": // RIGHTWARDS ARROW WITH STROKE return {'\u219b', 0}, 1, true case "nrtri": // DOES NOT CONTAIN AS NORMAL SUBGROUP @@ -3548,19 +3548,19 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nrtrie": // DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL return {'\u22ed', 0}, 1, true case "nsGt": // DOUBLE NESTED GREATER-THAN with slash - return {'\u2aa2', '\u2aa2'}, 2, true + return {'\u2aa2', '\u0338'}, 2, true case "nsLt": // DOUBLE NESTED LESS-THAN with slash - return {'\u2aa1', '\u2aa1'}, 2, true + return {'\u2aa1', '\u0338'}, 2, true case "nsc": // DOES NOT SUCCEED return {'\u2281', 0}, 1, true case "nsccue": // DOES NOT SUCCEED OR EQUAL return {'\u22e1', 0}, 1, true case "nsce": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash - return {'\u2ab0', '\u2ab0'}, 2, true + return {'\u2ab0', '\u0338'}, 2, true case "nscr": // MATHEMATICAL SCRIPT SMALL N return {'\U0001d4c3', 0}, 1, true case "nscsim": // SUCCEEDS OR EQUIVALENT TO with slash - return {'\u227f', '\u227f'}, 2, true + return {'\u227f', '\u0338'}, 2, true case "nshortmid": // DOES NOT DIVIDE return {'\u2224', 0}, 1, true case "nshortparallel": // NOT PARALLEL TO @@ -3576,41 +3576,41 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nspar": // NOT PARALLEL TO return {'\u2226', 0}, 1, true case "nsqsub": // SQUARE IMAGE OF with slash - return {'\u228f', '\u228f'}, 2, true + return {'\u228f', '\u0338'}, 2, true case "nsqsube": // NOT SQUARE IMAGE OF OR EQUAL TO return {'\u22e2', 0}, 1, true case "nsqsup": // SQUARE ORIGINAL OF with slash - return {'\u2290', '\u2290'}, 2, true + return {'\u2290', '\u0338'}, 2, true case "nsqsupe": // NOT SQUARE ORIGINAL OF OR EQUAL TO return {'\u22e3', 0}, 1, true case "nsub": // NOT A SUBSET OF return {'\u2284', 0}, 1, true case "nsubE": // SUBSET OF ABOVE EQUALS SIGN with slash - return {'\u2ac5', '\u2ac5'}, 2, true + return {'\u2ac5', '\u0338'}, 2, true case "nsube": // NEITHER A SUBSET OF NOR EQUAL TO return {'\u2288', 0}, 1, true case "nsubset": // SUBSET OF with vertical line - return {'\u2282', '\u2282'}, 2, true + return {'\u2282', '\u20d2'}, 2, true case "nsubseteq": // NEITHER A SUBSET OF NOR EQUAL TO return {'\u2288', 0}, 1, true case "nsubseteqq": // SUBSET OF ABOVE EQUALS SIGN with slash - return {'\u2ac5', '\u2ac5'}, 2, true + return {'\u2ac5', '\u0338'}, 2, true case "nsucc": // DOES NOT SUCCEED return {'\u2281', 0}, 1, true case "nsucceq": // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN with slash - return {'\u2ab0', '\u2ab0'}, 2, true + return {'\u2ab0', '\u0338'}, 2, true case "nsup": // NOT A SUPERSET OF return {'\u2285', 0}, 1, true case "nsupE": // SUPERSET OF ABOVE EQUALS SIGN with slash - return {'\u2ac6', '\u2ac6'}, 2, true + return {'\u2ac6', '\u0338'}, 2, true case "nsupe": // NEITHER A SUPERSET OF NOR EQUAL TO return {'\u2289', 0}, 1, true case "nsupset": // SUPERSET OF with vertical line - return {'\u2283', '\u2283'}, 2, true + return {'\u2283', '\u20d2'}, 2, true case "nsupseteq": // NEITHER A SUPERSET OF NOR EQUAL TO return {'\u2289', 0}, 1, true case "nsupseteqq": // SUPERSET OF ABOVE EQUALS SIGN with slash - return {'\u2ac6', '\u2ac6'}, 2, true + return {'\u2ac6', '\u0338'}, 2, true case "ntgl": // NEITHER GREATER-THAN NOR LESS-THAN return {'\u2279', 0}, 1, true case "ntilde": // LATIN SMALL LETTER N WITH TILDE @@ -3638,31 +3638,31 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "nvHarr": // LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE return {'\u2904', 0}, 1, true case "nvap": // EQUIVALENT TO with vertical line - return {'\u224d', '\u224d'}, 2, true + return {'\u224d', '\u20d2'}, 2, true case "nvbrtri": // VERTICAL BAR BESIDE RIGHT TRIANGLE with slash - return {'\u29d0', '\u29d0'}, 2, true + return {'\u29d0', '\u0338'}, 2, true case "nvdash": // DOES NOT PROVE return {'\u22ac', 0}, 1, true case "nvge": // GREATER-THAN OR EQUAL TO with vertical line - return {'\u2265', '\u2265'}, 2, true + return {'\u2265', '\u20d2'}, 2, true case "nvgt": // GREATER-THAN SIGN with vertical line - return {'>', '>'}, 2, true + return {'>', '\u20d2'}, 2, true case "nvinfin": // INFINITY NEGATED WITH VERTICAL BAR return {'\u29de', 0}, 1, true case "nvlArr": // LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE return {'\u2902', 0}, 1, true case "nvle": // LESS-THAN OR EQUAL TO with vertical line - return {'\u2264', '\u2264'}, 2, true + return {'\u2264', '\u20d2'}, 2, true case "nvlt": // LESS-THAN SIGN with vertical line - return {'<', '<'}, 2, true + return {'<', '\u20d2'}, 2, true case "nvltrie": // NORMAL SUBGROUP OF OR EQUAL TO with vertical line - return {'\u22b4', '\u22b4'}, 2, true + return {'\u22b4', '\u20d2'}, 2, true case "nvrArr": // RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE return {'\u2903', 0}, 1, true case "nvrtrie": // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO with vertical line - return {'\u22b5', '\u22b5'}, 2, true + return {'\u22b5', '\u20d2'}, 2, true case "nvsim": // TILDE OPERATOR with vertical line - return {'\u223c', '\u223c'}, 2, true + return {'\u223c', '\u20d2'}, 2, true case "nwArr": // NORTH WEST DOUBLE ARROW return {'\u21d6', 0}, 1, true case "nwarhk": // NORTH WEST ARROW WITH HOOK @@ -3996,7 +3996,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "rHar": // RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN return {'\u2964', 0}, 1, true case "race": // REVERSED TILDE with underline - return {'\u223d', '\u223d'}, 2, true + return {'\u223d', '\u0331'}, 2, true case "racute": // LATIN SMALL LETTER R WITH ACUTE return {'\u0155', 0}, 1, true case "radic": // SQUARE ROOT @@ -4360,7 +4360,7 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "smte": // SMALLER THAN OR EQUAL TO return {'\u2aac', 0}, 1, true case "smtes": // SMALLER THAN OR slanted EQUAL - return {'\u2aac', '\u2aac'}, 2, true + return {'\u2aac', '\ufe00'}, 2, true case "softcy": // CYRILLIC SMALL LETTER SOFT SIGN return {'\u044c', 0}, 1, true case "sol": // SOLIDUS @@ -4380,11 +4380,11 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "sqcap": // SQUARE CAP return {'\u2293', 0}, 1, true case "sqcaps": // SQUARE CAP with serifs - return {'\u2293', '\u2293'}, 2, true + return {'\u2293', '\ufe00'}, 2, true case "sqcup": // SQUARE CUP return {'\u2294', 0}, 1, true case "sqcups": // SQUARE CUP with serifs - return {'\u2294', '\u2294'}, 2, true + return {'\u2294', '\ufe00'}, 2, true case "sqsub": // SQUARE IMAGE OF return {'\u228f', 0}, 1, true case "sqsube": // SQUARE IMAGE OF OR EQUAL TO @@ -4856,13 +4856,13 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "varsigma": // GREEK SMALL LETTER FINAL SIGMA return {'\u03c2', 0}, 1, true case "varsubsetneq": // SUBSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return {'\u228a', '\u228a'}, 2, true + return {'\u228a', '\ufe00'}, 2, true case "varsubsetneqq": // SUBSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return {'\u2acb', '\u2acb'}, 2, true + return {'\u2acb', '\ufe00'}, 2, true case "varsupsetneq": // SUPERSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return {'\u228b', '\u228b'}, 2, true + return {'\u228b', '\ufe00'}, 2, true case "varsupsetneqq": // SUPERSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return {'\u2acc', '\u2acc'}, 2, true + return {'\u2acc', '\ufe00'}, 2, true case "vartheta": // GREEK THETA SYMBOL return {'\u03d1', 0}, 1, true case "vartriangleleft": // NORMAL SUBGROUP OF @@ -4902,9 +4902,9 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "vltri": // NORMAL SUBGROUP OF return {'\u22b2', 0}, 1, true case "vnsub": // SUBSET OF with vertical line - return {'\u2282', '\u2282'}, 2, true + return {'\u2282', '\u20d2'}, 2, true case "vnsup": // SUPERSET OF with vertical line - return {'\u2283', '\u2283'}, 2, true + return {'\u2283', '\u20d2'}, 2, true case "vopf": // MATHEMATICAL DOUBLE-STRUCK SMALL V return {'\U0001d567', 0}, 1, true case "vprime": // PRIME @@ -4916,13 +4916,13 @@ named_xml_entity_to_rune :: proc(name: string) -> (decoded: [2]rune, rune_count: case "vscr": // MATHEMATICAL SCRIPT SMALL V return {'\U0001d4cb', 0}, 1, true case "vsubnE": // SUBSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return {'\u2acb', '\u2acb'}, 2, true + return {'\u2acb', '\ufe00'}, 2, true case "vsubne": // SUBSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return {'\u228a', '\u228a'}, 2, true + return {'\u228a', '\ufe00'}, 2, true case "vsupnE": // SUPERSET OF ABOVE NOT EQUAL TO - variant with stroke through bottom members - return {'\u2acc', '\u2acc'}, 2, true + return {'\u2acc', '\ufe00'}, 2, true case "vsupne": // SUPERSET OF WITH NOT EQUAL TO - variant with stroke through bottom members - return {'\u228b', '\u228b'}, 2, true + return {'\u228b', '\ufe00'}, 2, true case "vzigzag": // VERTICAL ZIGZAG LINE return {'\u299a', 0}, 1, true } From ca507d059617e1a5b9f1cba600f42091694a44d0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 18 Jan 2026 12:30:55 +0000 Subject: [PATCH 140/212] Fix crc32 for `xml_test_entities_unbox_decode` --- tests/core/encoding/xml/test_core_xml.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/encoding/xml/test_core_xml.odin b/tests/core/encoding/xml/test_core_xml.odin index 409a8c9c0..30353e227 100644 --- a/tests/core/encoding/xml/test_core_xml.odin +++ b/tests/core/encoding/xml/test_core_xml.odin @@ -142,7 +142,7 @@ xml_test_entities_unbox_decode :: proc(t: ^testing.T) { }, expected_doctype = "html", }, - crc32 = 0x68d2571e, + crc32 = 0x6e45a697, }) } From 2ce21cd3f72eb192e1317b12b468b857e3aedfe1 Mon Sep 17 00:00:00 2001 From: konodin Date: Sun, 18 Jan 2026 21:42:14 +0100 Subject: [PATCH 141/212] Fix `endpoint_to_string` missing colon --- core/net/addr.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/core/net/addr.odin b/core/net/addr.odin index a3fa02cce..d29b46b65 100644 --- a/core/net/addr.odin +++ b/core/net/addr.odin @@ -619,6 +619,7 @@ endpoint_to_string :: proc(ep: Endpoint, allocator := context.temp_allocator) -> switch a in ep.address { case IP4_Address: strings.write_string(&b, s) + strings.write_string(&b, ":") strings.write_int(&b, ep.port) case IP6_Address: strings.write_string(&b, "[") From d838065d32bd5088ad5cd1707d4a961c19d3daa3 Mon Sep 17 00:00:00 2001 From: wpcasarin <72427968+wpcasarin@users.noreply.github.com> Date: Sun, 18 Jan 2026 23:28:52 -0300 Subject: [PATCH 142/212] vendor/x11/xlib: Fix XSetWindowBackgroundPixmap binding name Changed SetWindowBackgroundMap to SetWindowBackgroundPixmap to match the actual X11 C function name. The incorrect name caused linker errors. --- vendor/x11/xlib/xlib_procs.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/x11/xlib/xlib_procs.odin b/vendor/x11/xlib/xlib_procs.odin index c33c6d351..42e49ea02 100644 --- a/vendor/x11/xlib/xlib_procs.odin +++ b/vendor/x11/xlib/xlib_procs.odin @@ -241,7 +241,7 @@ foreign xlib { window: Window, pixel: uint, ) --- - SetWindowBackgroundMap :: proc( + SetWindowBackgroundPixmap :: proc( display: ^Display, window: Window, pixmap: Pixmap, From 45beed0fb381d514e8133fa5d527dcc425a7a867 Mon Sep 17 00:00:00 2001 From: laytan Date: Mon, 19 Jan 2026 18:57:00 +0100 Subject: [PATCH 143/212] nbio(windows): use WSAGetOverlappedResult for socket operations for contextfull error code mapping --- core/nbio/impl_windows.odin | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index af4518cb7..d9ac7f379 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -946,7 +946,7 @@ accept_callback :: proc(op: ^Operation) { return } - _, err := get_result(op._impl.over) + _, err := wsa_get_result(win.SOCKET(op.accept.socket), op._impl.over) #partial switch err { case .SUCCESS: local_addr: ^win.sockaddr @@ -979,7 +979,6 @@ accept_callback :: proc(op: ^Operation) { fallthrough case: - win.SetLastError(win.DWORD(err)) op.accept.err = net._accept_error() } } @@ -1048,7 +1047,7 @@ dial_callback :: proc(op: ^Operation) { return } - _, err := get_result(op._impl.over) + _, err := wsa_get_result(win.SOCKET(op.dial.socket), op._impl.over) #partial switch err { case .SUCCESS: // enables getsockopt, setsockopt, getsockname, getpeername, etc. @@ -1058,7 +1057,6 @@ dial_callback :: proc(op: ^Operation) { op.dial.err = Dial_Error.Timeout case: - win.SetLastError(win.DWORD(err)) op.dial.err = net._dial_error() } } @@ -1274,7 +1272,7 @@ recv_callback :: proc(op: ^Operation) -> Op_Result { return .Done } - n, err := get_result(op._impl.over) + n, err := wsa_get_result(win.SOCKET((^net.Socket)(&op.recv.socket)^), op._impl.over) #partial switch err { case .SUCCESS: case .OPERATION_ABORTED: @@ -1288,7 +1286,6 @@ recv_callback :: proc(op: ^Operation) -> Op_Result { } fallthrough case: - win.SetLastError(win.DWORD(err)) switch _ in op.recv.socket { case TCP_Socket: op.recv.err = net._tcp_recv_error() case UDP_Socket: op.recv.err = net._udp_recv_error() @@ -1395,7 +1392,7 @@ send_callback :: proc(op: ^Operation) -> Op_Result { return .Done } - n, err := get_result(op._impl.over) + n, err := wsa_get_result(win.SOCKET((^net.Socket)(&op.send.socket)^), op._impl.over) #partial switch err { case .SUCCESS: case .OPERATION_ABORTED: @@ -1409,7 +1406,6 @@ send_callback :: proc(op: ^Operation) -> Op_Result { } fallthrough case: - win.SetLastError(win.DWORD(err)) switch _ in op.send.socket { case TCP_Socket: op.send.err = net._tcp_send_error() case UDP_Socket: op.send.err = net._udp_send_error() @@ -1485,7 +1481,7 @@ sendfile_callback :: proc(op: ^Operation) -> Op_Result { return .Done } - n, err := get_result(op._impl.over) + n, err := wsa_get_result(win.SOCKET(op.sendfile.socket), op._impl.over) #partial switch err { case .SUCCESS: case .OPERATION_ABORTED: @@ -1496,7 +1492,6 @@ sendfile_callback :: proc(op: ^Operation) -> Op_Result { } fallthrough case: - win.SetLastError(win.DWORD(err)) op.sendfile.err = net._tcp_send_error() return .Done } @@ -1748,6 +1743,27 @@ get_result :: proc(over: win.OVERLAPPED) -> (n: int, err: win.System_Error) { return } +// `get_result` above translates NT status codes to errors through RtlNtStatsToDosError, +// this is context free and can cause weird mappings, thus for sockets we want to call `WSAGetOverlappedResult` +// which does context based mapping of error codes. +// See https://stackoverflow.com/questions/28925003/calling-wsagetlasterror-from-an-iocp-thread-return-incorrect-result +wsa_get_result :: proc(socket: win.SOCKET, over: win.OVERLAPPED) -> (n: int, err: win.System_Error) { + over := over + assert(!is_pending(over)) + + if over.Internal != nil { + flags: win.DWORD + _n: win.DWORD + res := win.WSAGetOverlappedResult(socket, &over, &_n, false, &flags) + assert(!res) + assert(_n == 0) + err = win.System_Error(win.WSAGetLastError()) + } + + n = int(uintptr(over.InternalHigh)) + return +} + is_incomplete :: proc(err: win.System_Error) -> bool { #partial switch err { case .WSAEWOULDBLOCK, .IO_PENDING, .IO_INCOMPLETE, .WSAEALREADY: return true From 0a63aa05bd6d0e5a718f6d46794fc1c817403ce7 Mon Sep 17 00:00:00 2001 From: laytan Date: Mon, 19 Jan 2026 19:11:06 +0100 Subject: [PATCH 144/212] nbio(windows): remove assert that would trigger on cancel/remove --- core/nbio/impl_windows.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/nbio/impl_windows.odin b/core/nbio/impl_windows.odin index d9ac7f379..f75193fe4 100644 --- a/core/nbio/impl_windows.odin +++ b/core/nbio/impl_windows.odin @@ -1756,7 +1756,7 @@ wsa_get_result :: proc(socket: win.SOCKET, over: win.OVERLAPPED) -> (n: int, err _n: win.DWORD res := win.WSAGetOverlappedResult(socket, &over, &_n, false, &flags) assert(!res) - assert(_n == 0) + n = int(_n) // NOTE: It is possible that an amount of bytes is present when the operation was cancelled. err = win.System_Error(win.WSAGetLastError()) } From fddc73286999df7f0e04f00ea36d404687a82ec4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 19 Jan 2026 18:17:13 +0000 Subject: [PATCH 145/212] Escape non-breaking space (0xa0) to ` ` --- core/encoding/entity/entity.odin | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/encoding/entity/entity.odin b/core/encoding/entity/entity.odin index 95a404a81..89155b3a7 100644 --- a/core/encoding/entity/entity.odin +++ b/core/encoding/entity/entity.odin @@ -263,7 +263,7 @@ xml_decode_entity :: proc(entity: string) -> (decoded: [2]rune, rune_count: int, // escape_html escapes special characters like '&' to become '&'. -// It escapes only 5 different characters: & ' < > and ". +// It escapes only 6 different characters: & ' < > " and non-breaking space. @(require_results) escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool) { /* @@ -272,6 +272,7 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo < -> < > -> > " -> " // " is shorter than " + 0x6a ->   */ b := transmute([]byte)s @@ -285,6 +286,7 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo case '<': extra_bytes_needed += 3 case '>': extra_bytes_needed += 3 case '"': extra_bytes_needed += 4 + case 0xa0: extra_bytes_needed += 5 } } @@ -307,6 +309,7 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo case '<': x = "<" case '>': x = ">" case '"': x = """ + case 0xa0: x = " " } if x != "" { copy(t[w:], x) From 85b3251105d22d96357cd6e79a0e34dd3a62d517 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 19 Jan 2026 19:30:37 +0000 Subject: [PATCH 146/212] Remove the nbsp change, as it is not necessary --- core/encoding/entity/entity.odin | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/encoding/entity/entity.odin b/core/encoding/entity/entity.odin index 89155b3a7..bc3a79635 100644 --- a/core/encoding/entity/entity.odin +++ b/core/encoding/entity/entity.odin @@ -263,7 +263,7 @@ xml_decode_entity :: proc(entity: string) -> (decoded: [2]rune, rune_count: int, // escape_html escapes special characters like '&' to become '&'. -// It escapes only 6 different characters: & ' < > " and non-breaking space. +// It escapes only 5 different characters: & ' < > and " @(require_results) escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_location) -> (output: string, was_allocation: bool) { /* @@ -272,21 +272,19 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo < -> < > -> > " -> " // " is shorter than " - 0x6a ->   */ b := transmute([]byte)s extra_bytes_needed := 0 - for c in b { + for c, i in b { switch c { case '&': extra_bytes_needed += 4 case '\'': extra_bytes_needed += 4 case '<': extra_bytes_needed += 3 case '>': extra_bytes_needed += 3 case '"': extra_bytes_needed += 4 - case 0xa0: extra_bytes_needed += 5 } } @@ -309,7 +307,6 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo case '<': x = "<" case '>': x = ">" case '"': x = """ - case 0xa0: x = " " } if x != "" { copy(t[w:], x) From 0de3d872d169f58705b387250df12e8e92b13c54 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 19 Jan 2026 19:32:41 +0000 Subject: [PATCH 147/212] Keep -vet happy --- core/encoding/entity/entity.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/encoding/entity/entity.odin b/core/encoding/entity/entity.odin index bc3a79635..a756bdf39 100644 --- a/core/encoding/entity/entity.odin +++ b/core/encoding/entity/entity.odin @@ -278,7 +278,7 @@ escape_html :: proc(s: string, allocator := context.allocator, loc := #caller_lo extra_bytes_needed := 0 - for c, i in b { + for c in b { switch c { case '&': extra_bytes_needed += 4 case '\'': extra_bytes_needed += 4 From ab0de6d33a121650803206e8e889e33f03cbdcec Mon Sep 17 00:00:00 2001 From: Karl Zylinski Date: Tue, 20 Jan 2026 14:11:30 +0100 Subject: [PATCH 148/212] Added target freestanding_amd64_mingw for building freestanding on windows without MSVC installed (use for example clang-mingw) --- src/build_settings.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 31a07aa69..7d43788cd 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -840,6 +840,15 @@ gb_global TargetMetrics target_freestanding_amd64_win64 = { TargetABI_Win64, }; +gb_global TargetMetrics target_freestanding_amd64_mingw = { + TargetOs_freestanding, + TargetArch_amd64, + 8, 8, AMD64_MAX_ALIGNMENT, 32, + str_lit("x86_64-pc-windows-gnu"), + TargetABI_Win64, +}; + + gb_global TargetMetrics target_freestanding_arm64 = { TargetOs_freestanding, TargetArch_arm64, @@ -902,6 +911,7 @@ gb_global NamedTargetMetrics named_targets[] = { { str_lit("freestanding_amd64_sysv"), &target_freestanding_amd64_sysv }, { str_lit("freestanding_amd64_win64"), &target_freestanding_amd64_win64 }, + { str_lit("freestanding_amd64_mingw"), &target_freestanding_amd64_mingw }, { str_lit("freestanding_arm64"), &target_freestanding_arm64 }, { str_lit("freestanding_arm32"), &target_freestanding_arm32 }, From 4acdd3f60b39c95c2700618feb828b4cf687bb92 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Thu, 22 Jan 2026 11:49:47 +0100 Subject: [PATCH 149/212] Fix CRC --- tests/core/encoding/xml/test_core_xml.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/core/encoding/xml/test_core_xml.odin b/tests/core/encoding/xml/test_core_xml.odin index 9f233e00e..09cca4a63 100644 --- a/tests/core/encoding/xml/test_core_xml.odin +++ b/tests/core/encoding/xml/test_core_xml.odin @@ -142,7 +142,7 @@ xml_test_entities_unbox_decode :: proc(t: ^testing.T) { }, expected_doctype = "html", }, - crc32 = 0x6e45a697, + crc32 = 0xda1ac384, }) } From 4ace851f9a1e968de805e612c6752db3ea111d00 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Jan 2026 13:17:26 +0000 Subject: [PATCH 150/212] Instead of using typeid hash, use the canonical name for internal procedure for debuggability --- src/llvm_backend.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 0bf3d1125..34afb9c8c 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -239,9 +239,9 @@ gb_internal lbContextData *lb_push_context_onto_stack(lbProcedure *p, lbAddr ctx gb_internal String lb_internal_gen_name_from_type(char const *prefix, Type *type) { gbString str = gb_string_make(permanent_allocator(), prefix); - u64 hash = type_hash_canonical_type(type); - str = gb_string_appendc(str, "-"); - str = gb_string_append_fmt(str, "%llu", cast(unsigned long long)hash); + str = gb_string_appendc(str, "$$"); + gbString ct = temp_canonical_string(type); + str = gb_string_append_length(str, ct, gb_string_length(ct)); String proc_name = make_string(cast(u8 const *)str, gb_string_length(str)); return proc_name; } From b0064f38cfb7f24d760feb010c09472fc7f896ee Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Jan 2026 13:17:54 +0000 Subject: [PATCH 151/212] Minor rearrange of `check_is_operand_compound_lit_constant` for future optimization prep --- src/check_expr.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 99f803a08..8fdd5372b 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -8768,6 +8768,14 @@ gb_internal bool check_is_operand_compound_lit_constant(CheckerContext *c, Opera if (is_operand_nil(*o)) { return true; } + if (is_type_any(field_type)) { + return false; + } + if (field_type != nullptr && is_type_typeid(field_type) && o->mode == Addressing_Type) { + add_type_info_type(c, o->type); + return true; + } + Ast *expr = unparen_expr(o->expr); if (expr != nullptr) { Entity *e = strip_entity_wrapping(entity_from_expr(expr)); @@ -8778,13 +8786,12 @@ gb_internal bool check_is_operand_compound_lit_constant(CheckerContext *c, Opera add_type_and_value(c, expr, Addressing_Constant, type_of_expr(expr), exact_value_procedure(expr)); return true; } - } - if (field_type != nullptr && is_type_typeid(field_type) && o->mode == Addressing_Type) { - add_type_info_type(c, o->type); - return true; - } - if (is_type_any(field_type)) { - return false; + + if (e != nullptr && e->kind == Entity_Variable && e->Variable.is_rodata) { + // DeclInfo *d = e->decl_info; + // TODO(bill): rodata inlining for non-indirect values + // e.g. **NOT** []T{...} + } } return o->mode == Addressing_Constant; } From dc6067a8a988477446181ca428553948821ec06c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Jan 2026 13:18:22 +0000 Subject: [PATCH 152/212] Unify "mem*.inline" logic to only inline for <=8 bytes on all platforms --- src/llvm_backend.hpp | 2 +- src/llvm_backend_proc.cpp | 8 ++++---- src/llvm_backend_utility.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index e10471527..3491c0d39 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -619,7 +619,7 @@ gb_internal LLVMValueRef lb_mem_zero_ptr_internal(lbProcedure *p, LLVMValueRef p gb_internal LLVMValueRef lb_mem_zero_ptr_internal(lbProcedure *p, LLVMValueRef ptr, usize len, unsigned alignment, bool is_volatile); gb_internal gb_inline i64 lb_max_zero_init_size(void) { - return cast(i64)(4*build_context.int_size); + return cast(i64)(8); } gb_internal LLVMTypeRef OdinLLVMGetArrayElementType(LLVMTypeRef type); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 640a43111..837d7ce48 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -12,9 +12,9 @@ gb_internal void lb_mem_copy_overlapping(lbProcedure *p, lbValue dst, lbValue sr len = lb_emit_conv(p, len, t_int); char const *name = "llvm.memmove"; - if (LLVMIsConstant(len.value)) { + if (!p->is_startup && LLVMIsConstant(len.value)) { i64 const_len = cast(i64)LLVMConstIntGetSExtValue(len.value); - if (const_len <= 4*build_context.int_size) { + if (const_len <= lb_max_zero_init_size()) { name = "llvm.memmove.inline"; } } @@ -41,9 +41,9 @@ gb_internal void lb_mem_copy_non_overlapping(lbProcedure *p, lbValue dst, lbValu len = lb_emit_conv(p, len, t_int); char const *name = "llvm.memcpy"; - if (LLVMIsConstant(len.value)) { + if (!p->is_startup && LLVMIsConstant(len.value)) { i64 const_len = cast(i64)LLVMConstIntGetSExtValue(len.value); - if (const_len <= 4*build_context.int_size) { + if (const_len <= lb_max_zero_init_size()) { name = "llvm.memcpy.inline"; } } diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 9ddbd1f9c..43cac70c1 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -89,7 +89,7 @@ gb_internal LLVMValueRef lb_mem_zero_ptr_internal(lbProcedure *p, LLVMValueRef p bool is_inlinable = false; i64 const_len = 0; - if (LLVMIsConstant(len)) { + if (!p->is_startup && LLVMIsConstant(len)) { const_len = cast(i64)LLVMConstIntGetSExtValue(len); // TODO(bill): Determine when it is better to do the `*.inline` versions if (const_len <= lb_max_zero_init_size()) { From 5072d5c776eb53afb2439f43dfa40ccadb68dfb9 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 22 Jan 2026 13:54:53 +0000 Subject: [PATCH 153/212] Add warning in code generation stage which might cause a possible code gen issue, when non-constant initialization is large --- src/llvm_backend.cpp | 5 +++++ src/main.cpp | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 34afb9c8c..c15f326f8 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2045,6 +2045,11 @@ gb_internal bool lb_init_global_var(lbModule *m, lbProcedure *p, Entity *e, Ast lb_emit_store(p, data, lb_emit_conv(p, gp, t_rawptr)); lb_emit_store(p, ti, lb_typeid(p->module, var_type)); } else { + i64 sz = type_size_of(e->type); + if (sz >= 4 * 1024) { + warning(init_expr, "[Possible Code Generation Issue] Non-constant initialization is large (%lld bytes), and might cause problems with LLVM", cast(long long)sz); + } + LLVMTypeRef vt = llvm_addr_type(p->module, var.var); lbValue src0 = lb_emit_conv(p, var.init, t); LLVMValueRef src = OdinLLVMBuildTransmute(p, src0.value, vt); diff --git a/src/main.cpp b/src/main.cpp index 753f58986..499b8a5ff 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4046,6 +4046,14 @@ int main(int arg_count, char const **arg_ptr) { remove_temp_files(gen); } + if (any_errors()) { + print_all_errors(); + return 1; + } + if (any_warnings()) { + print_all_errors(); + } + end_of_code_gen:; if (build_context.export_dependencies_format != DependenciesExportUnspecified) { From ce71227b6bba4bbe74d53c681264a9cba974403a Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Thu, 22 Jan 2026 15:20:39 +0100 Subject: [PATCH 154/212] Fix #6130 --- src/parser.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/parser.cpp b/src/parser.cpp index fc55dae97..277a405b7 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -5071,6 +5071,10 @@ gb_internal Ast *parse_import_decl(AstFile *f, ImportDeclKind kind) { syntax_error(import_name, "'using import' is not allowed, please use the import name explicitly"); } + if (file_path.string == "\".\"") { + syntax_error(import_name, "Cannot cyclicly import packages"); + } + expect_semicolon(f); return s; } From 5f974059f46317328db64b9f0dcf9ead55f167fa Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Thu, 22 Jan 2026 21:34:46 +0100 Subject: [PATCH 155/212] move vendor:libc to vendor:libc-shim --- vendor/box2d/box2d_wasm.odin | 2 +- vendor/box2d/wasm.Makefile | 2 +- vendor/cgltf/cgltf_wasm.odin | 2 +- vendor/cgltf/src/Makefile | 2 +- vendor/{libc => libc-shim}/README.md | 6 ++--- vendor/{libc => libc-shim}/assert.odin | 0 vendor/{libc => libc-shim}/ctype.odin | 0 vendor/{libc => libc-shim}/include/alloca.h | 0 vendor/{libc => libc-shim}/include/assert.h | 0 vendor/{libc => libc-shim}/include/ctype.h | 0 vendor/{libc => libc-shim}/include/inttypes.h | 0 vendor/{libc => libc-shim}/include/math.h | 0 vendor/{libc => libc-shim}/include/sched.h | 0 vendor/{libc => libc-shim}/include/stdio.h | 0 vendor/{libc => libc-shim}/include/stdlib.h | 0 vendor/{libc => libc-shim}/include/string.h | 0 vendor/{libc => libc-shim}/include/time.h | 0 vendor/libc-shim/libc.odin | 26 +++++++++++++++++++ vendor/{libc => libc-shim}/math.odin | 0 vendor/{libc => libc-shim}/sched.odin | 0 vendor/{libc => libc-shim}/stdio.odin | 4 +-- vendor/{libc => libc-shim}/stdlib.odin | 0 vendor/{libc => libc-shim}/string.odin | 0 vendor/{libc => libc-shim}/time.odin | 0 vendor/libc/libc.odin | 25 +----------------- vendor/stb/image/stb_image_wasm.odin | 2 +- vendor/stb/rect_pack/stb_rect_pack_wasm.odin | 2 +- vendor/stb/src/Makefile | 12 ++++----- vendor/stb/truetype/stb_truetype_wasm.odin | 2 +- 29 files changed, 45 insertions(+), 42 deletions(-) rename vendor/{libc => libc-shim}/README.md (79%) rename vendor/{libc => libc-shim}/assert.odin (100%) rename vendor/{libc => libc-shim}/ctype.odin (100%) rename vendor/{libc => libc-shim}/include/alloca.h (100%) rename vendor/{libc => libc-shim}/include/assert.h (100%) rename vendor/{libc => libc-shim}/include/ctype.h (100%) rename vendor/{libc => libc-shim}/include/inttypes.h (100%) rename vendor/{libc => libc-shim}/include/math.h (100%) rename vendor/{libc => libc-shim}/include/sched.h (100%) rename vendor/{libc => libc-shim}/include/stdio.h (100%) rename vendor/{libc => libc-shim}/include/stdlib.h (100%) rename vendor/{libc => libc-shim}/include/string.h (100%) rename vendor/{libc => libc-shim}/include/time.h (100%) create mode 100644 vendor/libc-shim/libc.odin rename vendor/{libc => libc-shim}/math.odin (100%) rename vendor/{libc => libc-shim}/sched.odin (100%) rename vendor/{libc => libc-shim}/stdio.odin (98%) rename vendor/{libc => libc-shim}/stdlib.odin (100%) rename vendor/{libc => libc-shim}/string.odin (100%) rename vendor/{libc => libc-shim}/time.odin (100%) diff --git a/vendor/box2d/box2d_wasm.odin b/vendor/box2d/box2d_wasm.odin index 0fcaf753f..1bbe9b8bc 100644 --- a/vendor/box2d/box2d_wasm.odin +++ b/vendor/box2d/box2d_wasm.odin @@ -1,4 +1,4 @@ #+build wasm32, wasm64p32 package vendor_box2d -@(require) import _ "vendor:libc" +@(require) import _ "vendor:libc-shim" diff --git a/vendor/box2d/wasm.Makefile b/vendor/box2d/wasm.Makefile index 80dd2ba14..5cce30ad1 100644 --- a/vendor/box2d/wasm.Makefile +++ b/vendor/box2d/wasm.Makefile @@ -11,7 +11,7 @@ VERSION = 3.1.1 SRCS = $(wildcard box2d-$(VERSION)/src/*.c) OBJS_SIMD = $(SRCS:.c=_simd.o) OBJS = $(SRCS:.c=.o) -SYSROOT = $(shell odin root)/vendor/libc +SYSROOT = $(shell odin root)/vendor/libc-shim CFLAGS = -Ibox2d-$(VERSION)/include --target=wasm32 -D__EMSCRIPTEN__ -DNDEBUG -O3 --sysroot=$(SYSROOT) all: lib/box2d_wasm.o lib/box2d_wasm_simd.o diff --git a/vendor/cgltf/cgltf_wasm.odin b/vendor/cgltf/cgltf_wasm.odin index fb612b2ac..1404fc592 100644 --- a/vendor/cgltf/cgltf_wasm.odin +++ b/vendor/cgltf/cgltf_wasm.odin @@ -1,4 +1,4 @@ #+build wasm32, wasm64p32 package cgltf -@(require) import _ "vendor:libc" +@(require) import _ "vendor:libc-shim" diff --git a/vendor/cgltf/src/Makefile b/vendor/cgltf/src/Makefile index 0dd450ce0..f4dc8c12c 100644 --- a/vendor/cgltf/src/Makefile +++ b/vendor/cgltf/src/Makefile @@ -8,7 +8,7 @@ endif wasm: mkdir -p ../lib - $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc cgltf.c -o ../lib/cgltf_wasm.o + $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim cgltf.c -o ../lib/cgltf_wasm.o unix: mkdir -p ../lib diff --git a/vendor/libc/README.md b/vendor/libc-shim/README.md similarity index 79% rename from vendor/libc/README.md rename to vendor/libc-shim/README.md index 1dd50c5a9..9b44984f6 100644 --- a/vendor/libc/README.md +++ b/vendor/libc-shim/README.md @@ -1,11 +1,11 @@ -# vendor:libc +# vendor:libc-shim A (very small) subset of a libc implementation over Odin libraries. This is mainly intended for use in Odin WASM builds to allow using libraries like box2d, cgltf etc. without emscripten hacks. -You can use this with clang by doing `clang -c --target=wasm32 --sysroot=$(odin root)/vendor/libc` (+ all other flags and inputs). +You can use this with clang by doing `clang -c --target=wasm32 --sysroot=$(odin root)/vendor/libc-shim` (+ all other flags and inputs). This will (if all the libc usage of the library is implemented) spit out a `.o` file you can use with the foreign import system. -If you then also make sure this package is included in the Odin side of the project (`@(require) import "vendor:libc"`) you will be able +If you then also make sure this package is included in the Odin side of the project (`@(require) import "vendor:libc-shim"`) you will be able compile to WASM like Odin expects. This is currently used by `vendor:box2d`, `vendor:stb/image`, `vendor:stb/truetype`, `vendor:stb/rect_pack`, and `vendor:cgltf`. diff --git a/vendor/libc/assert.odin b/vendor/libc-shim/assert.odin similarity index 100% rename from vendor/libc/assert.odin rename to vendor/libc-shim/assert.odin diff --git a/vendor/libc/ctype.odin b/vendor/libc-shim/ctype.odin similarity index 100% rename from vendor/libc/ctype.odin rename to vendor/libc-shim/ctype.odin diff --git a/vendor/libc/include/alloca.h b/vendor/libc-shim/include/alloca.h similarity index 100% rename from vendor/libc/include/alloca.h rename to vendor/libc-shim/include/alloca.h diff --git a/vendor/libc/include/assert.h b/vendor/libc-shim/include/assert.h similarity index 100% rename from vendor/libc/include/assert.h rename to vendor/libc-shim/include/assert.h diff --git a/vendor/libc/include/ctype.h b/vendor/libc-shim/include/ctype.h similarity index 100% rename from vendor/libc/include/ctype.h rename to vendor/libc-shim/include/ctype.h diff --git a/vendor/libc/include/inttypes.h b/vendor/libc-shim/include/inttypes.h similarity index 100% rename from vendor/libc/include/inttypes.h rename to vendor/libc-shim/include/inttypes.h diff --git a/vendor/libc/include/math.h b/vendor/libc-shim/include/math.h similarity index 100% rename from vendor/libc/include/math.h rename to vendor/libc-shim/include/math.h diff --git a/vendor/libc/include/sched.h b/vendor/libc-shim/include/sched.h similarity index 100% rename from vendor/libc/include/sched.h rename to vendor/libc-shim/include/sched.h diff --git a/vendor/libc/include/stdio.h b/vendor/libc-shim/include/stdio.h similarity index 100% rename from vendor/libc/include/stdio.h rename to vendor/libc-shim/include/stdio.h diff --git a/vendor/libc/include/stdlib.h b/vendor/libc-shim/include/stdlib.h similarity index 100% rename from vendor/libc/include/stdlib.h rename to vendor/libc-shim/include/stdlib.h diff --git a/vendor/libc/include/string.h b/vendor/libc-shim/include/string.h similarity index 100% rename from vendor/libc/include/string.h rename to vendor/libc-shim/include/string.h diff --git a/vendor/libc/include/time.h b/vendor/libc-shim/include/time.h similarity index 100% rename from vendor/libc/include/time.h rename to vendor/libc-shim/include/time.h diff --git a/vendor/libc-shim/libc.odin b/vendor/libc-shim/libc.odin new file mode 100644 index 000000000..a5508e14f --- /dev/null +++ b/vendor/libc-shim/libc.odin @@ -0,0 +1,26 @@ +package odin_libc + +import "base:runtime" + +import "core:mem" + +@(private) +g_ctx: runtime.Context +@(private) +g_allocator: mem.Compat_Allocator + +@(init) +init_context :: proc "contextless" () { + g_ctx = runtime.default_context() + context = g_ctx + + // Wrapping the allocator with the mem.Compat_Allocator so we can + // mimic the realloc semantics. + mem.compat_allocator_init(&g_allocator, g_ctx.allocator) + g_ctx.allocator = mem.compat_allocator(&g_allocator) +} + +// NOTE: the allocator must respect an `old_size` of `-1` on resizes! +set_context :: proc(ctx := context) { + g_ctx = ctx +} diff --git a/vendor/libc/math.odin b/vendor/libc-shim/math.odin similarity index 100% rename from vendor/libc/math.odin rename to vendor/libc-shim/math.odin diff --git a/vendor/libc/sched.odin b/vendor/libc-shim/sched.odin similarity index 100% rename from vendor/libc/sched.odin rename to vendor/libc-shim/sched.odin diff --git a/vendor/libc/stdio.odin b/vendor/libc-shim/stdio.odin similarity index 98% rename from vendor/libc/stdio.odin rename to vendor/libc-shim/stdio.odin index d41f790ee..e269b8986 100644 --- a/vendor/libc/stdio.odin +++ b/vendor/libc-shim/stdio.odin @@ -17,7 +17,7 @@ EOF :: -1 @(require, linkage="strong", link_name="fopen") fopen :: proc "c" (path: cstring, mode: cstring) -> FILE { context = g_ctx - unimplemented("vendor/libc: fopen") + unimplemented("vendor/libc-shim: fopen") } @(require, linkage="strong", link_name="fseek") @@ -366,7 +366,7 @@ _sscanf :: proc "c" (str, fmt: [^]byte, orig_ptrs: [^]rawptr) -> i32 { i = 0 k = t == 'c' ? width + 1 : 31 if size == .l { - unimplemented("vendor/libc: sscanf wide character support") + unimplemented("vendor/libc-shim: sscanf wide character support") } else if alloc { s = make([^]byte, k) if s == nil { diff --git a/vendor/libc/stdlib.odin b/vendor/libc-shim/stdlib.odin similarity index 100% rename from vendor/libc/stdlib.odin rename to vendor/libc-shim/stdlib.odin diff --git a/vendor/libc/string.odin b/vendor/libc-shim/string.odin similarity index 100% rename from vendor/libc/string.odin rename to vendor/libc-shim/string.odin diff --git a/vendor/libc/time.odin b/vendor/libc-shim/time.odin similarity index 100% rename from vendor/libc/time.odin rename to vendor/libc-shim/time.odin diff --git a/vendor/libc/libc.odin b/vendor/libc/libc.odin index a5508e14f..7af35b090 100644 --- a/vendor/libc/libc.odin +++ b/vendor/libc/libc.odin @@ -1,26 +1,3 @@ package odin_libc -import "base:runtime" - -import "core:mem" - -@(private) -g_ctx: runtime.Context -@(private) -g_allocator: mem.Compat_Allocator - -@(init) -init_context :: proc "contextless" () { - g_ctx = runtime.default_context() - context = g_ctx - - // Wrapping the allocator with the mem.Compat_Allocator so we can - // mimic the realloc semantics. - mem.compat_allocator_init(&g_allocator, g_ctx.allocator) - g_ctx.allocator = mem.compat_allocator(&g_allocator) -} - -// NOTE: the allocator must respect an `old_size` of `-1` on resizes! -set_context :: proc(ctx := context) { - g_ctx = ctx -} +#panic("`vendor:libc` has been moved, use `vendor:libc-shim` instead.") diff --git a/vendor/stb/image/stb_image_wasm.odin b/vendor/stb/image/stb_image_wasm.odin index f43012383..cfad4725a 100644 --- a/vendor/stb/image/stb_image_wasm.odin +++ b/vendor/stb/image/stb_image_wasm.odin @@ -1,4 +1,4 @@ #+build wasm32, wasm64p32 package stb_image -@(require) import _ "vendor:libc" +@(require) import _ "vendor:libc-shim" diff --git a/vendor/stb/rect_pack/stb_rect_pack_wasm.odin b/vendor/stb/rect_pack/stb_rect_pack_wasm.odin index c4e2e5160..c9b6f3de8 100644 --- a/vendor/stb/rect_pack/stb_rect_pack_wasm.odin +++ b/vendor/stb/rect_pack/stb_rect_pack_wasm.odin @@ -1,4 +1,4 @@ #+build wasm32, wasm64p32 package stb_rect_pack -@(require) import _ "vendor:libc" +@(require) import _ "vendor:libc-shim" diff --git a/vendor/stb/src/Makefile b/vendor/stb/src/Makefile index 194ea5e75..94ba4d5bf 100644 --- a/vendor/stb/src/Makefile +++ b/vendor/stb/src/Makefile @@ -8,12 +8,12 @@ endif wasm: mkdir -p ../lib - $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc stb_image.c -o ../lib/stb_image_wasm.o -DSTBI_NO_STDIO - $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc stb_image_write.c -o ../lib/stb_image_write_wasm.o -DSTBI_WRITE_NO_STDIO - $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc stb_image_resize.c -o ../lib/stb_image_resize_wasm.o - $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc stb_truetype.c -o ../lib/stb_truetype_wasm.o - # $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc stb_vorbis.c -o ../lib/stb_vorbis_wasm.o -DSTB_VORBIS_NO_STDIO - $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc stb_rect_pack.c -o ../lib/stb_rect_pack_wasm.o + $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim stb_image.c -o ../lib/stb_image_wasm.o -DSTBI_NO_STDIO + $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim stb_image_write.c -o ../lib/stb_image_write_wasm.o -DSTBI_WRITE_NO_STDIO + $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim stb_image_resize.c -o ../lib/stb_image_resize_wasm.o + $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim stb_truetype.c -o ../lib/stb_truetype_wasm.o + # $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim stb_vorbis.c -o ../lib/stb_vorbis_wasm.o -DSTB_VORBIS_NO_STDIO + $(CC) -c -Os --target=wasm32 --sysroot=$(shell odin root)/vendor/libc-shim stb_rect_pack.c -o ../lib/stb_rect_pack_wasm.o $(CC) -c -Os --target=wasm32 stb_sprintf.c -o ../lib/stb_sprintf_wasm.o unix: diff --git a/vendor/stb/truetype/stb_truetype_wasm.odin b/vendor/stb/truetype/stb_truetype_wasm.odin index f36239086..727ba3ef0 100644 --- a/vendor/stb/truetype/stb_truetype_wasm.odin +++ b/vendor/stb/truetype/stb_truetype_wasm.odin @@ -1,4 +1,4 @@ #+build wasm32, wasm64p32 package stb_truetype -@(require) import _ "vendor:libc" +@(require) import _ "vendor:libc-shim" From da9b1dfcc6a607d928b4346ff4305fc5bb959018 Mon Sep 17 00:00:00 2001 From: nowheredevel Date: Thu, 22 Jan 2026 22:46:08 -0500 Subject: [PATCH 156/212] Implement missing device properties function --- vendor/sdl3/sdl3_gpu.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/vendor/sdl3/sdl3_gpu.odin b/vendor/sdl3/sdl3_gpu.odin index 85f05db83..551b23947 100644 --- a/vendor/sdl3/sdl3_gpu.odin +++ b/vendor/sdl3/sdl3_gpu.odin @@ -824,6 +824,7 @@ foreign lib { GetGPUDriver :: proc(index: c.int) -> cstring --- GetGPUDeviceDriver :: proc(device: ^GPUDevice) -> cstring --- GetGPUShaderFormats :: proc(device: ^GPUDevice) -> GPUShaderFormat --- + GetGPUDeviceProperties :: proc(device: ^GPUDevice) -> PropertiesID --- CreateGPUComputePipeline :: proc(device: ^GPUDevice, #by_ptr createinfo: GPUComputePipelineCreateInfo) -> ^GPUComputePipeline --- CreateGPUGraphicsPipeline :: proc(device: ^GPUDevice, #by_ptr createinfo: GPUGraphicsPipelineCreateInfo) -> ^GPUGraphicsPipeline --- CreateGPUSampler :: proc(device: ^GPUDevice, #by_ptr createinfo: GPUSamplerCreateInfo) -> ^GPUSampler --- From 89f6f535db7cf540aa40f76256b2c180195bf99c Mon Sep 17 00:00:00 2001 From: CJ Date: Sat, 24 Jan 2026 01:26:36 +0900 Subject: [PATCH 157/212] Fix string16 bugs in Mac and Linux --- src/string.cpp | 107 ++++++++++++++++++++++++++---- tests/issues/test_issue_6101.odin | 23 +++++++ 2 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 tests/issues/test_issue_6101.odin diff --git a/src/string.cpp b/src/string.cpp index 9c08114a7..c26457acf 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -635,26 +635,107 @@ gb_internal String normalize_path(gbAllocator a, String const &path, String cons #elif defined(GB_SYSTEM_UNIX) || defined(GB_SYSTEM_OSX) #include + gb_internal void utf16_encode_surrogate_pair(Rune r, u16 *r1, u16 *r2) { + static Rune const _surr_self = 0x10000; + static Rune const _surr1 = 0xd800; + static Rune const _surr2 = 0xdc00; + Rune r_ = r - _surr_self; + *r1 = _surr1 + ((r_ >> 10) & 0x3ff); + *r2 = _surr2 + (r_ & 0x3ff); + } + + gb_internal isize utf16_decode(u16 const *s, isize n, Rune *r) { + static Rune const _surr1 = 0xd800; + static Rune const _surr2 = 0xdc00; + static Rune const _surr3 = 0xe000; + static Rune const _surr_self = 0x10000; + if (n < 1) { + *r = GB_RUNE_INVALID; + return 0; + } + u16 c = s[0]; + if (c < 0xd800 || c > 0xdfff) { + *r = cast(Rune)c; + return 1; + } + if (c >= 0xdc00) { + *r = GB_RUNE_INVALID; + return 1; + } + if (n < 2) { + *r = GB_RUNE_INVALID; + return 1; + } + u16 c2 = s[1]; + if (c2 < 0xdc00 || c2 > 0xdfff) { + *r = GB_RUNE_INVALID; + return 1; + } + *r = (((c-_surr1)<<10) | (c2 - _surr2)) + _surr_self; + return 2; + } + gb_internal int convert_multibyte_to_widechar(char const *multibyte_input, usize input_length, wchar_t *output, usize output_size) { - String string = copy_string(heap_allocator(), make_string(cast(u8 const*)multibyte_input, input_length)); /* Guarantee NULL terminator */ - u8* input = string.text; + u16 *out = cast(u16 *)output; + String s = make_string(cast(u8 const *)multibyte_input, input_length); + isize i = 0; + isize output_len = 0; + while (i < s.len) { + Rune r = 0; + isize width = utf8_decode(s.text + i, s.len - i, &r); + if (r == GB_RUNE_INVALID) { + return -1; + } + i += width; + if (r < 0x10000) { + if (out) { + if (cast(usize)output_len+1 > output_size) { + return -1; + } + out[output_len] = cast(u16)r; + } + output_len += 1; + } else { + if (out) { + if (cast(usize)output_len+2 > output_size) { + return -1; + } + u16 r1, r2; + utf16_encode_surrogate_pair(r, &r1, &r2); + out[output_len+0] = r1; + out[output_len+1] = r2; + } + output_len += 2; + } + } - mbstate_t ps = { 0 }; - size_t result = mbsrtowcs(output, cast(const char**)&input, output_size, &ps); - - gb_free(heap_allocator(), string.text); - return (result == (size_t)-1) ? -1 : (int)result; + return cast(int)output_len; } gb_internal int convert_widechar_to_multibyte(wchar_t const *widechar_input, usize input_length, char* output, usize output_size) { - String string = copy_string(heap_allocator(), make_string(cast(u8 const*)widechar_input, input_length)); /* Guarantee NULL terminator */ - u8* input = string.text; + u16 const *in = cast(u16 const *)widechar_input; + isize i = 0; + isize output_len = 0; + while (i < input_length) { + Rune r; + isize width = utf16_decode(in + i, input_length - i, &r); + if (r == GB_RUNE_INVALID) { + return -1; + } + i += width; - mbstate_t ps = { 0 }; - size_t result = wcsrtombs(output, cast(const wchar_t**)&input, output_size, &ps); + u8 buf[4]; + isize char_len = gb_utf8_encode_rune(buf, r); - gb_free(heap_allocator(), string.text); - return (result == (size_t)-1) ? -1 : (int)result; + if(output) { + if (cast(usize)output_len+cast(usize)char_len > output_size) { + return -1; + } + gb_memmove(output + output_len, buf, char_len); + } + output_len += char_len; + } + return cast(int)output_len; } #else #error Implement system diff --git a/tests/issues/test_issue_6101.odin b/tests/issues/test_issue_6101.odin new file mode 100644 index 000000000..9f24ade52 --- /dev/null +++ b/tests/issues/test_issue_6101.odin @@ -0,0 +1,23 @@ +// Tests issue #6101 https://github.com/odin-lang/Odin/issues/6101 +package test_issues + +import "core:testing" + +@(test) +test_issue_6101_bmp :: proc(t: ^testing.T) { + s := string16("\u732b") + testing.expect_value(t, len(s), 1) + + u := transmute([]u16)s + testing.expect_value(t, u[0], 0x732b) +} + +@(test) +test_issue_6101_non_bmp :: proc(t: ^testing.T) { + s := string16("\U0001F63A") + testing.expect_value(t, len(s), 2) + + u := transmute([]u16)s + testing.expect_value(t, u[0], 0xD83D) + testing.expect_value(t, u[1], 0xDE3A) +} From 55f3a45322af4a2b2abf4388c0f66ae7c67eabae Mon Sep 17 00:00:00 2001 From: CJ Date: Sat, 24 Jan 2026 01:30:15 +0900 Subject: [PATCH 158/212] Update run.bat and run.sh --- tests/issues/run.bat | 1 + tests/issues/run.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 0ceaf554c..9106a339b 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -27,6 +27,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin build ..\test_issue_5265.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_5699.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6068.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_6101.odin %COMMON% || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index ce02ba20a..58382c7ad 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -34,6 +34,7 @@ $ODIN build ../test_issue_5097-2.odin $COMMON $ODIN build ../test_issue_5265.odin $COMMON $ODIN test ../test_issue_5699.odin $COMMON $ODIN test ../test_issue_6068.odin $COMMON +$ODIN test ../test_issue_6101.odin $COMMON set +x From 85e2e3244b96a72aa7b4f5e7fa6acc944b9d0471 Mon Sep 17 00:00:00 2001 From: Tohei Ichikawa Date: Fri, 23 Jan 2026 11:45:24 -0500 Subject: [PATCH 159/212] Create new `core:sys/darwin/CoreGraphics` package (#6147) * Add Darwin mouse cursor-related bindings Create CoreGraphics package in the process * Remove unneeded semicolons * Define some CG types in CoreFoundation instead This matches where Darwin's C header files defines these types --- core/sys/darwin/CoreFoundation/CFCGTypes.odin | 18 ++++++ .../sys/darwin/CoreGraphics/CoreGraphics.odin | 57 +++++++++++++++++++ core/sys/darwin/Foundation/NSCursor.odin | 13 +++++ core/sys/darwin/Foundation/NSTypes.odin | 13 ++--- core/sys/darwin/Foundation/NSWindow.odin | 26 ++++++++- 5 files changed, 115 insertions(+), 12 deletions(-) create mode 100644 core/sys/darwin/CoreFoundation/CFCGTypes.odin create mode 100644 core/sys/darwin/CoreGraphics/CoreGraphics.odin diff --git a/core/sys/darwin/CoreFoundation/CFCGTypes.odin b/core/sys/darwin/CoreFoundation/CFCGTypes.odin new file mode 100644 index 000000000..ccfdf177a --- /dev/null +++ b/core/sys/darwin/CoreFoundation/CFCGTypes.odin @@ -0,0 +1,18 @@ +package CoreFoundation + +CGFloat :: distinct (f32 when size_of(uint) == 4 else f64) + +CGPoint :: struct { + x: CGFloat, + y: CGFloat, +} + +CGRect :: struct { + using origin: CGPoint, + using size: CGSize, +} + +CGSize :: struct { + width: CGFloat, + height: CGFloat, +} diff --git a/core/sys/darwin/CoreGraphics/CoreGraphics.odin b/core/sys/darwin/CoreGraphics/CoreGraphics.odin new file mode 100644 index 000000000..e2ba5fe3c --- /dev/null +++ b/core/sys/darwin/CoreGraphics/CoreGraphics.odin @@ -0,0 +1,57 @@ +package CoreGraphics + +import "core:c" +import CF "core:sys/darwin/CoreFoundation" + +@(require) +foreign import "system:CoreGraphics.framework" + +@(link_prefix="CG", default_calling_convention="c") +foreign CoreGraphics { + AssociateMouseAndMouseCursorPosition :: proc(connected: b32) -> Error --- + DisplayIDToOpenGLDisplayMask :: proc(display: DirectDisplayID) -> OpenGLDisplayMask --- + DisplayMoveCursorToPoint :: proc(display: DirectDisplayID, point: Point) -> Error --- + EventSourceKeyState :: proc(stateID: EventSourceStateID, key: KeyCode) -> bool --- + GetActiveDisplayList :: proc(maxDisplays: c.uint32_t, activeDisplays: [^]DirectDisplayID, displayCount: ^c.uint32_t) -> Error --- + GetDisplaysWithOpenGLDisplayMask :: proc(mask: OpenGLDisplayMask, maxDisplays: c.uint32_t, displays: [^]DirectDisplayID, matchingDisplayCount: ^c.uint32_t) -> Error --- + GetDisplaysWithPoint :: proc(point: Point, maxDisplays: c.uint32_t, displays: [^]DirectDisplayID, matchingDisplayCount: ^c.uint32_t) -> Error --- + GetDisplaysWithRect :: proc(rect: Rect, maxDisplays: c.uint32_t, displays: [^]DirectDisplayID, matchingDisplayCount: ^c.uint32_t) -> Error --- + GetOnlineDisplayList :: proc(maxDisplays: c.uint32_t, onlineDisplays: [^]DirectDisplayID, displayCount: ^c.uint32_t) -> Error --- + MainDisplayID :: proc() -> DirectDisplayID --- + OpenGLDisplayMaskToDisplayID :: proc(mask: OpenGLDisplayMask) -> DirectDisplayID --- + WarpMouseCursorPosition :: proc(newCursorPosition: Point) -> Error --- +} + +DirectDisplayID :: c.uint32_t + +Error :: enum c.int32_t { + Success = 0, + Failure = 1000, + IllegalArgument = 1001, + InvalidConnection = 1002, + InvalidContext = 1003, + CannotComplete = 1004, + NotImplemented = 1006, + RangeCheck = 1007, + TypeCheck = 1008, + InvalidOperation = 1010, + NoneAvailable = 1011, +} + +EventSourceStateID :: enum c.int32_t { + Private = -1, + CombinedSessionState = 0, + HIDSystemState = 1, +} + +Float :: CF.CGFloat + +KeyCode :: c.uint16_t + +OpenGLDisplayMask :: c.uint32_t + +Point :: CF.CGPoint + +Rect :: CF.CGRect + +Size :: CF.CGSize diff --git a/core/sys/darwin/Foundation/NSCursor.odin b/core/sys/darwin/Foundation/NSCursor.odin index ad2decdca..2bebf5362 100644 --- a/core/sys/darwin/Foundation/NSCursor.odin +++ b/core/sys/darwin/Foundation/NSCursor.odin @@ -3,6 +3,19 @@ package objc_Foundation @(objc_class="NSCursor") Cursor :: struct {using _: Object} +@(objc_type=Cursor, objc_name="hide", objc_is_class_method=true) +Cursor_hide :: proc() { + msgSend(nil, Cursor, "hide") +} +@(objc_type=Cursor, objc_name="unhide", objc_is_class_method=true) +Cursor_unhide :: proc() { + msgSend(nil, Cursor, "unhide") +} +@(objc_type=Cursor, objc_name="setHiddenUntilMouseMoves", objc_is_class_method=true) +Cursor_setHiddenUntilMouseMoves :: proc(flag: BOOL) { + msgSend(nil, Cursor, "setHiddenUntilMouseMoves:", flag) +} + @(objc_type=Cursor, objc_name="set") Cursor_set :: proc(self: ^Cursor) { msgSend(EventType, self, "set") diff --git a/core/sys/darwin/Foundation/NSTypes.odin b/core/sys/darwin/Foundation/NSTypes.odin index 822a07ab1..7c379cf99 100644 --- a/core/sys/darwin/Foundation/NSTypes.odin +++ b/core/sys/darwin/Foundation/NSTypes.odin @@ -1,6 +1,7 @@ package objc_Foundation import "base:intrinsics" +import CF "core:sys/darwin/CoreFoundation" @(private) msgSend :: intrinsics.objc_send @@ -34,17 +35,11 @@ ComparisonResult :: enum Integer { NotFound :: IntegerMax -Float :: distinct (f32 when size_of(uint) == 4 else f64) +Float :: CF.CGFloat -Point :: struct { - x: Float, - y: Float, -} +Point :: CF.CGPoint -Size :: struct { - width: Float, - height: Float, -} +Size :: CF.CGSize when size_of(UInteger) == 8 { _UINTEGER_ENCODING :: "Q" diff --git a/core/sys/darwin/Foundation/NSWindow.odin b/core/sys/darwin/Foundation/NSWindow.odin index 11f8b187e..fcf35546e 100644 --- a/core/sys/darwin/Foundation/NSWindow.odin +++ b/core/sys/darwin/Foundation/NSWindow.odin @@ -1,12 +1,28 @@ package objc_Foundation import "core:strings" +import CF "core:sys/darwin/CoreFoundation" import "base:runtime" import "base:intrinsics" -Rect :: struct { - using origin: Point, - using size: Size, +Rect :: CF.CGRect +MaxX :: proc(aRect: Rect) -> Float { + return aRect.origin.x + aRect.size.width +} +MaxY :: proc(aRect: Rect) -> Float { + return aRect.origin.y + aRect.size.height +} +MidX :: proc(aRect: Rect) -> Float { + return aRect.origin.x + aRect.size.width*0.5 +} +MidY :: proc(aRect: Rect) -> Float { + return aRect.origin.y + aRect.size.height*0.5 +} +MinX :: proc(aRect: Rect) -> Float { + return aRect.origin.x +} +MinY :: proc(aRect: Rect) -> Float { + return aRect.origin.y } Depth :: enum UInteger { @@ -988,3 +1004,7 @@ Window_contentRectForFrameRectInstance :: proc "c" (self: ^Window, frameRect: Re Window_frameRectForContentRectInstance :: proc "c" (self: ^Window, contentRect: Rect) -> Rect { return msgSend(Rect, self, "frameRectForContentRect:", contentRect) } +@(objc_type = Window, objc_name = "screen") +Window_screen :: proc "c" (self: ^Window) -> ^Screen { + return msgSend(^Screen, self, "screen") +} From d108b50c89d7ac8e15da3cb7fa34a0c3cc41aa85 Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Fri, 23 Jan 2026 17:47:20 +0100 Subject: [PATCH 160/212] add new CoreGraphics to examples for doc gen --- examples/all/all_vendor.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/all/all_vendor.odin b/examples/all/all_vendor.odin index 80f6c52bb..fc2a401b3 100644 --- a/examples/all/all_vendor.odin +++ b/examples/all/all_vendor.odin @@ -30,6 +30,7 @@ package all // NOTE: needed for doc generator @(require) import "core:sys/darwin/Foundation" @(require) import "core:sys/darwin/CoreFoundation" +@(require) import "core:sys/darwin/CoreGraphics" @(require) import "core:sys/darwin/Security" @(require) import "vendor:darwin/CoreVideo" @(require) import "vendor:darwin/Metal" From 5e4895e76dc5bb5ee4357037433825907403457e Mon Sep 17 00:00:00 2001 From: Barinzaya Date: Fri, 23 Jan 2026 15:53:29 -0500 Subject: [PATCH 161/212] Fixed some issues with `in` and `not_in` on constant `bit_set`s. This addresses two issues: - With a `bit_set` having no underlying type and a non-zero lower bound, `in` and `not_in` were returning incorrect results when done at compile-time. - With a `bit_set` of more than 128 bits, `in` always returns false on values that fall within the upper 64 bits. --- src/check_expr.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 8fdd5372b..d64c733f3 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4125,15 +4125,19 @@ gb_internal void check_binary_expr(CheckerContext *c, Operand *x, Ast *node, Typ i64 upper = yt->BitSet.upper; if (lower <= key && key <= upper) { - i64 bit = 1ll<mode = Addressing_Constant; x->type = t_untyped_bool; if (op.kind == Token_in) { - x->value = exact_value_bool((bit & bits) != 0); + x->value = exact_value_bool(!big_int_is_zero(&mask)); } else { - x->value = exact_value_bool((bit & bits) == 0); + x->value = exact_value_bool(big_int_is_zero(&mask)); } x->expr = node; return; From 808c14f60f3753e9030de8a8d9086dacb341c414 Mon Sep 17 00:00:00 2001 From: bplu4t2f Date: Sat, 3 Jan 2026 12:07:47 +0100 Subject: [PATCH 162/212] Add more win32 bindings --- core/sys/windows/gdi32.odin | 11 +++++-- core/sys/windows/user32.odin | 12 +++++++ core/sys/windows/ux_theme.odin | 57 ++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 2 deletions(-) diff --git a/core/sys/windows/gdi32.odin b/core/sys/windows/gdi32.odin index 756ec5011..ad2243b56 100644 --- a/core/sys/windows/gdi32.odin +++ b/core/sys/windows/gdi32.odin @@ -34,7 +34,6 @@ foreign gdi32 { SetDCBrushColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- GetDCBrushColor :: proc(hdc: HDC) -> COLORREF --- PatBlt :: proc(hdc: HDC, x, y, w, h: INT, rop: DWORD) -> BOOL --- - Rectangle :: proc(hdc: HDC, left, top, right, bottom: INT) -> BOOL --- CreateFontW :: proc(cHeight, cWidth, cEscapement, cOrientation, cWeight: INT, bItalic, bUnderline, bStrikeOut, iCharSet, iOutPrecision: DWORD, iClipPrecision, iQuality, iPitchAndFamily: DWORD, pszFaceName: LPCWSTR) -> HFONT --- CreateFontIndirectW :: proc(lplf: ^LOGFONTW) -> HFONT --- @@ -70,12 +69,20 @@ foreign gdi32 { RealizePalette :: proc(hdc: HDC) -> UINT --- SetTextColor :: proc(hdc: HDC, color: COLORREF) -> COLORREF --- - RoundRect :: proc(hdc: HDC, left: INT, top: INT, right: INT, bottom: INT, width: INT, height: INT) -> BOOL --- SetPixel :: proc(hdc: HDC, x: INT, y: INT, color: COLORREF) -> COLORREF --- GdiTransparentBlt :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, crTransparent: UINT) -> BOOL --- GdiGradientFill :: proc(hdc: HDC, pVertex: PTRIVERTEX, nVertex: ULONG, pMesh: PVOID, nCount: ULONG, ulMode: ULONG) -> BOOL --- GdiAlphaBlend :: proc(hdcDest: HDC, xoriginDest, yoriginDest, wDest, hDest: INT, hdcSrc: HDC, xoriginSrc, yoriginSrc, wSrc, hSrc: INT, ftn: BLENDFUNCTION) -> BOOL --- + + // Filled Shape Functions + Rectangle :: proc(hdc: HDC, left, top, right, bottom: c_int) -> BOOL --- + Ellipse :: proc(hdc: HDC, left, top, right, bottom: c_int) -> BOOL --- + RoundRect :: proc(hdc: HDC, left, top, right, bottom, width, height: c_int) -> BOOL --- + Pie :: proc(hdc: HDC, left, right, top, bottom, xr1, yr1, xr2, yr2: c_int) -> BOOL --- + Chord :: proc(hdc: HDC, x1, y1, x2, y2, x3, y3, x4, y4: c_int) -> BOOL --- + Polygon :: proc(hdc: HDC, apt: [^]POINT, cpt: c_int) -> BOOL --- + PolyPolygon :: proc(hdc: HDC, apt: [^]POINT, asz: [^]c_int, csz: c_int) -> BOOL --- } @(require_results) diff --git a/core/sys/windows/user32.odin b/core/sys/windows/user32.odin index cd3efdeb7..580c09b45 100644 --- a/core/sys/windows/user32.odin +++ b/core/sys/windows/user32.odin @@ -58,6 +58,7 @@ foreign user32 { IsZoomed :: proc(hwnd: HWND) -> BOOL --- BringWindowToTop :: proc(hWnd: HWND) -> BOOL --- GetTopWindow :: proc(hWnd: HWND) -> HWND --- + GetWindow :: proc(hwnd: HWND, uCmd: UINT) -> HWND --- SetForegroundWindow :: proc(hWnd: HWND) -> BOOL --- GetForegroundWindow :: proc() -> HWND --- GetDesktopWindow :: proc() -> HWND --- @@ -279,6 +280,7 @@ foreign user32 { FillRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- FrameRect :: proc(hDC: HDC, lprc: ^RECT, hbr: HBRUSH) -> c_int --- + InvertRect :: proc(hDC: HDC, lprc: ^RECT) -> BOOL --- EqualRect :: proc(lprc1, lprc2: ^RECT) -> BOOL --- OffsetRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- InflateRect :: proc(lprc1: ^RECT, dx, dy: INT) -> BOOL --- @@ -939,3 +941,13 @@ ESB_DISABLE_UP :: 0x0001 ESB_DISABLE_DOWN :: 0x0002 ESB_DISABLE_LTUP :: ESB_DISABLE_LEFT ESB_DISABLE_RTDN :: ESB_DISABLE_RIGHT + +// Command constants for GetWindow +GW_HWNDFIRST :: 0 +GW_HWNDLAST :: 1 +GW_HWNDNEXT :: 2 +GW_HWNDPREV :: 3 +GW_OWNER :: 4 +GW_CHILD :: 5 +GW_ENABLEDPOPUP :: 6 +GW_MAX :: 6 diff --git a/core/sys/windows/ux_theme.odin b/core/sys/windows/ux_theme.odin index 4ce126c73..e19800246 100644 --- a/core/sys/windows/ux_theme.odin +++ b/core/sys/windows/ux_theme.odin @@ -14,5 +14,62 @@ PMARGINS :: ^MARGINS @(default_calling_convention="system") foreign uxtheme { IsThemeActive :: proc() -> BOOL --- + GetWindowTheme :: proc(hwnd: HWND) -> HTHEME --- SetWindowTheme :: proc(hWnd: HWND, pszSubAppName, pszSubIdList: LPCWSTR) -> HRESULT --- + + // Buffered painting and buffered animation + BufferedPaintInit :: proc() -> HRESULT --- + BufferedPaintUnInit :: proc() -> HRESULT --- + + BeginBufferedPaint :: proc(hdcTarget: HDC, prcTarget: ^RECT, dwFormat: BP_BUFFERFORMAT, pPaintParams: ^BP_PAINTPARAMS, phdc: ^HDC) -> HPAINTBUFFER --- + EndBufferedPaint :: proc(hBufferedPaint: HPAINTBUFFER, fUpdateTarget: BOOL) -> HRESULT --- + + GetBufferedPaintTargetRect :: proc(hBufferedPaint: HPAINTBUFFER, prc: ^RECT) -> HRESULT --- + GetBufferedPaintTargetDC :: proc(hBufferedPaint: HPAINTBUFFER) -> HDC --- + GetBufferedPaintDC :: proc(hBufferedPaint: HPAINTBUFFER) -> HDC --- + GetBufferedPaintBits :: proc(hBufferedPaint, ppbBuffer: ^[^]RGBQUAD, pcxRow: ^c_int) -> HRESULT --- + + BufferedPaintClear :: proc(hBufferedPaint: HPAINTBUFFER, prc: ^RECT) -> HRESULT --- + BufferedPaintSetAlpha :: proc(hBufferedPaint: HPAINTBUFFER, prc: ^RECT, alpha: BYTE) -> HRESULT --- + + BufferedPaintStopAllAnimations :: proc(hwnd: HWND) -> HRESULT --- + BeginBufferedAnimation :: proc(hwnd: HWND, hdcTarget: HDC, prcTarget: ^RECT, dwFormat: BP_BUFFERFORMAT, pPaintParams: ^BP_PAINTPARAMS, pAnimationParams: ^BP_ANIMATIONPARAMS, phdcFrom: ^HDC, phdcTo: ^HDC) -> HANIMATIONBUFFER --- + BufferedPaintRenderAnimation :: proc(hwnd: HWND, hdcTarget: HDC) -> BOOL --- +} + +HTHEME :: distinct HANDLE +HPAINTBUFFER :: distinct HANDLE +HANIMATIONBUFFER :: distinct HANDLE + +BP_BUFFERFORMAT :: enum c_int { + BPBF_COMPATIBLEBITMAP, + BPBF_DIB, + BPBF_TOPDOWNDIB, + BPBF_TOPDOWNMONODIB, +} + +BP_ANIMATIONSTYLE :: enum c_int { + BPAS_NONE, + BPAS_LINEAR, + BPAS_CUBIC, + BPAS_SINE, +} + +// Constants for BP_PAINTPARAMS.dwFlags +BPPF_ERASE :: 0x0001 +BPPF_NOCLIP :: 0x0002 +BPPF_NONCLIENT :: 0x0004 + +BP_ANIMATIONPARAMS :: struct { + cbSize: DWORD, + dwFlags: DWORD, + style: BP_ANIMATIONSTYLE, + dwDuration: DWORD, +} + +BP_PAINTPARAMS :: struct { + cbSize: DWORD, + dwFlags: DWORD, + prcExclude: ^RECT, + pBlendFunction: ^BLENDFUNCTION, } From e0ff16f98cf6c61115db50bb607479e6f8b0b98b Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sat, 24 Jan 2026 10:53:38 +0100 Subject: [PATCH 163/212] Fix #6126 `ExactValue_Compound` wasn't handled properly. --- src/check_expr.cpp | 4 ++-- src/exact_value.cpp | 13 ++++--------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 8fdd5372b..4e791af16 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -12128,12 +12128,12 @@ gb_internal bool is_exact_value_zero(ExactValue const &v) { -gb_internal bool compare_exact_values_compound_lit(TokenKind op, ExactValue x, ExactValue y, bool *do_break_) { +gb_internal bool compare_exact_values_compound_lit(TokenKind op, ExactValue x, ExactValue y) { ast_node(x_cl, CompoundLit, x.value_compound); ast_node(y_cl, CompoundLit, y.value_compound); if (x_cl->elems.count != y_cl->elems.count) { - if (do_break_) *do_break_ = true; + return false; } bool test = op == Token_CmpEq; diff --git a/src/exact_value.cpp b/src/exact_value.cpp index f266b8b24..0f425e043 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -947,7 +947,7 @@ gb_internal gb_inline i32 cmp_f64(f64 a, f64 b) { return (a > b) - (a < b); } -gb_internal bool compare_exact_values_compound_lit(TokenKind op, ExactValue x, ExactValue y, bool *do_break_); +gb_internal bool compare_exact_values_compound_lit(TokenKind op, ExactValue x, ExactValue y); gb_internal bool compare_exact_values(TokenKind op, ExactValue x, ExactValue y) { match_exact_values(&x, &y); @@ -1060,18 +1060,13 @@ gb_internal bool compare_exact_values(TokenKind op, ExactValue x, ExactValue y) case ExactValue_Compound: if (op != Token_CmpEq && op != Token_NotEq) { - break; + return false; } if (x.kind != y.kind) { - break; + return false; } - bool do_break = false; - bool res = compare_exact_values_compound_lit(op, x, y, &do_break); - if (do_break) { - break; - } - return res; + return compare_exact_values_compound_lit(op, x, y); } GB_PANIC("Invalid comparison: %d", x.kind); From 533079fc1ae8e88ae7a5ce10666e56a53791a0d0 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sat, 24 Jan 2026 11:13:50 +0100 Subject: [PATCH 164/212] Fix #6123 --- core/slice/sort.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/slice/sort.odin b/core/slice/sort.odin index 9f91a0f73..ed9d1f315 100644 --- a/core/slice/sort.odin +++ b/core/slice/sort.odin @@ -416,7 +416,7 @@ reverse_sort_by_cmp :: proc(data: $T/[]$E, cmp: proc(i, j: E) -> Ordering) { sort_by_cmp_with_data(data, proc(i, j: E, user_data: rawptr) -> Ordering { k := (proc(i, j: E) -> Ordering)(user_data) return k(j, i) - }, rawptr(data)) + }, rawptr(cmp)) } From a9a65b5377e8146edc35040a1faedd38c425d6cf Mon Sep 17 00:00:00 2001 From: Laytan Laats Date: Sat, 24 Jan 2026 12:59:55 +0100 Subject: [PATCH 165/212] make #+vet tags always work in addition to command line flags --- src/parser.cpp | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index 277a405b7..91ee0ba22 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -6363,14 +6363,12 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { GB_ASSERT(string_starts_with(s, prefix)); s = string_trim_whitespace(substring(s, prefix.len, s.len)); + u64 vet_flags = build_context.vet_flags; + if (s.len == 0) { - return VetFlag_All; + vet_flags |= VetFlag_All; } - - u64 vet_flags = 0; - u64 vet_not_flags = 0; - while (s.len > 0) { String p = string_trim_whitespace(vet_tag_get_token(s, &s, /*allow_colon*/false)); if (p.len == 0) { @@ -6383,16 +6381,16 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { p = substring(p, 1, p.len); if (p.len == 0) { syntax_error(token_for_pos, "Expected a vet flag name after '!'"); - return build_context.vet_flags; + return vet_flags; } } u64 flag = get_vet_flag_from_name(p); if (flag != VetFlag_NONE) { if (is_notted) { - vet_not_flags |= flag; + vet_flags = vet_flags &~ flag; } else { - vet_flags |= flag; + vet_flags |= flag; } } else { ERROR_BLOCK(); @@ -6410,21 +6408,11 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { error_line("\tcast\n"); error_line("\ttabs\n"); error_line("\texplicit-allocators\n"); - return build_context.vet_flags; + return vet_flags; } } - if (vet_flags == 0 && vet_not_flags == 0) { - return build_context.vet_flags; - } - if (vet_flags == 0 && vet_not_flags != 0) { - return build_context.vet_flags &~ vet_not_flags; - } - if (vet_flags != 0 && vet_not_flags == 0) { - return vet_flags; - } - GB_ASSERT(vet_flags != 0 && vet_not_flags != 0); - return vet_flags &~ vet_not_flags; + return vet_flags; } gb_internal u64 parse_feature_tag(Token token_for_pos, String s) { From 1c529d8cb217cc97138934f393b5670e16fd1843 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Sat, 24 Jan 2026 14:06:31 +0100 Subject: [PATCH 166/212] Fix #6165 --- src/parser.cpp | 6 ++++++ tests/issues/run.bat | 1 + tests/issues/run.sh | 2 +- tests/issues/test_issue_6165.odin | 13 +++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tests/issues/test_issue_6165.odin diff --git a/src/parser.cpp b/src/parser.cpp index 277a405b7..fe864a6bc 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -6023,6 +6023,12 @@ gb_internal bool determine_path_from_string(BlockingMutex *file_mutex, Ast *node has_windows_drive = true; } } + + for (isize i = 0; i < original_string.len; i++) { + if (original_string.text[i] == '\\') { + original_string.text[i] = '/'; + } + } } #endif diff --git a/tests/issues/run.bat b/tests/issues/run.bat index 9106a339b..f17f646a6 100644 --- a/tests/issues/run.bat +++ b/tests/issues/run.bat @@ -28,6 +28,7 @@ set COMMON=-define:ODIN_TEST_FANCY=false -file -vet -strict-style -ignore-unused ..\..\..\odin test ..\test_issue_5699.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6068.odin %COMMON% || exit /b ..\..\..\odin test ..\test_issue_6101.odin %COMMON% || exit /b +..\..\..\odin test ..\test_issue_6165.odin %COMMON% || exit /b @echo off diff --git a/tests/issues/run.sh b/tests/issues/run.sh index 58382c7ad..73d0d9587 100755 --- a/tests/issues/run.sh +++ b/tests/issues/run.sh @@ -35,7 +35,7 @@ $ODIN build ../test_issue_5265.odin $COMMON $ODIN test ../test_issue_5699.odin $COMMON $ODIN test ../test_issue_6068.odin $COMMON $ODIN test ../test_issue_6101.odin $COMMON - +$ODIN test ../test_issue_6165.odin $COMMON set +x popd diff --git a/tests/issues/test_issue_6165.odin b/tests/issues/test_issue_6165.odin new file mode 100644 index 000000000..b16995f0e --- /dev/null +++ b/tests/issues/test_issue_6165.odin @@ -0,0 +1,13 @@ +// Tests issue #6165 https://github.com/odin-lang/Odin/issues/6165 +package test_issues + +import "core:testing" + +@(test) +test_issue_6165 :: proc(t: ^testing.T) { + TXT :: #load(ODIN_ROOT + "LICENSE") + + // We don't really care about the length. The test is whether this compiles, or + // if the compiler says it can't find the file we know to exist. + assert(len(TXT) > 0) +} \ No newline at end of file From c188bbf82d2313eda866ced3dd5edae8fef66d12 Mon Sep 17 00:00:00 2001 From: nowheredevel Date: Sat, 24 Jan 2026 14:38:53 -0500 Subject: [PATCH 167/212] Update SDL_image to 3.4.0 --- vendor/sdl3/image/LICENSE.txt | 2 +- vendor/sdl3/image/SDL3_image.dll | Bin 289280 -> 382464 bytes vendor/sdl3/image/SDL3_image.lib | Bin 13162 -> 23232 bytes vendor/sdl3/image/include/SDL_image.h | 2572 ++++++++++++++++++------- vendor/sdl3/image/sdl_image.odin | 114 +- 5 files changed, 2001 insertions(+), 687 deletions(-) diff --git a/vendor/sdl3/image/LICENSE.txt b/vendor/sdl3/image/LICENSE.txt index 52d0ed38b..acaf5b21b 100644 --- a/vendor/sdl3/image/LICENSE.txt +++ b/vendor/sdl3/image/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (C) 1997-2025 Sam Lantinga +Copyright (C) 1997-2026 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages diff --git a/vendor/sdl3/image/SDL3_image.dll b/vendor/sdl3/image/SDL3_image.dll index 2ba20a7cf88e1cc556544a550346747391b27a7d..ea48dab75ceed250bc0004511819c7d485a5701c 100644 GIT binary patch literal 382464 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

      d`AY0jf+1qD%;G=|@n&gI6nc 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 z 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 z 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%0A!z{0vn-6n<<{WhX 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

      q@m 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

      (OXCBlf`p9yIE8`dU-lM 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 diff --git a/vendor/sdl3/image/SDL3_image.lib b/vendor/sdl3/image/SDL3_image.lib index 4e9913b4c9606f22791723314bc8b242916a7c5c..7db2f734a43ecd93afafc9571ce696a6385c981a 100644 GIT binary patch literal 23232 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 delta 2358 zcmX@GmGM>D1dDnjGZPC1Fi7BHU|^_ZU=X!pU=S~0V31hFz@Xg&!7Be47(iI6hJgWu z)fX@@fUxos1_lsT>0w|1V-W@h6%hso=@1B(abREoVd-NG3?MAU#lQf<+CLZ=Kv=5& z2?K-F69xv2KM<^$!N35*x(gT>Kv?Gt0|OW*F)-*PF)+xLL9nb60|N-lY++ykVO=u@ z1`w9xU|;}Y*$E5`Agss5zyQK>PZ$_LSn~!00|;xmFff2{y0K$ex7#KiU z^%(;L80RrCsOB*+80kTpm#48}|ltZu}> zpl%c&@97)h9~3f~Q{G_m9%iS>nkwRxy;%e&|6?|v+$YUGIfbQWGMg0N zRcX=5y{vqb9aID-akFf85e{OkH!?GYCpJ3<1_mop28IH028LA<3=BQm3=IEN7#M1# z7#J3)GcYVsW?<-1VPFtZVPFW6W?*oTVPH5W&A`AV#lY}Gn}Okp6a&K_4F-k`O$LSq zx(p0wbQlAqlo%MI3>g^Alo=R~7&0(CQ)OVtQ)OV#Gh$!}Q)6J5VZ^|2 zM2&%gM}vW(L8G35fytPG!AKpP&lva^*cb#DxEXjEco-xY#2KU+q!`2)WEm70lo?bR z)ETrHbQ$y+3>XXxEMGYSQ*S1Oc^W~tQhPV*cq%DY#0O?gc#%)MF)gc)QQ6d05kR2bA4v>0?4^caj7Oc>1T87vuW85kLu=x;UHW*KG%Pha2NaKPzOAIfH2Dk<$K+yF;mJ!?g(k05^O{_#F1mT1 zdI2M6NNm;@Aw~uUj>*2-(vyueC$h*goGYDtTr-yGTtR%THdU1J!G;s|}J((aoA1WiBGD@&3UTMFtRH0ei)* zD0T8iPw&b1+(bCd9Kw!BFfcGMPBu67ne6W@%=u}N$}M>Y1_q|d?B?m*d_MYjKzf-O zSSB+{2~X}Z58;edD!Hr4z`(#V`K5WG$m3URFI5;A7+4t~rh^0Opry>@4R$V^Y>V!^ zmt$aHV4Hm1B9*h*;`tR2kA1SMWh%Fid&xm{1_lNW2A0VQQj(L;S%z@V-uCzpNCoF) zZL6Tk{8qx8HcGpnfke0_|F%x${9d&0B#6g7InySU^Vsf|OCTQ4A(6=+>_a#OEq8ncsSug$>yXOXv?csM zh$lLEw?iuD0oU)BL4hYWS<^9{bJHQ_8z3KwPoC+R&*}A7=bI7(1B1k5L8nZShlg$) zRbXIXkVFnP1#6GV2LeU7)Ap}@roq6#AjQBk`GU06WPaxmj=z4_KqgC1&UQ}ce7)z~ zYmlunlW#kxa>{LZe;dS;o$Tq7%K7-=uhX&&3=DFUx4WbYKYwuHy)**@gFM2X$&40} zoV_-jmqF2{FnOYDHm5_#^7lFn3=E2sC%TGH65*Vz>SjOL%tM5eW#_t!G7Jn1N|S>< z{3rW4i*V-n)tm-7M0v8gXYk|zZxM0*gG$dqR;WO&0A&uZ0QboYy+S#c=YIkRmg?mD zeyN=CEEC^?RH{w(^-t!!vCaE8$l2DKM9wckeg8l_oyj*t5=GakZUpmm zq3+2n_H_22EEp2X8C)TG9i&cg^4icu&Xpcce?UC_$>L#&obk%_e?dHh$&F!&oJzI6 z&prH~df@^nw_3qXj0j^0cJVQe&&*9sPt{Aw$zcEh@We6~ diff --git a/vendor/sdl3/image/include/SDL_image.h b/vendor/sdl3/image/include/SDL_image.h index 60d041fe6..19d9f2e02 100644 --- a/vendor/sdl3/image/include/SDL_image.h +++ b/vendor/sdl3/image/include/SDL_image.h @@ -1,6 +1,6 @@ /* SDL_image: An example image loading library for use with SDL - Copyright (C) 1997-2025 Sam Lantinga + Copyright (C) 1997-2026 Sam Lantinga This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -44,8 +44,8 @@ extern "C" { * Printable format: "%d.%d.%d", MAJOR, MINOR, MICRO */ #define SDL_IMAGE_MAJOR_VERSION 3 -#define SDL_IMAGE_MINOR_VERSION 2 -#define SDL_IMAGE_MICRO_VERSION 4 +#define SDL_IMAGE_MINOR_VERSION 4 +#define SDL_IMAGE_MICRO_VERSION 0 /** * This is the version number macro for the current SDL_image version. @@ -70,6 +70,103 @@ extern "C" { */ extern SDL_DECLSPEC int SDLCALL IMG_Version(void); +/** + * Load an image from a filesystem path into a software surface. + * + * An SDL_Surface is a buffer of pixels in memory accessible by the CPU. Use + * this if you plan to hand the data to something else or manipulate it + * further in code. + * + * There are no guarantees about what format the new SDL_Surface data will be; + * in many cases, SDL_image will attempt to supply a surface that exactly + * matches the provided image, but in others it might have to convert (either + * because the image is in a format that SDL doesn't directly support or + * because it's compressed data that could reasonably uncompress to various + * formats and SDL_image had to pick one). You can inspect an SDL_Surface for + * its specifics, and use SDL_ConvertSurface to then migrate to any supported + * format. + * + * If the image format supports a transparent pixel, SDL will set the colorkey + * for the surface. You can enable RLE acceleration on the surface afterwards + * by calling: SDL_SetSurfaceColorKey(image, SDL_RLEACCEL, + * image->format->colorkey); + * + * There is a separate function to read files from an SDL_IOStream, if you + * need an i/o abstraction to provide data from anywhere instead of a simple + * filesystem read; that function is IMG_Load_IO(). + * + * If you are using SDL's 2D rendering API, there is an equivalent call to + * load images directly into an SDL_Texture for use by the GPU without using a + * software surface: call IMG_LoadTexture() instead. + * + * When done with the returned surface, the app should dispose of it with a + * call to + * [SDL_DestroySurface](https://wiki.libsdl.org/SDL3/SDL_DestroySurface) + * (). + * + * \param file a path on the filesystem to load an image from. + * \returns a new SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadTyped_IO + * \sa IMG_Load_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_Load(const char *file); + +/** + * Load an image from an SDL data source into a software surface. + * + * An SDL_Surface is a buffer of pixels in memory accessible by the CPU. Use + * this if you plan to hand the data to something else or manipulate it + * further in code. + * + * There are no guarantees about what format the new SDL_Surface data will be; + * in many cases, SDL_image will attempt to supply a surface that exactly + * matches the provided image, but in others it might have to convert (either + * because the image is in a format that SDL doesn't directly support or + * because it's compressed data that could reasonably uncompress to various + * formats and SDL_image had to pick one). You can inspect an SDL_Surface for + * its specifics, and use SDL_ConvertSurface to then migrate to any supported + * format. + * + * If the image format supports a transparent pixel, SDL will set the colorkey + * for the surface. You can enable RLE acceleration on the surface afterwards + * by calling: SDL_SetSurfaceColorKey(image, SDL_RLEACCEL, + * image->format->colorkey); + * + * If `closeio` is true, `src` will be closed before returning, whether this + * function succeeds or not. SDL_image reads everything it needs from `src` + * during this call in any case. + * + * There is a separate function to read files from disk without having to deal + * with SDL_IOStream: `IMG_Load("filename.jpg")` will call this function and + * manage those details for you, determining the file type from the filename's + * extension. + * + * There is also IMG_LoadTyped_IO(), which is equivalent to this function + * except a file extension (like "BMP", "JPG", etc) can be specified, in case + * SDL_image cannot autodetect the file format. + * + * If you are using SDL's 2D rendering API, there is an equivalent call to + * load images directly into an SDL_Texture for use by the GPU without using a + * software surface: call IMG_LoadTexture_IO() instead. + * + * When done with the returned surface, the app should dispose of it with a + * call to SDL_DestroySurface(). + * + * \param src an SDL_IOStream that data will be read from. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns a new SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_Load + * \sa IMG_LoadTyped_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_Load_IO(SDL_IOStream *src, bool closeio); + /** * Load an image from an SDL data source into a software surface. * @@ -128,111 +225,11 @@ extern SDL_DECLSPEC int SDLCALL IMG_Version(void); * * \sa IMG_Load * \sa IMG_Load_IO - * \sa SDL_DestroySurface */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadTyped_IO(SDL_IOStream *src, bool closeio, const char *type); /** - * Load an image from a filesystem path into a software surface. - * - * An SDL_Surface is a buffer of pixels in memory accessible by the CPU. Use - * this if you plan to hand the data to something else or manipulate it - * further in code. - * - * There are no guarantees about what format the new SDL_Surface data will be; - * in many cases, SDL_image will attempt to supply a surface that exactly - * matches the provided image, but in others it might have to convert (either - * because the image is in a format that SDL doesn't directly support or - * because it's compressed data that could reasonably uncompress to various - * formats and SDL_image had to pick one). You can inspect an SDL_Surface for - * its specifics, and use SDL_ConvertSurface to then migrate to any supported - * format. - * - * If the image format supports a transparent pixel, SDL will set the colorkey - * for the surface. You can enable RLE acceleration on the surface afterwards - * by calling: SDL_SetSurfaceColorKey(image, SDL_RLEACCEL, - * image->format->colorkey); - * - * There is a separate function to read files from an SDL_IOStream, if you - * need an i/o abstraction to provide data from anywhere instead of a simple - * filesystem read; that function is IMG_Load_IO(). - * - * If you are using SDL's 2D rendering API, there is an equivalent call to - * load images directly into an SDL_Texture for use by the GPU without using a - * software surface: call IMG_LoadTexture() instead. - * - * When done with the returned surface, the app should dispose of it with a - * call to - * [SDL_DestroySurface](https://wiki.libsdl.org/SDL3/SDL_DestroySurface) - * (). - * - * \param file a path on the filesystem to load an image from. - * \returns a new SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadTyped_IO - * \sa IMG_Load_IO - * \sa SDL_DestroySurface - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_Load(const char *file); - -/** - * Load an image from an SDL data source into a software surface. - * - * An SDL_Surface is a buffer of pixels in memory accessible by the CPU. Use - * this if you plan to hand the data to something else or manipulate it - * further in code. - * - * There are no guarantees about what format the new SDL_Surface data will be; - * in many cases, SDL_image will attempt to supply a surface that exactly - * matches the provided image, but in others it might have to convert (either - * because the image is in a format that SDL doesn't directly support or - * because it's compressed data that could reasonably uncompress to various - * formats and SDL_image had to pick one). You can inspect an SDL_Surface for - * its specifics, and use SDL_ConvertSurface to then migrate to any supported - * format. - * - * If the image format supports a transparent pixel, SDL will set the colorkey - * for the surface. You can enable RLE acceleration on the surface afterwards - * by calling: SDL_SetSurfaceColorKey(image, SDL_RLEACCEL, - * image->format->colorkey); - * - * If `closeio` is true, `src` will be closed before returning, whether this - * function succeeds or not. SDL_image reads everything it needs from `src` - * during this call in any case. - * - * There is a separate function to read files from disk without having to deal - * with SDL_IOStream: `IMG_Load("filename.jpg")` will call this function and - * manage those details for you, determining the file type from the filename's - * extension. - * - * There is also IMG_LoadTyped_IO(), which is equivalent to this function - * except a file extension (like "BMP", "JPG", etc) can be specified, in case - * SDL_image cannot autodetect the file format. - * - * If you are using SDL's 2D rendering API, there is an equivalent call to - * load images directly into an SDL_Texture for use by the GPU without using a - * software surface: call IMG_LoadTexture_IO() instead. - * - * When done with the returned surface, the app should dispose of it with a - * call to SDL_DestroySurface(). - * - * \param src an SDL_IOStream that data will be read from. - * \param closeio true to close/free the SDL_IOStream before returning, false - * to leave it open. - * \returns a new SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_Load - * \sa IMG_LoadTyped_IO - * \sa SDL_DestroySurface - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_Load_IO(SDL_IOStream *src, bool closeio); - -/** - * Load an image from a filesystem path into a GPU texture. + * Load an image from a filesystem path into a texture. * * An SDL_Texture represents an image in GPU memory, usable by SDL's 2D Render * API. This can be significantly more efficient than using a CPU-bound @@ -255,7 +252,7 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_Load_IO(SDL_IOStream *src, bool cl * When done with the returned texture, the app should dispose of it with a * call to SDL_DestroyTexture(). * - * \param renderer the SDL_Renderer to use to create the GPU texture. + * \param renderer the SDL_Renderer to use to create the texture. * \param file a path on the filesystem to load an image from. * \returns a new texture, or NULL on error. * @@ -267,7 +264,7 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_Load_IO(SDL_IOStream *src, bool cl extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture(SDL_Renderer *renderer, const char *file); /** - * Load an image from an SDL data source into a GPU texture. + * Load an image from an SDL data source into a texture. * * An SDL_Texture represents an image in GPU memory, usable by SDL's 2D Render * API. This can be significantly more efficient than using a CPU-bound @@ -299,7 +296,7 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture(SDL_Renderer *renderer * When done with the returned texture, the app should dispose of it with a * call to SDL_DestroyTexture(). * - * \param renderer the SDL_Renderer to use to create the GPU texture. + * \param renderer the SDL_Renderer to use to create the texture. * \param src an SDL_IOStream that data will be read from. * \param closeio true to close/free the SDL_IOStream before returning, false * to leave it open. @@ -309,12 +306,11 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture(SDL_Renderer *renderer * * \sa IMG_LoadTexture * \sa IMG_LoadTextureTyped_IO - * \sa SDL_DestroyTexture */ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture_IO(SDL_Renderer *renderer, SDL_IOStream *src, bool closeio); /** - * Load an image from an SDL data source into a GPU texture. + * Load an image from an SDL data source into a texture. * * An SDL_Texture represents an image in GPU memory, usable by SDL's 2D Render * API. This can be significantly more efficient than using a CPU-bound @@ -352,7 +348,7 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture_IO(SDL_Renderer *rende * When done with the returned texture, the app should dispose of it with a * call to SDL_DestroyTexture(). * - * \param renderer the SDL_Renderer to use to create the GPU texture. + * \param renderer the SDL_Renderer to use to create the texture. * \param src an SDL_IOStream that data will be read from. * \param closeio true to close/free the SDL_IOStream before returning, false * to leave it open. @@ -364,10 +360,194 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTexture_IO(SDL_Renderer *rende * * \sa IMG_LoadTexture * \sa IMG_LoadTexture_IO - * \sa SDL_DestroyTexture */ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTextureTyped_IO(SDL_Renderer *renderer, SDL_IOStream *src, bool closeio, const char *type); +/** + * Load an image from a filesystem path into a GPU texture. + * + * An SDL_GPUTexture represents an image in GPU memory, usable by SDL's GPU + * API. Regardless of the source format of the image, this function will + * create a GPU texture with the format SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM + * with no mip levels. It can be bound as a sampled texture from a graphics or + * compute pipeline and as a a readonly storage texture in a compute pipeline. + * + * There is a separate function to read files from an SDL_IOStream, if you + * need an i/o abstraction to provide data from anywhere instead of a simple + * filesystem read; that function is IMG_LoadGPUTexture_IO(). + * + * When done with the returned texture, the app should dispose of it with a + * call to SDL_ReleaseGPUTexture(). + * + * \param device the SDL_GPUDevice to use to create the GPU texture. + * \param copy_pass the SDL_GPUCopyPass to use to upload the loaded image to + * the GPU texture. + * \param file a path on the filesystem to load an image from. + * \param width a pointer filled in with the width of the GPU texture. may be + * NULL. + * \param height a pointer filled in with the width of the GPU texture. may be + * NULL. + * \returns a new GPU texture, or NULL on error. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_LoadGPUTextureTyped_IO + * \sa IMG_LoadGPUTexture_IO + */ +extern SDL_DECLSPEC SDL_GPUTexture * SDLCALL IMG_LoadGPUTexture(SDL_GPUDevice *device, SDL_GPUCopyPass *copy_pass, const char *file, int *width, int *height); + +/** + * Load an image from an SDL data source into a GPU texture. + * + * An SDL_GPUTexture represents an image in GPU memory, usable by SDL's GPU + * API. Regardless of the source format of the image, this function will + * create a GPU texture with the format SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM + * with no mip levels. It can be bound as a sampled texture from a graphics or + * compute pipeline and as a a readonly storage texture in a compute pipeline. + * + * If `closeio` is true, `src` will be closed before returning, whether this + * function succeeds or not. SDL_image reads everything it needs from `src` + * during this call in any case. + * + * There is a separate function to read files from disk without having to deal + * with SDL_IOStream: `IMG_LoadGPUTexture(device, copy_pass, "filename.jpg", + * width, height) will call this function and manage those details for you, + * determining the file type from the filename's extension. + * + * There is also IMG_LoadGPUTextureTyped_IO(), which is equivalent to this + * function except a file extension (like "BMP", "JPG", etc) can be specified, + * in case SDL_image cannot autodetect the file format. + * + * When done with the returned texture, the app should dispose of it with a + * call to SDL_ReleaseGPUTexture(). + * + * \param device the SDL_GPUDevice to use to create the GPU texture. + * \param copy_pass the SDL_GPUCopyPass to use to upload the loaded image to + * the GPU texture. + * \param src an SDL_IOStream that data will be read from. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param width a pointer filled in with the width of the GPU texture. may be + * NULL. + * \param height a pointer filled in with the width of the GPU texture. may be + * NULL. + * \returns a new GPU texture, or NULL on error. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_LoadGPUTexture + * \sa IMG_LoadGPUTextureTyped_IO + */ +extern SDL_DECLSPEC SDL_GPUTexture * SDLCALL IMG_LoadGPUTexture_IO(SDL_GPUDevice *device, SDL_GPUCopyPass *copy_pass, SDL_IOStream *src, bool closeio, int *width, int *height); + +/** + * Load an image from an SDL data source into a GPU texture. + * + * An SDL_GPUTexture represents an image in GPU memory, usable by SDL's GPU + * API. Regardless of the source format of the image, this function will + * create a GPU texture with the format SDL_GPU_TEXTUREFORMAT_R8G8B8A8_UNORM + * with no mip levels. It can be bound as a sampled texture from a graphics or + * compute pipeline and as a a readonly storage texture in a compute pipeline. + * + * If `closeio` is true, `src` will be closed before returning, whether this + * function succeeds or not. SDL_image reads everything it needs from `src` + * during this call in any case. + * + * Even though this function accepts a file type, SDL_image may still try + * other decoders that are capable of detecting file type from the contents of + * the image data, but may rely on the caller-provided type string for formats + * that it cannot autodetect. If `type` is NULL, SDL_image will rely solely on + * its ability to guess the format. + * + * There is a separate function to read files from disk without having to deal + * with SDL_IOStream: `IMG_LoadGPUTexture(device, copy_pass, "filename.jpg", + * width, height) will call this function and manage those details for you, + * determining the file type from the filename's extension. + * + * There is also IMG_LoadGPUTexture_IO(), which is equivalent to this function + * except that it will rely on SDL_image to determine what type of data it is + * loading, much like passing a NULL for type. + * + * When done with the returned texture, the app should dispose of it with a + * call to SDL_ReleaseGPUTexture(). + * + * \param device the SDL_GPUDevice to use to create the GPU texture. + * \param copy_pass the SDL_GPUCopyPass to use to upload the loaded image to + * the GPU texture. + * \param src an SDL_IOStream that data will be read from. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param type a filename extension that represent this data ("BMP", "GIF", + * "PNG", etc). + * \param width a pointer filled in with the width of the GPU texture. may be + * NULL. + * \param height a pointer filled in with the width of the GPU texture. may be + * NULL. + * \returns a new GPU texture, or NULL on error. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_LoadGPUTexture + * \sa IMG_LoadGPUTexture_IO + */ +extern SDL_DECLSPEC SDL_GPUTexture * SDLCALL IMG_LoadGPUTextureTyped_IO(SDL_GPUDevice *device, SDL_GPUCopyPass *copy_pass, SDL_IOStream *src, bool closeio, const char *type, int *width, int *height); + +/** + * Get the image currently in the clipboard. + * + * When done with the returned surface, the app should dispose of it with a + * call to SDL_DestroySurface(). + * + * \returns a new SDL surface, or NULL if no supported image is available. + * + * \since This function is available since SDL_image 3.4.0. + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_GetClipboardImage(void); + +/** + * Detect ANI animated cursor data on a readable/seekable SDL_IOStream. + * + * This function attempts to determine if a file is a given filetype, reading + * the least amount possible from the SDL_IOStream (usually a few bytes). + * + * There is no distinction made between "not the filetype in question" and + * basic i/o errors. + * + * This function will always attempt to seek `src` back to where it started + * when this function was called, but it will not report any errors in doing + * so, but assuming seeking works, this means you can immediately use this + * with a different IMG_isTYPE function, or load the image without further + * seeking. + * + * You do not need to call this function to load data; SDL_image can work to + * determine file type in many cases in its standard load functions. + * + * \param src a seekable/readable SDL_IOStream to provide image data. + * \returns true if this is ANI animated cursor data, false otherwise. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_isAVIF + * \sa IMG_isBMP + * \sa IMG_isCUR + * \sa IMG_isGIF + * \sa IMG_isICO + * \sa IMG_isJPG + * \sa IMG_isJXL + * \sa IMG_isLBM + * \sa IMG_isPCX + * \sa IMG_isPNG + * \sa IMG_isPNM + * \sa IMG_isQOI + * \sa IMG_isSVG + * \sa IMG_isTIF + * \sa IMG_isWEBP + * \sa IMG_isXCF + * \sa IMG_isXPM + * \sa IMG_isXV + */ +extern SDL_DECLSPEC bool SDLCALL IMG_isANI(SDL_IOStream *src); + /** * Detect AVIF image data on a readable/seekable SDL_IOStream. * @@ -387,74 +567,31 @@ extern SDL_DECLSPEC SDL_Texture * SDLCALL IMG_LoadTextureTyped_IO(SDL_Renderer * * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is AVIF data, zero otherwise. + * \returns true if this is AVIF data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * - * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR + * \sa IMG_isANI * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isAVIF(SDL_IOStream *src); -/** - * Detect ICO image data on a readable/seekable SDL_IOStream. - * - * This function attempts to determine if a file is a given filetype, reading - * the least amount possible from the SDL_IOStream (usually a few bytes). - * - * There is no distinction made between "not the filetype in question" and - * basic i/o errors. - * - * This function will always attempt to seek `src` back to where it started - * when this function was called, but it will not report any errors in doing - * so, but assuming seeking works, this means you can immediately use this - * with a different IMG_isTYPE function, or load the image without further - * seeking. - * - * You do not need to call this function to load data; SDL_image can work to - * determine file type in many cases in its standard load functions. - * - * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is ICO data, zero otherwise. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_isAVIF - * \sa IMG_isCUR - * \sa IMG_isBMP - * \sa IMG_isGIF - * \sa IMG_isJPG - * \sa IMG_isJXL - * \sa IMG_isLBM - * \sa IMG_isPCX - * \sa IMG_isPNG - * \sa IMG_isPNM - * \sa IMG_isSVG - * \sa IMG_isQOI - * \sa IMG_isTIF - * \sa IMG_isXCF - * \sa IMG_isXPM - * \sa IMG_isXV - * \sa IMG_isWEBP - */ -extern SDL_DECLSPEC bool SDLCALL IMG_isICO(SDL_IOStream *src); - /** * Detect CUR image data on a readable/seekable SDL_IOStream. * @@ -474,27 +611,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isICO(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is CUR data, zero otherwise. + * \returns true if this is CUR data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO * \sa IMG_isBMP * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isCUR(SDL_IOStream *src); @@ -517,27 +655,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isCUR(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is BMP data, zero otherwise. + * \returns true if this is BMP data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isBMP(SDL_IOStream *src); @@ -560,30 +699,75 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isBMP(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is GIF data, zero otherwise. + * \returns true if this is GIF data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isGIF(SDL_IOStream *src); +/** + * Detect ICO image data on a readable/seekable SDL_IOStream. + * + * This function attempts to determine if a file is a given filetype, reading + * the least amount possible from the SDL_IOStream (usually a few bytes). + * + * There is no distinction made between "not the filetype in question" and + * basic i/o errors. + * + * This function will always attempt to seek `src` back to where it started + * when this function was called, but it will not report any errors in doing + * so, but assuming seeking works, this means you can immediately use this + * with a different IMG_isTYPE function, or load the image without further + * seeking. + * + * You do not need to call this function to load data; SDL_image can work to + * determine file type in many cases in its standard load functions. + * + * \param src a seekable/readable SDL_IOStream to provide image data. + * \returns true if this is ICO data, false otherwise. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_isANI + * \sa IMG_isAVIF + * \sa IMG_isBMP + * \sa IMG_isCUR + * \sa IMG_isGIF + * \sa IMG_isJPG + * \sa IMG_isJXL + * \sa IMG_isLBM + * \sa IMG_isPCX + * \sa IMG_isPNG + * \sa IMG_isPNM + * \sa IMG_isQOI + * \sa IMG_isSVG + * \sa IMG_isTIF + * \sa IMG_isWEBP + * \sa IMG_isXCF + * \sa IMG_isXPM + * \sa IMG_isXV + */ +extern SDL_DECLSPEC bool SDLCALL IMG_isICO(SDL_IOStream *src); + /** * Detect JPG image data on a readable/seekable SDL_IOStream. * @@ -603,27 +787,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isGIF(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is JPG data, zero otherwise. + * \returns true if this is JPG data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isJPG(SDL_IOStream *src); @@ -646,27 +831,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isJPG(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is JXL data, zero otherwise. + * \returns true if this is JXL data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isJXL(SDL_IOStream *src); @@ -689,27 +875,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isJXL(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is LBM data, zero otherwise. + * \returns true if this is LBM data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isLBM(SDL_IOStream *src); @@ -732,27 +919,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isLBM(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is PCX data, zero otherwise. + * \returns true if this is PCX data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isPCX(SDL_IOStream *src); @@ -775,27 +963,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isPCX(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is PNG data, zero otherwise. + * \returns true if this is PNG data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isPNG(SDL_IOStream *src); @@ -818,73 +1007,31 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isPNG(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is PNM data, zero otherwise. + * \returns true if this is PNM data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isPNM(SDL_IOStream *src); -/** - * Detect SVG image data on a readable/seekable SDL_IOStream. - * - * This function attempts to determine if a file is a given filetype, reading - * the least amount possible from the SDL_IOStream (usually a few bytes). - * - * There is no distinction made between "not the filetype in question" and - * basic i/o errors. - * - * This function will always attempt to seek `src` back to where it started - * when this function was called, but it will not report any errors in doing - * so, but assuming seeking works, this means you can immediately use this - * with a different IMG_isTYPE function, or load the image without further - * seeking. - * - * You do not need to call this function to load data; SDL_image can work to - * determine file type in many cases in its standard load functions. - * - * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is SVG data, zero otherwise. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR - * \sa IMG_isBMP - * \sa IMG_isGIF - * \sa IMG_isJPG - * \sa IMG_isJXL - * \sa IMG_isLBM - * \sa IMG_isPCX - * \sa IMG_isPNG - * \sa IMG_isPNM - * \sa IMG_isQOI - * \sa IMG_isTIF - * \sa IMG_isXCF - * \sa IMG_isXPM - * \sa IMG_isXV - * \sa IMG_isWEBP - */ -extern SDL_DECLSPEC bool SDLCALL IMG_isSVG(SDL_IOStream *src); - /** * Detect QOI image data on a readable/seekable SDL_IOStream. * @@ -904,15 +1051,16 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isSVG(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is QOI data, zero otherwise. + * \returns true if this is QOI data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM @@ -921,13 +1069,57 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isSVG(SDL_IOStream *src); * \sa IMG_isPNM * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isQOI(SDL_IOStream *src); +/** + * Detect SVG image data on a readable/seekable SDL_IOStream. + * + * This function attempts to determine if a file is a given filetype, reading + * the least amount possible from the SDL_IOStream (usually a few bytes). + * + * There is no distinction made between "not the filetype in question" and + * basic i/o errors. + * + * This function will always attempt to seek `src` back to where it started + * when this function was called, but it will not report any errors in doing + * so, but assuming seeking works, this means you can immediately use this + * with a different IMG_isTYPE function, or load the image without further + * seeking. + * + * You do not need to call this function to load data; SDL_image can work to + * determine file type in many cases in its standard load functions. + * + * \param src a seekable/readable SDL_IOStream to provide image data. + * \returns true if this is SVG data, false otherwise. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_isANI + * \sa IMG_isAVIF + * \sa IMG_isBMP + * \sa IMG_isCUR + * \sa IMG_isGIF + * \sa IMG_isICO + * \sa IMG_isJPG + * \sa IMG_isJXL + * \sa IMG_isLBM + * \sa IMG_isPCX + * \sa IMG_isPNG + * \sa IMG_isPNM + * \sa IMG_isQOI + * \sa IMG_isTIF + * \sa IMG_isWEBP + * \sa IMG_isXCF + * \sa IMG_isXPM + * \sa IMG_isXV + */ +extern SDL_DECLSPEC bool SDLCALL IMG_isSVG(SDL_IOStream *src); + /** * Detect TIFF image data on a readable/seekable SDL_IOStream. * @@ -947,30 +1139,75 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isQOI(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is TIFF data, zero otherwise. + * \returns true if this is TIFF data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isTIF(SDL_IOStream *src); +/** + * Detect WEBP image data on a readable/seekable SDL_IOStream. + * + * This function attempts to determine if a file is a given filetype, reading + * the least amount possible from the SDL_IOStream (usually a few bytes). + * + * There is no distinction made between "not the filetype in question" and + * basic i/o errors. + * + * This function will always attempt to seek `src` back to where it started + * when this function was called, but it will not report any errors in doing + * so, but assuming seeking works, this means you can immediately use this + * with a different IMG_isTYPE function, or load the image without further + * seeking. + * + * You do not need to call this function to load data; SDL_image can work to + * determine file type in many cases in its standard load functions. + * + * \param src a seekable/readable SDL_IOStream to provide image data. + * \returns true if this is WEBP data, false otherwise. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_isANI + * \sa IMG_isAVIF + * \sa IMG_isBMP + * \sa IMG_isCUR + * \sa IMG_isGIF + * \sa IMG_isICO + * \sa IMG_isJPG + * \sa IMG_isJXL + * \sa IMG_isLBM + * \sa IMG_isPCX + * \sa IMG_isPNG + * \sa IMG_isPNM + * \sa IMG_isQOI + * \sa IMG_isSVG + * \sa IMG_isTIF + * \sa IMG_isXCF + * \sa IMG_isXPM + * \sa IMG_isXV + */ +extern SDL_DECLSPEC bool SDLCALL IMG_isWEBP(SDL_IOStream *src); + /** * Detect XCF image data on a readable/seekable SDL_IOStream. * @@ -990,27 +1227,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isTIF(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is XCF data, zero otherwise. + * \returns true if this is XCF data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXPM * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isXCF(SDL_IOStream *src); @@ -1033,27 +1271,28 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isXCF(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is XPM data, zero otherwise. + * \returns true if this is XPM data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXV - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isXPM(SDL_IOStream *src); @@ -1076,73 +1315,31 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isXPM(SDL_IOStream *src); * determine file type in many cases in its standard load functions. * * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is XV data, zero otherwise. + * \returns true if this is XV data, false otherwise. * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isANI * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR * \sa IMG_isBMP + * \sa IMG_isCUR * \sa IMG_isGIF + * \sa IMG_isICO * \sa IMG_isJPG * \sa IMG_isJXL * \sa IMG_isLBM * \sa IMG_isPCX * \sa IMG_isPNG * \sa IMG_isPNM - * \sa IMG_isSVG * \sa IMG_isQOI + * \sa IMG_isSVG * \sa IMG_isTIF + * \sa IMG_isWEBP * \sa IMG_isXCF * \sa IMG_isXPM - * \sa IMG_isWEBP */ extern SDL_DECLSPEC bool SDLCALL IMG_isXV(SDL_IOStream *src); -/** - * Detect WEBP image data on a readable/seekable SDL_IOStream. - * - * This function attempts to determine if a file is a given filetype, reading - * the least amount possible from the SDL_IOStream (usually a few bytes). - * - * There is no distinction made between "not the filetype in question" and - * basic i/o errors. - * - * This function will always attempt to seek `src` back to where it started - * when this function was called, but it will not report any errors in doing - * so, but assuming seeking works, this means you can immediately use this - * with a different IMG_isTYPE function, or load the image without further - * seeking. - * - * You do not need to call this function to load data; SDL_image can work to - * determine file type in many cases in its standard load functions. - * - * \param src a seekable/readable SDL_IOStream to provide image data. - * \returns non-zero if this is WEBP data, zero otherwise. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_isAVIF - * \sa IMG_isICO - * \sa IMG_isCUR - * \sa IMG_isBMP - * \sa IMG_isGIF - * \sa IMG_isJPG - * \sa IMG_isJXL - * \sa IMG_isLBM - * \sa IMG_isPCX - * \sa IMG_isPNG - * \sa IMG_isPNM - * \sa IMG_isSVG - * \sa IMG_isQOI - * \sa IMG_isTIF - * \sa IMG_isXCF - * \sa IMG_isXPM - * \sa IMG_isXV - */ -extern SDL_DECLSPEC bool SDLCALL IMG_isWEBP(SDL_IOStream *src); - /** * Load a AVIF image directly. * @@ -1156,95 +1353,27 @@ extern SDL_DECLSPEC bool SDLCALL IMG_isWEBP(SDL_IOStream *src); * * \since This function is available since SDL_image 3.0.0. * - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadAVIF_IO(SDL_IOStream *src); -/** - * Load a ICO image directly. - * - * If you know you definitely have a ICO image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadICO_IO(SDL_IOStream *src); - -/** - * Load a CUR image directly. - * - * If you know you definitely have a CUR image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadCUR_IO(SDL_IOStream *src); - /** * Load a BMP image directly. * @@ -1259,26 +1388,60 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadCUR_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadBMP_IO(SDL_IOStream *src); +/** + * Load a CUR image directly. + * + * If you know you definitely have a CUR image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadCUR_IO(SDL_IOStream *src); + /** * Load a GIF image directly. * @@ -1293,26 +1456,60 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadBMP_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadGIF_IO(SDL_IOStream *src); +/** + * Load a ICO image directly. + * + * If you know you definitely have a ICO image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadICO_IO(SDL_IOStream *src); + /** * Load a JPG image directly. * @@ -1327,23 +1524,23 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadGIF_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadJPG_IO(SDL_IOStream *src); @@ -1361,23 +1558,23 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadJPG_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadJXL_IO(SDL_IOStream *src); @@ -1395,23 +1592,23 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadJXL_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadLBM_IO(SDL_IOStream *src); @@ -1429,23 +1626,23 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadLBM_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPCX_IO(SDL_IOStream *src); @@ -1463,23 +1660,23 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPCX_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNG_IO(SDL_IOStream *src); @@ -1497,23 +1694,23 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNG_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO * \sa IMG_LoadPCX_IO * \sa IMG_LoadPNG_IO - * \sa IMG_LoadSVG_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNM_IO(SDL_IOStream *src); @@ -1531,10 +1728,10 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNM_IO(SDL_IOStream *src); * \since This function is available since SDL_image 3.0.0. * * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO * \sa IMG_LoadJPG_IO * \sa IMG_LoadJXL_IO * \sa IMG_LoadLBM_IO @@ -1542,253 +1739,16 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadPNM_IO(SDL_IOStream *src); * \sa IMG_LoadPNG_IO * \sa IMG_LoadPNM_IO * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSizedSVG_IO * \sa IMG_LoadTGA_IO * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO * \sa IMG_LoadXCF_IO * \sa IMG_LoadXPM_IO * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadSVG_IO(SDL_IOStream *src); -/** - * Load a QOI image directly. - * - * If you know you definitely have a QOI image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadQOI_IO(SDL_IOStream *src); - -/** - * Load a TGA image directly. - * - * If you know you definitely have a TGA image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadTGA_IO(SDL_IOStream *src); - -/** - * Load a TIFF image directly. - * - * If you know you definitely have a TIFF image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadTIF_IO(SDL_IOStream *src); - -/** - * Load a XCF image directly. - * - * If you know you definitely have a XCF image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadXCF_IO(SDL_IOStream *src); - -/** - * Load a XPM image directly. - * - * If you know you definitely have a XPM image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXV_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadXPM_IO(SDL_IOStream *src); - -/** - * Load a XV image directly. - * - * If you know you definitely have a XV image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadWEBP_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadXV_IO(SDL_IOStream *src); - -/** - * Load a WEBP image directly. - * - * If you know you definitely have a WEBP image, you can call this function, - * which will skip SDL_image's file format detection routines. Generally it's - * better to use the abstract interfaces; also, there is only an SDL_IOStream - * interface available here. - * - * \param src an SDL_IOStream to load image data from. - * \returns SDL surface, or NULL on error. - * - * \since This function is available since SDL_image 3.0.0. - * - * \sa IMG_LoadAVIF_IO - * \sa IMG_LoadICO_IO - * \sa IMG_LoadCUR_IO - * \sa IMG_LoadBMP_IO - * \sa IMG_LoadGIF_IO - * \sa IMG_LoadJPG_IO - * \sa IMG_LoadJXL_IO - * \sa IMG_LoadLBM_IO - * \sa IMG_LoadPCX_IO - * \sa IMG_LoadPNG_IO - * \sa IMG_LoadPNM_IO - * \sa IMG_LoadSVG_IO - * \sa IMG_LoadQOI_IO - * \sa IMG_LoadTGA_IO - * \sa IMG_LoadTIF_IO - * \sa IMG_LoadXCF_IO - * \sa IMG_LoadXPM_IO - * \sa IMG_LoadXV_IO - */ -extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadWEBP_IO(SDL_IOStream *src); - /** * Load an SVG image, scaled to a specific size. * @@ -1807,9 +1767,249 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadWEBP_IO(SDL_IOStream *src); * \returns a new SDL surface, or NULL on error. * * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadSVG_IO */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadSizedSVG_IO(SDL_IOStream *src, int width, int height); +/** + * Load a QOI image directly. + * + * If you know you definitely have a QOI image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadQOI_IO(SDL_IOStream *src); + +/** + * Load a TGA image directly. + * + * If you know you definitely have a TGA image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadTGA_IO(SDL_IOStream *src); + +/** + * Load a TIFF image directly. + * + * If you know you definitely have a TIFF image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadTIF_IO(SDL_IOStream *src); + +/** + * Load a WEBP image directly. + * + * If you know you definitely have a WEBP image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadWEBP_IO(SDL_IOStream *src); + +/** + * Load a XCF image directly. + * + * If you know you definitely have a XCF image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXPM_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadXCF_IO(SDL_IOStream *src); + +/** + * Load a XPM image directly. + * + * If you know you definitely have a XPM image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXV_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadXPM_IO(SDL_IOStream *src); + +/** + * Load a XV image directly. + * + * If you know you definitely have a XV image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * \param src an SDL_IOStream to load image data from. + * \returns SDL surface, or NULL on error. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAVIF_IO + * \sa IMG_LoadBMP_IO + * \sa IMG_LoadCUR_IO + * \sa IMG_LoadGIF_IO + * \sa IMG_LoadICO_IO + * \sa IMG_LoadJPG_IO + * \sa IMG_LoadJXL_IO + * \sa IMG_LoadLBM_IO + * \sa IMG_LoadPCX_IO + * \sa IMG_LoadPNG_IO + * \sa IMG_LoadPNM_IO + * \sa IMG_LoadQOI_IO + * \sa IMG_LoadSVG_IO + * \sa IMG_LoadTGA_IO + * \sa IMG_LoadTIF_IO + * \sa IMG_LoadWEBP_IO + * \sa IMG_LoadXCF_IO + * \sa IMG_LoadXPM_IO + */ +extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_LoadXV_IO(SDL_IOStream *src); + /** * Load an XPM image from a memory array. * @@ -1848,6 +2048,67 @@ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_ReadXPMFromArray(char **xpm); */ extern SDL_DECLSPEC SDL_Surface * SDLCALL IMG_ReadXPMFromArrayToRGB888(char **xpm); +/** + * Save an SDL_Surface into an image file. + * + * If the file already exists, it will be overwritten. + * + * For formats that accept a quality, a default quality of 90 will be used. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write new file to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveTyped_IO + * \sa IMG_SaveAVIF + * \sa IMG_SaveBMP + * \sa IMG_SaveCUR + * \sa IMG_SaveGIF + * \sa IMG_SaveICO + * \sa IMG_SaveJPG + * \sa IMG_SavePNG + * \sa IMG_SaveTGA + * \sa IMG_SaveWEBP + */ +extern SDL_DECLSPEC bool SDLCALL IMG_Save(SDL_Surface *surface, const char *file); + +/** + * Save an SDL_Surface into formatted image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_Save() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * For formats that accept a quality, a default quality of 90 will be used. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param type a filename extension that represent this data ("BMP", "GIF", + * "PNG", etc). + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_Save + * \sa IMG_SaveAVIF_IO + * \sa IMG_SaveBMP_IO + * \sa IMG_SaveCUR_IO + * \sa IMG_SaveGIF_IO + * \sa IMG_SaveICO_IO + * \sa IMG_SaveJPG_IO + * \sa IMG_SavePNG_IO + * \sa IMG_SaveTGA_IO + * \sa IMG_SaveWEBP_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveTyped_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio, const char *type); + /** * Save an SDL_Surface into a AVIF image file. * @@ -1890,7 +2151,7 @@ extern SDL_DECLSPEC bool SDLCALL IMG_SaveAVIF(SDL_Surface *surface, const char * extern SDL_DECLSPEC bool SDLCALL IMG_SaveAVIF_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio, int quality); /** - * Save an SDL_Surface into a PNG image file. + * Save an SDL_Surface into a BMP image file. * * If the file already exists, it will be overwritten. * @@ -1899,16 +2160,16 @@ extern SDL_DECLSPEC bool SDLCALL IMG_SaveAVIF_IO(SDL_Surface *surface, SDL_IOStr * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \since This function is available since SDL_image 3.0.0. + * \since This function is available since SDL_image 3.4.0. * - * \sa IMG_SavePNG_IO + * \sa IMG_SaveBMP_IO */ -extern SDL_DECLSPEC bool SDLCALL IMG_SavePNG(SDL_Surface *surface, const char *file); +extern SDL_DECLSPEC bool SDLCALL IMG_SaveBMP(SDL_Surface *surface, const char *file); /** - * Save an SDL_Surface into PNG image data, via an SDL_IOStream. + * Save an SDL_Surface into BMP image data, via an SDL_IOStream. * - * If you just want to save to a filename, you can use IMG_SavePNG() instead. + * If you just want to save to a filename, you can use IMG_SaveBMP() instead. * * If `closeio` is true, `dst` will be closed before returning, whether this * function succeeds or not. @@ -1920,11 +2181,122 @@ extern SDL_DECLSPEC bool SDLCALL IMG_SavePNG(SDL_Surface *surface, const char *f * \returns true on success or false on failure; call SDL_GetError() for more * information. * - * \since This function is available since SDL_image 3.0.0. + * \since This function is available since SDL_image 3.4.0. * - * \sa IMG_SavePNG + * \sa IMG_SaveBMP */ -extern SDL_DECLSPEC bool SDLCALL IMG_SavePNG_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); +extern SDL_DECLSPEC bool SDLCALL IMG_SaveBMP_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); + +/** + * Save an SDL_Surface into a CUR image file. + * + * If the file already exists, it will be overwritten. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write new file to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveCUR_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveCUR(SDL_Surface *surface, const char *file); + +/** + * Save an SDL_Surface into CUR image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SaveCUR() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveCUR + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveCUR_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); + +/** + * Save an SDL_Surface into a GIF image file. + * + * If the file already exists, it will be overwritten. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write new file to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveGIF_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveGIF(SDL_Surface *surface, const char *file); + +/** + * Save an SDL_Surface into GIF image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SaveGIF() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveGIF + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveGIF_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); + +/** + * Save an SDL_Surface into a ICO image file. + * + * If the file already exists, it will be overwritten. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write new file to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveICO_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveICO(SDL_Surface *surface, const char *file); + +/** + * Save an SDL_Surface into ICO image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SaveICO() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveICO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveICO_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); /** * Save an SDL_Surface into a JPEG image file. @@ -1968,16 +2340,134 @@ extern SDL_DECLSPEC bool SDLCALL IMG_SaveJPG(SDL_Surface *surface, const char *f extern SDL_DECLSPEC bool SDLCALL IMG_SaveJPG_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio, int quality); /** - * Animated image support + * Save an SDL_Surface into a PNG image file. * - * Currently only animated GIFs and WEBP images are supported. + * If the file already exists, it will be overwritten. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write new file to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_SavePNG_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SavePNG(SDL_Surface *surface, const char *file); + +/** + * Save an SDL_Surface into PNG image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SavePNG() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_SavePNG + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SavePNG_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); + +/** + * Save an SDL_Surface into a TGA image file. + * + * If the file already exists, it will be overwritten. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write new file to. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveTGA_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveTGA(SDL_Surface *surface, const char *file); + +/** + * Save an SDL_Surface into TGA image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SaveTGA() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveTGA + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveTGA_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio); + +/** + * Save an SDL_Surface into a WEBP image file. + * + * If the file already exists, it will be overwritten. + * + * \param surface the SDL surface to save. + * \param file path on the filesystem to write the new file to. + * \param quality between 0 and 100. For lossy, 0 gives the smallest size and + * 100 the largest. For lossless, this parameter is the amount + * of effort put into the compression: 0 is the fastest but + * gives larger files compared to the slowest, but best, 100. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveWEBP_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveWEBP(SDL_Surface *surface, const char *file, float quality); + +/** + * Save an SDL_Surface into WEBP image data, via an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SaveWEBP() instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param surface the SDL surface to save. + * \param dst the SDL_IOStream to save the image data to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param quality between 0 and 100. For lossy, 0 gives the smallest size and + * 100 the largest. For lossless, this parameter is the amount + * of effort put into the compression: 0 is the fastest but + * gives larger files compared to the slowest, but best, 100. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveWEBP + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveWEBP_IO(SDL_Surface *surface, SDL_IOStream *dst, bool closeio, float quality); + +/** + * Animated image support */ typedef struct IMG_Animation { - int w, h; - int count; - SDL_Surface **frames; - int *delays; + int w; /**< The width of the frames */ + int h; /**< The height of the frames */ + int count; /**< The number of frames */ + SDL_Surface **frames; /**< An array of frames */ + int *delays; /**< An array of frame delays, in milliseconds */ } IMG_Animation; /** @@ -1991,6 +2481,14 @@ typedef struct IMG_Animation * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_CreateAnimatedCursor + * \sa IMG_LoadAnimation_IO + * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO * \sa IMG_FreeAnimation */ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadAnimation(const char *file); @@ -2012,12 +2510,20 @@ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadAnimation(const char *file); * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_CreateAnimatedCursor + * \sa IMG_LoadAnimation + * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO * \sa IMG_FreeAnimation */ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadAnimation_IO(SDL_IOStream *src, bool closeio); /** - * Load an animation from an SDL datasource + * Load an animation from an SDL_IOStream. * * Even though this function accepts a file type, SDL_image may still try * other decoders that are capable of detecting file type from the contents of @@ -2040,26 +2546,101 @@ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadAnimation_IO(SDL_IOStream *s * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_CreateAnimatedCursor * \sa IMG_LoadAnimation * \sa IMG_LoadAnimation_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO * \sa IMG_FreeAnimation */ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadAnimationTyped_IO(SDL_IOStream *src, bool closeio, const char *type); /** - * Dispose of an IMG_Animation and free its resources. + * Load an ANI animation directly from an SDL_IOStream. * - * The provided `anim` pointer is not valid once this call returns. + * If you know you definitely have an ANI image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally, it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. * - * \param anim IMG_Animation to dispose of. + * When done with the returned animation, the app should dispose of it with a + * call to IMG_FreeAnimation(). * - * \since This function is available since SDL_image 3.0.0. + * \param src an SDL_IOStream from which data will be read. + * \returns a new IMG_Animation, or NULL on error. * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_isANI * \sa IMG_LoadAnimation * \sa IMG_LoadAnimation_IO * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO + * \sa IMG_FreeAnimation */ -extern SDL_DECLSPEC void SDLCALL IMG_FreeAnimation(IMG_Animation *anim); +extern SDL_DECLSPEC IMG_Animation *SDLCALL IMG_LoadANIAnimation_IO(SDL_IOStream *src); + +/** + * Load an APNG animation directly from an SDL_IOStream. + * + * If you know you definitely have an APNG image, you can call this function, + * which will skip SDL_image's file format detection routines. Generally, it's + * better to use the abstract interfaces; also, there is only an SDL_IOStream + * interface available here. + * + * When done with the returned animation, the app should dispose of it with a + * call to IMG_FreeAnimation(). + * + * \param src an SDL_IOStream from which data will be read. + * \returns a new IMG_Animation, or NULL on error. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_isPNG + * \sa IMG_LoadAnimation + * \sa IMG_LoadAnimation_IO + * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO + * \sa IMG_FreeAnimation + */ +extern SDL_DECLSPEC IMG_Animation *SDLCALL IMG_LoadAPNGAnimation_IO(SDL_IOStream *src); + +/** + * Load an AVIF animation directly from an SDL_IOStream. + * + * If you know you definitely have an AVIF animation, you can call this + * function, which will skip SDL_image's file format detection routines. + * Generally it's better to use the abstract interfaces; also, there is only + * an SDL_IOStream interface available here. + * + * When done with the returned animation, the app should dispose of it with a + * call to IMG_FreeAnimation(). + * + * \param src an SDL_IOStream that data will be read from. + * \returns a new IMG_Animation, or NULL on error. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_isAVIF + * \sa IMG_LoadAnimation + * \sa IMG_LoadAnimation_IO + * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO + * \sa IMG_FreeAnimation + */ +extern SDL_DECLSPEC IMG_Animation *SDLCALL IMG_LoadAVIFAnimation_IO(SDL_IOStream *src); /** * Load a GIF animation directly. @@ -2074,9 +2655,14 @@ extern SDL_DECLSPEC void SDLCALL IMG_FreeAnimation(IMG_Animation *anim); * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isGIF * \sa IMG_LoadAnimation * \sa IMG_LoadAnimation_IO * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO * \sa IMG_FreeAnimation */ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadGIFAnimation_IO(SDL_IOStream *src); @@ -2094,13 +2680,643 @@ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadGIFAnimation_IO(SDL_IOStream * * \since This function is available since SDL_image 3.0.0. * + * \sa IMG_isWEBP * \sa IMG_LoadAnimation * \sa IMG_LoadAnimation_IO * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO * \sa IMG_FreeAnimation */ extern SDL_DECLSPEC IMG_Animation * SDLCALL IMG_LoadWEBPAnimation_IO(SDL_IOStream *src); +/** + * Save an animation to a file. + * + * For formats that accept a quality, a default quality of 90 will be used. + * + * \param anim the animation to save. + * \param file path on the filesystem containing an animated image. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimationTyped_IO + * \sa IMG_SaveANIAnimation_IO + * \sa IMG_SaveAPNGAnimation_IO + * \sa IMG_SaveAVIFAnimation_IO + * \sa IMG_SaveGIFAnimation_IO + * \sa IMG_SaveWEBPAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveAnimation(IMG_Animation *anim, const char *file); + +/** + * Save an animation to an SDL_IOStream. + * + * If you just want to save to a filename, you can use IMG_SaveAnimation() + * instead. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * For formats that accept a quality, a default quality of 90 will be used. + * + * \param anim the animation to save. + * \param dst an SDL_IOStream that data will be written to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param type a filename extension that represent this data ("GIF", etc). + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimation + * \sa IMG_SaveANIAnimation_IO + * \sa IMG_SaveAPNGAnimation_IO + * \sa IMG_SaveAVIFAnimation_IO + * \sa IMG_SaveGIFAnimation_IO + * \sa IMG_SaveWEBPAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveAnimationTyped_IO(IMG_Animation *anim, SDL_IOStream *dst, bool closeio, const char *type); + +/** + * Save an animation in ANI format to an SDL_IOStream. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param anim the animation to save. + * \param dst an SDL_IOStream from which data will be written to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimation + * \sa IMG_SaveAnimationTyped_IO + * \sa IMG_SaveAPNGAnimation_IO + * \sa IMG_SaveAVIFAnimation_IO + * \sa IMG_SaveGIFAnimation_IO + * \sa IMG_SaveWEBPAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveANIAnimation_IO(IMG_Animation *anim, SDL_IOStream *dst, bool closeio); + +/** + * Save an animation in APNG format to an SDL_IOStream. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param anim the animation to save. + * \param dst an SDL_IOStream from which data will be written to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimation + * \sa IMG_SaveAnimationTyped_IO + * \sa IMG_SaveANIAnimation_IO + * \sa IMG_SaveAVIFAnimation_IO + * \sa IMG_SaveGIFAnimation_IO + * \sa IMG_SaveWEBPAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveAPNGAnimation_IO(IMG_Animation *anim, SDL_IOStream *dst, bool closeio); + +/** + * Save an animation in AVIF format to an SDL_IOStream. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param anim the animation to save. + * \param dst an SDL_IOStream from which data will be written to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param quality the desired quality, ranging between 0 (lowest) and 100 + * (highest). + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimation + * \sa IMG_SaveAnimationTyped_IO + * \sa IMG_SaveANIAnimation_IO + * \sa IMG_SaveAPNGAnimation_IO + * \sa IMG_SaveGIFAnimation_IO + * \sa IMG_SaveWEBPAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveAVIFAnimation_IO(IMG_Animation *anim, SDL_IOStream *dst, bool closeio, int quality); + +/** + * Save an animation in GIF format to an SDL_IOStream. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param anim the animation to save. + * \param dst an SDL_IOStream from which data will be written to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimation + * \sa IMG_SaveAnimationTyped_IO + * \sa IMG_SaveANIAnimation_IO + * \sa IMG_SaveAPNGAnimation_IO + * \sa IMG_SaveAVIFAnimation_IO + * \sa IMG_SaveWEBPAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveGIFAnimation_IO(IMG_Animation *anim, SDL_IOStream *dst, bool closeio); + +/** + * Save an animation in WEBP format to an SDL_IOStream. + * + * If `closeio` is true, `dst` will be closed before returning, whether this + * function succeeds or not. + * + * \param anim the animation to save. + * \param dst an SDL_IOStream from which data will be written to. + * \param closeio true to close/free the SDL_IOStream before returning, false + * to leave it open. + * \param quality between 0 and 100. For lossy, 0 gives the smallest size and + * 100 the largest. For lossless, this parameter is the amount + * of effort put into the compression: 0 is the fastest but + * gives larger files compared to the slowest, but best, 100. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_SaveAnimation + * \sa IMG_SaveAnimationTyped_IO + * \sa IMG_SaveANIAnimation_IO + * \sa IMG_SaveAPNGAnimation_IO + * \sa IMG_SaveAVIFAnimation_IO + * \sa IMG_SaveGIFAnimation_IO + */ +extern SDL_DECLSPEC bool SDLCALL IMG_SaveWEBPAnimation_IO(IMG_Animation *anim, SDL_IOStream *dst, bool closeio, int quality); + +/** + * Create an animated cursor from an animation. + * + * \param anim an animation to use to create an animated cursor. + * \param hot_x the x position of the cursor hot spot. + * \param hot_y the y position of the cursor hot spot. + * \returns the new cursor on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_LoadAnimation + * \sa IMG_LoadAnimation_IO + * \sa IMG_LoadAnimationTyped_IO + */ +extern SDL_DECLSPEC SDL_Cursor * SDLCALL IMG_CreateAnimatedCursor(IMG_Animation *anim, int hot_x, int hot_y); + +/** + * Dispose of an IMG_Animation and free its resources. + * + * The provided `anim` pointer is not valid once this call returns. + * + * \param anim IMG_Animation to dispose of. + * + * \since This function is available since SDL_image 3.0.0. + * + * \sa IMG_LoadAnimation + * \sa IMG_LoadAnimation_IO + * \sa IMG_LoadAnimationTyped_IO + * \sa IMG_LoadANIAnimation_IO + * \sa IMG_LoadAPNGAnimation_IO + * \sa IMG_LoadAVIFAnimation_IO + * \sa IMG_LoadGIFAnimation_IO + * \sa IMG_LoadWEBPAnimation_IO + */ +extern SDL_DECLSPEC void SDLCALL IMG_FreeAnimation(IMG_Animation *anim); + +/** + * An object representing the encoder context. + */ +typedef struct IMG_AnimationEncoder IMG_AnimationEncoder; + +/** + * Create an encoder to save a series of images to a file. + * + * These animation types are currently supported: + * + * - ANI + * - APNG + * - AVIFS + * - GIF + * - WEBP + * + * The file type is determined from the file extension, e.g. "file.webp" will + * be encoded using WEBP. + * + * \param file the file where the animation will be saved. + * \returns a new IMG_AnimationEncoder, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationEncoder_IO + * \sa IMG_CreateAnimationEncoderWithProperties + * \sa IMG_AddAnimationEncoderFrame + * \sa IMG_CloseAnimationEncoder + */ +extern SDL_DECLSPEC IMG_AnimationEncoder * SDLCALL IMG_CreateAnimationEncoder(const char *file); + +/** + * Create an encoder to save a series of images to an IOStream. + * + * These animation types are currently supported: + * + * - ANI + * - APNG + * - AVIFS + * - GIF + * - WEBP + * + * If `closeio` is true, `dst` will be closed before returning if this + * function fails, or when the animation encoder is closed if this function + * succeeds. + * + * \param dst an SDL_IOStream that will be used to save the stream. + * \param closeio true to close the SDL_IOStream when done, false to leave it + * open. + * \param type a filename extension that represent this data ("WEBP", etc). + * \returns a new IMG_AnimationEncoder, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationEncoder + * \sa IMG_CreateAnimationEncoderWithProperties + * \sa IMG_AddAnimationEncoderFrame + * \sa IMG_CloseAnimationEncoder + */ +extern SDL_DECLSPEC IMG_AnimationEncoder * SDLCALL IMG_CreateAnimationEncoder_IO(SDL_IOStream *dst, bool closeio, const char *type); + +/** + * Create an animation encoder with the specified properties. + * + * These animation types are currently supported: + * + * - ANI + * - APNG + * - AVIFS + * - GIF + * - WEBP + * + * These are the supported properties: + * + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_FILENAME_STRING`: the file to save, if + * an SDL_IOStream isn't being used. This is required if + * `IMG_PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_POINTER` isn't set. + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_POINTER`: an SDL_IOStream + * that will be used to save the stream. This should not be closed until the + * animation encoder is closed. This is required if + * `IMG_PROP_ANIMATION_ENCODER_CREATE_FILENAME_STRING` isn't set. + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN`: true if + * closing the animation encoder should also close the associated + * SDL_IOStream. + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_TYPE_STRING`: the output file type, + * e.g. "webp", defaults to the file extension if + * `IMG_PROP_ANIMATION_ENCODER_CREATE_FILENAME_STRING` is set. + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_QUALITY_NUMBER`: the compression + * quality, in the range of 0 to 100. The higher the number, the higher the + * quality and file size. This defaults to a balanced value for compression + * and quality. + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_NUMERATOR_NUMBER`: the + * numerator of the fraction used to multiply the pts to convert it to + * seconds. This defaults to 1. + * - `IMG_PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER`: the + * denominator of the fraction used to multiply the pts to convert it to + * seconds. This defaults to 1000. + * + * \param props the properties of the animation encoder. + * \returns a new IMG_AnimationEncoder, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationEncoder + * \sa IMG_CreateAnimationEncoder_IO + * \sa IMG_AddAnimationEncoderFrame + * \sa IMG_CloseAnimationEncoder + */ +extern SDL_DECLSPEC IMG_AnimationEncoder * SDLCALL IMG_CreateAnimationEncoderWithProperties(SDL_PropertiesID props); + +#define IMG_PROP_ANIMATION_ENCODER_CREATE_FILENAME_STRING "SDL_image.animation_encoder.create.filename" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_POINTER "SDL_image.animation_encoder.create.iostream" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN "SDL_image.animation_encoder.create.iostream.autoclose" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_TYPE_STRING "SDL_image.animation_encoder.create.type" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_QUALITY_NUMBER "SDL_image.animation_encoder.create.quality" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_NUMERATOR_NUMBER "SDL_image.animation_encoder.create.timebase.numerator" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER "SDL_image.animation_encoder.create.timebase.denominator" + +#define IMG_PROP_ANIMATION_ENCODER_CREATE_AVIF_MAX_THREADS_NUMBER "SDL_image.animation_encoder.create.avif.max_threads" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_AVIF_KEYFRAME_INTERVAL_NUMBER "SDL_image.animation_encoder.create.avif.keyframe_interval" +#define IMG_PROP_ANIMATION_ENCODER_CREATE_GIF_USE_LUT_BOOLEAN "SDL_image.animation_encoder.create.gif.use_lut" + +/** + * Add a frame to an animation encoder. + * + * \param encoder the receiving images. + * \param surface the surface to add as the next frame in the animation. + * \param duration the duration of the frame, usually in milliseconds but can + * be other units if the + * `IMG_PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER` + * property is set when creating the encoder. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationEncoder + * \sa IMG_CreateAnimationEncoder_IO + * \sa IMG_CreateAnimationEncoderWithProperties + * \sa IMG_CloseAnimationEncoder + */ +extern SDL_DECLSPEC bool SDLCALL IMG_AddAnimationEncoderFrame(IMG_AnimationEncoder *encoder, SDL_Surface *surface, Uint64 duration); + +/** + * Close an animation encoder, finishing any encoding. + * + * Calling this function frees the animation encoder, and returns the final + * status of the encoding process. + * + * \param encoder the encoder to close. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationEncoder + * \sa IMG_CreateAnimationEncoder_IO + * \sa IMG_CreateAnimationEncoderWithProperties + */ +extern SDL_DECLSPEC bool SDLCALL IMG_CloseAnimationEncoder(IMG_AnimationEncoder *encoder); + +/** + * An enum representing the status of an animation decoder. + * + * \since This enum is available since SDL_image 3.4.0. + */ +typedef enum IMG_AnimationDecoderStatus +{ + IMG_DECODER_STATUS_INVALID = -1, /**< The decoder is invalid */ + IMG_DECODER_STATUS_OK, /**< The decoder is ready to decode the next frame */ + IMG_DECODER_STATUS_FAILED, /**< The decoder failed to decode a frame, call SDL_GetError() for more information. */ + IMG_DECODER_STATUS_COMPLETE /**< No more frames available */ +} IMG_AnimationDecoderStatus; + +/** + * An object representing animation decoder. + */ +typedef struct IMG_AnimationDecoder IMG_AnimationDecoder; + +/** + * Create a decoder to read a series of images from a file. + * + * These animation types are currently supported: + * + * - ANI + * - APNG + * - AVIFS + * - GIF + * - WEBP + * + * The file type is determined from the file extension, e.g. "file.webp" will + * be decoded using WEBP. + * + * \param file the file containing a series of images. + * \returns a new IMG_AnimationDecoder, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder_IO + * \sa IMG_CreateAnimationDecoderWithProperties + * \sa IMG_GetAnimationDecoderFrame + * \sa IMG_ResetAnimationDecoder + * \sa IMG_CloseAnimationDecoder + */ +extern SDL_DECLSPEC IMG_AnimationDecoder * SDLCALL IMG_CreateAnimationDecoder(const char *file); + +/** + * Create a decoder to read a series of images from an IOStream. + * + * These animation types are currently supported: + * + * - ANI + * - APNG + * - AVIFS + * - GIF + * - WEBP + * + * If `closeio` is true, `src` will be closed before returning if this + * function fails, or when the animation decoder is closed if this function + * succeeds. + * + * \param src an SDL_IOStream containing a series of images. + * \param closeio true to close the SDL_IOStream when done, false to leave it + * open. + * \param type a filename extension that represent this data ("WEBP", etc). + * \returns a new IMG_AnimationDecoder, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder + * \sa IMG_CreateAnimationDecoderWithProperties + * \sa IMG_GetAnimationDecoderFrame + * \sa IMG_ResetAnimationDecoder + * \sa IMG_CloseAnimationDecoder + */ +extern SDL_DECLSPEC IMG_AnimationDecoder * SDLCALL IMG_CreateAnimationDecoder_IO(SDL_IOStream *src, bool closeio, const char *type); + +/** + * Create an animation decoder with the specified properties. + * + * These animation types are currently supported: + * + * - ANI + * - APNG + * - AVIFS + * - GIF + * - WEBP + * + * These are the supported properties: + * + * - `IMG_PROP_ANIMATION_DECODER_CREATE_FILENAME_STRING`: the file to load, if + * an SDL_IOStream isn't being used. This is required if + * `IMG_PROP_ANIMATION_DECODER_CREATE_IOSTREAM_POINTER` isn't set. + * - `IMG_PROP_ANIMATION_DECODER_CREATE_IOSTREAM_POINTER`: an SDL_IOStream + * containing a series of images. This should not be closed until the + * animation decoder is closed. This is required if + * `IMG_PROP_ANIMATION_DECODER_CREATE_FILENAME_STRING` isn't set. + * - `IMG_PROP_ANIMATION_DECODER_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN`: true if + * closing the animation decoder should also close the associated + * SDL_IOStream. + * - `IMG_PROP_ANIMATION_DECODER_CREATE_TYPE_STRING`: the input file type, + * e.g. "webp", defaults to the file extension if + * `IMG_PROP_ANIMATION_DECODER_CREATE_FILENAME_STRING` is set. + * + * \param props the properties of the animation decoder. + * \returns a new IMG_AnimationDecoder, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder + * \sa IMG_CreateAnimationDecoder_IO + * \sa IMG_GetAnimationDecoderFrame + * \sa IMG_ResetAnimationDecoder + * \sa IMG_CloseAnimationDecoder + */ +extern SDL_DECLSPEC IMG_AnimationDecoder * SDLCALL IMG_CreateAnimationDecoderWithProperties(SDL_PropertiesID props); + +#define IMG_PROP_ANIMATION_DECODER_CREATE_FILENAME_STRING "SDL_image.animation_decoder.create.filename" +#define IMG_PROP_ANIMATION_DECODER_CREATE_IOSTREAM_POINTER "SDL_image.animation_decoder.create.iostream" +#define IMG_PROP_ANIMATION_DECODER_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN "SDL_image.animation_decoder.create.iostream.autoclose" +#define IMG_PROP_ANIMATION_DECODER_CREATE_TYPE_STRING "SDL_image.animation_decoder.create.type" +#define IMG_PROP_ANIMATION_DECODER_CREATE_TIMEBASE_NUMERATOR_NUMBER "SDL_image.animation_decoder.create.timebase.numerator" +#define IMG_PROP_ANIMATION_DECODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER "SDL_image.animation_decoder.create.timebase.denominator" + +#define IMG_PROP_ANIMATION_DECODER_CREATE_AVIF_MAX_THREADS_NUMBER "SDL_image.animation_decoder.create.avif.max_threads" +#define IMG_PROP_ANIMATION_DECODER_CREATE_AVIF_ALLOW_INCREMENTAL_BOOLEAN "SDL_image.animation_decoder.create.avif.allow_incremental" +#define IMG_PROP_ANIMATION_DECODER_CREATE_AVIF_ALLOW_PROGRESSIVE_BOOLEAN "SDL_image.animation_decoder.create.avif.allow_progressive" +#define IMG_PROP_ANIMATION_DECODER_CREATE_GIF_TRANSPARENT_COLOR_INDEX_NUMBER "SDL_image.animation_encoder.create.gif.transparent_color_index" +#define IMG_PROP_ANIMATION_DECODER_CREATE_GIF_NUM_COLORS_NUMBER "SDL_image.animation_encoder.create.gif.num_colors" + +/** + * Get the properties of an animation decoder. + * + * This function returns the properties of the animation decoder, which holds + * information about the underlying image such as description, copyright text + * and loop count. + * + * \param decoder the animation decoder. + * \returns the properties ID of the animation decoder, or 0 if there are no + * properties; call SDL_GetError() for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder + * \sa IMG_CreateAnimationDecoder_IO + * \sa IMG_CreateAnimationDecoderWithProperties + */ +extern SDL_DECLSPEC SDL_PropertiesID SDLCALL IMG_GetAnimationDecoderProperties(IMG_AnimationDecoder* decoder); + +#define IMG_PROP_METADATA_IGNORE_PROPS_BOOLEAN "SDL_image.metadata.ignore_props" +#define IMG_PROP_METADATA_DESCRIPTION_STRING "SDL_image.metadata.description" +#define IMG_PROP_METADATA_COPYRIGHT_STRING "SDL_image.metadata.copyright" +#define IMG_PROP_METADATA_TITLE_STRING "SDL_image.metadata.title" +#define IMG_PROP_METADATA_AUTHOR_STRING "SDL_image.metadata.author" +#define IMG_PROP_METADATA_CREATION_TIME_STRING "SDL_image.metadata.creation_time" +#define IMG_PROP_METADATA_FRAME_COUNT_NUMBER "SDL_image.metadata.frame_count" +#define IMG_PROP_METADATA_LOOP_COUNT_NUMBER "SDL_image.metadata.loop_count" + +/** + * Get the next frame in an animation decoder. + * + * This function decodes the next frame in the animation decoder, returning it + * as an SDL_Surface. The returned surface should be freed with + * SDL_FreeSurface() when no longer needed. + * + * If the animation decoder has no more frames or an error occurred while + * decoding the frame, this function returns false. In that case, please call + * SDL_GetError() for more information. If SDL_GetError() returns an empty + * string, that means there are no more available frames. If SDL_GetError() + * returns a valid string, that means the decoding failed. + * + * \param decoder the animation decoder. + * \param frame a pointer filled in with the SDL_Surface for the next frame in + * the animation. + * \param duration the duration of the frame, usually in milliseconds but can + * be other units if the + * `IMG_PROP_ANIMATION_DECODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER` + * property is set when creating the decoder. + * \returns true on success or false on failure and when no more frames are + * available; call IMG_GetAnimationDecoderStatus() or SDL_GetError() + * for more information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder + * \sa IMG_CreateAnimationDecoder_IO + * \sa IMG_CreateAnimationDecoderWithProperties + * \sa IMG_GetAnimationDecoderStatus + * \sa IMG_ResetAnimationDecoder + * \sa IMG_CloseAnimationDecoder + */ +extern SDL_DECLSPEC bool SDLCALL IMG_GetAnimationDecoderFrame(IMG_AnimationDecoder *decoder, SDL_Surface **frame, Uint64 *duration); + +/** + * Get the decoder status indicating the current state of the decoder. + * + * \param decoder the decoder to get the status of. + * \returns the status of the underlying decoder, or + * IMG_DECODER_STATUS_INVALID if the given decoder is invalid. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_GetAnimationDecoderFrame + */ +extern SDL_DECLSPEC IMG_AnimationDecoderStatus SDLCALL IMG_GetAnimationDecoderStatus(IMG_AnimationDecoder *decoder); + +/** + * Reset an animation decoder. + * + * Calling this function resets the animation decoder, allowing it to start + * from the beginning again. This is useful if you want to decode the frame + * sequence again without creating a new decoder. + * + * \param decoder the decoder to reset. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder + * \sa IMG_CreateAnimationDecoder_IO + * \sa IMG_CreateAnimationDecoderWithProperties + * \sa IMG_GetAnimationDecoderFrame + * \sa IMG_CloseAnimationDecoder + */ +extern SDL_DECLSPEC bool SDLCALL IMG_ResetAnimationDecoder(IMG_AnimationDecoder *decoder); + +/** + * Close an animation decoder, finishing any decoding. + * + * Calling this function frees the animation decoder, and returns the final + * status of the decoding process. + * + * \param decoder the decoder to close. + * \returns true on success or false on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL_image 3.4.0. + * + * \sa IMG_CreateAnimationDecoder + * \sa IMG_CreateAnimationDecoder_IO + * \sa IMG_CreateAnimationDecoderWithProperties + */ +extern SDL_DECLSPEC bool SDLCALL IMG_CloseAnimationDecoder(IMG_AnimationDecoder *decoder); + /* Ends C function definitions when using C++ */ #ifdef __cplusplus } diff --git a/vendor/sdl3/image/sdl_image.odin b/vendor/sdl3/image/sdl_image.odin index 098d21de7..820a7c4da 100644 --- a/vendor/sdl3/image/sdl_image.odin +++ b/vendor/sdl3/image/sdl_image.odin @@ -11,8 +11,8 @@ when ODIN_OS == .Windows { } MAJOR_VERSION :: 3 -MINOR_VERSION :: 2 -PATCHLEVEL :: 4 +MINOR_VERSION :: 4 +PATCHLEVEL :: 0 Animation :: struct { w, h: c.int, @@ -21,6 +21,51 @@ Animation :: struct { delays: [^]c.int, } +AnimationEncoder :: struct {} + +PROP_ANIMATION_ENCODER_CREATE_FILENAME_STRING :: "SDL_image.animation_encoder.create.filename" +PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_POINTER :: "SDL_image.animation_encoder.create.iostream" +PROP_ANIMATION_ENCODER_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN :: "SDL_image.animation_encoder.create.iostream.autoclose" +PROP_ANIMATION_ENCODER_CREATE_TYPE_STRING :: "SDL_image.animation_encoder.create.type" +PROP_ANIMATION_ENCODER_CREATE_QUALITY_NUMBER :: "SDL_image.animation_encoder.create.quality" +PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_NUMERATOR_NUMBER :: "SDL_image.animation_encoder.create.timebase.numerator" +PROP_ANIMATION_ENCODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER :: "SDL_image.animation_encoder.create.timebase.denominator" + +PROP_ANIMATION_ENCODER_CREATE_AVIF_MAX_THREADS_NUMBER :: "SDL_image.animation_encoder.create.avif.max_threads" +PROP_ANIMATION_ENCODER_CREATE_AVIF_KEYFRAME_INTERVAL_NUMBER :: "SDL_image.animation_encoder.create.avif.keyframe_interval" +PROP_ANIMATION_ENCODER_CREATE_GIF_USE_LUT_BOOLEAN :: "SDL_image.animation_encoder.create.gif.use_lut" + +AnimationDecoderStatus :: enum c.int { + INVALID = -1, + OK, + FAILED, + COMPLETE, +} + +AnimationDecoder :: struct {} + +PROP_ANIMATION_DECODER_CREATE_FILENAME_STRING :: "SDL_image.animation_decoder.create.filename" +PROP_ANIMATION_DECODER_CREATE_IOSTREAM_POINTER :: "SDL_image.animation_decoder.create.iostream" +PROP_ANIMATION_DECODER_CREATE_IOSTREAM_AUTOCLOSE_BOOLEAN :: "SDL_image.animation_decoder.create.iostream.autoclose" +PROP_ANIMATION_DECODER_CREATE_TYPE_STRING :: "SDL_image.animation_decoder.create.type" +PROP_ANIMATION_DECODER_CREATE_TIMEBASE_NUMERATOR_NUMBER :: "SDL_image.animation_decoder.create.timebase.numerator" +PROP_ANIMATION_DECODER_CREATE_TIMEBASE_DENOMINATOR_NUMBER :: "SDL_image.animation_decoder.create.timebase.denominator" + +PROP_ANIMATION_DECODER_CREATE_AVIF_MAX_THREADS_NUMBER :: "SDL_image.animation_decoder.create.avif.max_threads" +PROP_ANIMATION_DECODER_CREATE_AVIF_ALLOW_INCREMENTAL_BOOLEAN :: "SDL_image.animation_decoder.create.avif.allow_incremental" +PROP_ANIMATION_DECODER_CREATE_AVIF_ALLOW_PROGRESSIVE_BOOLEAN :: "SDL_image.animation_decoder.create.avif.allow_progressive" +PROP_ANIMATION_DECODER_CREATE_GIF_TRANSPARENT_COLOR_INDEX_NUMBER :: "SDL_image.animation_encoder.create.gif.transparent_color_index" +PROP_ANIMATION_DECODER_CREATE_GIF_NUM_COLORS_NUMBER :: "SDL_image.animation_encoder.create.gif.num_colors" + +PROP_METADATA_IGNORE_PROPS_BOOLEAN :: "SDL_image.metadata.ignore_props" +PROP_METADATA_DESCRIPTION_STRING :: "SDL_image.metadata.description" +PROP_METADATA_COPYRIGHT_STRING :: "SDL_image.metadata.copyright" +PROP_METADATA_TITLE_STRING :: "SDL_image.metadata.title" +PROP_METADATA_AUTHOR_STRING :: "SDL_image.metadata.author" +PROP_METADATA_CREATION_TIME_STRING :: "SDL_image.metadata.creation_time" +PROP_METADATA_FRAME_COUNT_NUMBER :: "SDL_image.metadata.frame_count" +PROP_METADATA_LOOP_COUNT_NUMBER :: "SDL_image.metadata.loop_count" + @(default_calling_convention="c", link_prefix="IMG_") foreign lib { Version :: proc() -> c.int --- @@ -43,7 +88,16 @@ foreign lib { LoadTexture_IO :: proc(renderer: ^SDL.Renderer, src: ^SDL.IOStream, closeio: bool) -> ^SDL.Texture --- LoadTextureTyped_IO :: proc(renderer: ^SDL.Renderer, src: ^SDL.IOStream, closeio: bool, type: cstring) -> ^SDL.Texture --- + /* Load an image directly into a GPU texture. */ + LoadGPUTexture :: proc(device: ^SDL.GPUDevice, copy_pass: ^SDL.GPUCopyPass, file: cstring, width: ^c.int, height: ^c.int) -> ^SDL.GPUTexture --- + LoadGPUTexture_IO :: proc(device: ^SDL.GPUDevice, copy_pass: ^SDL.GPUCopyPass, src: ^SDL.IOStream, closeio: bool, width: ^c.int, height: ^c.int) -> ^SDL.GPUTexture --- + LoadGPUTextureTyped_IO :: proc(device: ^SDL.GPUDevice, copy_pass: ^SDL.GPUCopyPass, src: ^SDL.IOStream, closeio: bool, type: cstring, width: ^c.int, height: ^c.int) -> ^SDL.GPUTexture --- + + /* Get the image currently in the clipboard. */ + GetClipboardImage :: proc() -> ^SDL.Surface --- + /* Functions to detect a file type, given a seekable source */ + isANI :: proc(src: ^SDL.IOStream) -> bool --- isAVIF :: proc(src: ^SDL.IOStream) -> bool --- isICO :: proc(src: ^SDL.IOStream) -> bool --- isCUR :: proc(src: ^SDL.IOStream) -> bool --- @@ -90,19 +144,63 @@ foreign lib { ReadXPMFromArrayToRGB888 :: proc(xpm: [^]cstring) -> ^SDL.Surface --- /* Individual saving functions */ - SaveAVIF :: proc(surface: ^SDL.Surface, file: cstring, quality: c.int) -> c.bool --- - SaveAVIF_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool, quality: c.int) -> c.bool --- - SavePNG :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- - SavePNG_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- - SaveJPG :: proc(surface: ^SDL.Surface, file: cstring, quality: c.int) -> c.bool --- - SaveJPG_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool, quality: c.int) -> c.bool --- + Save :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SaveTyped_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool, type: cstring) -> c.bool --- + SaveAVIF :: proc(surface: ^SDL.Surface, file: cstring, quality: c.int) -> c.bool --- + SaveAVIF_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool, quality: c.int) -> c.bool --- + SaveBMP :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SaveBMP_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveCUR :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SaveCUR_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveGIF :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SaveGIF_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveICO :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SaveICO_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveJPG :: proc(surface: ^SDL.Surface, file: cstring, quality: c.int) -> c.bool --- + SaveJPG_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool, quality: c.int) -> c.bool --- + SavePNG :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SavePNG_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveTGA :: proc(surface: ^SDL.Surface, file: cstring) -> c.bool --- + SaveTGA_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveWEBP :: proc(surface: ^SDL.Surface, file: cstring, quality: f32) -> c.bool --- + SaveWEBP_IO :: proc(surface: ^SDL.Surface, dst: ^SDL.IOStream, closeio: bool, quality: f32) -> c.bool --- LoadAnimation :: proc(file: cstring) -> ^Animation --- LoadAnimation_IO :: proc(src: ^SDL.IOStream, closeio: bool) -> ^Animation --- LoadAnimationTyped_IO :: proc(src: ^SDL.IOStream, closeio: bool, type: cstring) -> ^Animation --- + SaveAnimation :: proc(anim: ^Animation, file: cstring) -> c.bool --- + SaveAnimationTyped_IO :: proc(anim: ^Animation, dst: ^SDL.IOStream, closeio: bool, type: cstring) -> c.bool --- + CreateAnimatedCursor :: proc(anim: ^Animation, hot_x: c.int, hot_y: c.int) -> ^SDL.Cursor --- FreeAnimation :: proc(anim: ^Animation) --- + /* Animation encoder functions */ + CreateAnimationEncoder :: proc(file: cstring) -> ^AnimationEncoder --- + CreateAnimationEncoder_IO :: proc(dst: ^SDL.IOStream, closeio: bool, type: cstring) -> ^AnimationEncoder --- + CreateAnimationEncoderWithProperties :: proc(props: SDL.PropertiesID) -> ^AnimationEncoder --- + AddAnimationEncoderFrame :: proc(encoder: ^AnimationEncoder, surface: ^SDL.Surface, duration: u64) -> c.bool --- + CloseAnimationEncoder :: proc(encoder: ^AnimationEncoder) -> c.bool --- + + /* Animation decoder functions */ + CreateAnimationDecoder :: proc(file: cstring) -> ^AnimationDecoder --- + CreateAnimationDecoder_IO :: proc(src: ^SDL.IOStream, closeio: bool, type: cstring) -> ^AnimationDecoder --- + CreateAnimationDecoderWithProperties :: proc(props: SDL.PropertiesID) -> ^AnimationDecoder --- + GetAnimationDecoderProperties :: proc(decoder: ^AnimationDecoder) -> SDL.PropertiesID --- + GetAnimationDecoderFrame :: proc(decoder: ^AnimationDecoder, frame: ^^SDL.Surface, duration: ^u64) -> c.bool --- + GetAnimationDecoderStatus :: proc(decoder: ^AnimationDecoder) -> AnimationDecoderStatus --- + ResetAnimationDecoder :: proc(decoder: ^AnimationDecoder) -> c.bool --- + CloseAnimationDecoder :: proc(decoder: ^AnimationDecoder) -> c.bool --- + /* Individual loading functions */ + LoadANIAnimation_IO :: proc(src: ^SDL.IOStream) -> ^Animation --- + LoadAPNGAnimation_IO :: proc(src: ^SDL.IOStream) -> ^Animation --- + LoadAVIFAnimation_IO :: proc(src: ^SDL.IOStream) -> ^Animation --- LoadGIFAnimation_IO :: proc(src: ^SDL.IOStream) -> ^Animation --- LoadWEBPAnimation_IO :: proc(src: ^SDL.IOStream) -> ^Animation --- + + /* Individual saving functions */ + SaveANIAnimation_IO :: proc(anim: ^Animation, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveAPNGAnimation_IO :: proc(anim: ^Animation, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveAVIFAnimation_IO :: proc(anim: ^Animation, dst: ^SDL.IOStream, closeio: bool, quality: c.int) -> c.bool --- + SaveGIFAnimation_IO :: proc(anim: ^Animation, dst: ^SDL.IOStream, closeio: bool) -> c.bool --- + SaveWEBPAnimation_IO :: proc(anim: ^Animation, dst: ^SDL.IOStream, closeio: bool, quality: c.int) -> c.bool --- } From 8a9d15ba3574b2f7a0b277e574b1fa0c5042e66f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 25 Jan 2026 12:28:23 +0000 Subject: [PATCH 168/212] Fix link to examples in nbio --- core/nbio/doc.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/nbio/doc.odin b/core/nbio/doc.odin index c43196923..15a21bbee 100644 --- a/core/nbio/doc.odin +++ b/core/nbio/doc.odin @@ -3,7 +3,7 @@ package nbio implements a non-blocking I/O and event loop abstraction layer over several platform-specific asynchronous I/O APIs. More examples can be found in Odin's examples repository -at [[ examples/nbio ; https://github.com/odin-lang/examples/nbio ]]. +at [[ examples/nbio ; https://github.com/odin-lang/examples/tree/master/nbio ]]. **Event Loop**: From 628b4b03be69379f687011c9374d3a32f5205bf1 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 25 Jan 2026 12:32:26 +0000 Subject: [PATCH 169/212] Add section on "Why callbacks?" --- core/nbio/doc.odin | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/core/nbio/doc.odin b/core/nbio/doc.odin index 15a21bbee..706d9d42f 100644 --- a/core/nbio/doc.odin +++ b/core/nbio/doc.odin @@ -143,13 +143,13 @@ associated with an event loop or configured for non-blocking/asynchronous operation. On some platforms (notably Windows), this requires a specific flag at open -time (`.Non_Blocking` for `core:os`) and association may fail if the handle was not created -correctly. +time (`.Non_Blocking` for `core:os`) and association may fail if the handle was +not created correctly. For this reason, prefer `open` and `create_socket` from this package instead. -`associate_handle`, `associate_file`, and `associate_socket` can be used for externally opened -files/sockets. +`associate_handle`, `associate_file`, and `associate_socket` can be used for +externally opened files/sockets. **Offsets and positional I/O**: @@ -172,7 +172,8 @@ operation. Instead, the callback receives the context that was active when the event loop function (`tick`, `run`, etc.) was called. -This is because otherwise the context would have to be copied and held onto for each operation. +This is because otherwise the context would have to be copied and held onto for +each operation. If the submitting context is required inside the callback, it must be copied into the operation’s user data explicitly. @@ -187,9 +188,26 @@ Example: **Callback scheduling guarantees**: Callbacks are guaranteed to be invoked in a later tick, never synchronously. -This means that the operation returned from a procedure is at least valid till the end of the -current tick, because an operation is freed after it's callback is called. -Thus you can set user data after an execution is queued, or call `remove`, removing subtle "race" -conditions and simplifying control flow. +This means that the operation returned from a procedure is at least valid till +the end of the current tick, because an operation is freed after it's callback +is called. Thus you can set user data after an execution is queued, or call +`remove`, removing subtle "race" conditions and simplifying control flow. + +**Why does the design of this package use callbacks?** + +Callbacks are the simplest interface an event loop can reasonably expose: "Run +this when the operation completes". This means the loop itself doesn’t need to +know how the result is consumed (You could give control of the entire loop to +the user, but that comes with all the problems in that). + +Other mechanisms can be built on top of this, such as coroutines or even a queue +you comsume at your own time. + +The choice of one `Operation` type and one callback type for all the operations +is partly so it is easy to bind into Lua-like or native coroutines. + +Callbacks also allow multiple independent users to share the same event loop. +A package can register its own operations, and application code can register +others, without either seeing or handling the other’s completions. */ package nbio From 56445dff970d4fb2a8b4652f204d9930296937e5 Mon Sep 17 00:00:00 2001 From: Isabella Basso Date: Sun, 25 Jan 2026 21:33:05 -0300 Subject: [PATCH 170/212] encoding/xml: pass allocator on destroy --- core/encoding/xml/xml_reader.odin | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/encoding/xml/xml_reader.odin b/core/encoding/xml/xml_reader.odin index 5e056177e..8f8fffe14 100644 --- a/core/encoding/xml/xml_reader.odin +++ b/core/encoding/xml/xml_reader.odin @@ -386,7 +386,8 @@ load_from_file :: proc(filename: string, options := DEFAULT_OPTIONS, error_handl return parse_bytes(data, options, filename, error_handler, allocator) } -destroy :: proc(doc: ^Document) { +destroy :: proc(doc: ^Document, allocator := context.allocator) { + context.allocator = allocator if doc == nil { return } for el in doc.elements { From 249e6c104e5b6d169e15e7167cf6c654105a6688 Mon Sep 17 00:00:00 2001 From: Jeroen van Rijn Date: Mon, 26 Jan 2026 08:58:06 +0100 Subject: [PATCH 171/212] Update the rest of the libs as needed --- vendor/sdl3/image/LICENSE.libpng.txt | 134 +++++++++++++++++++++++++++ vendor/sdl3/image/image.sha256 | 5 + vendor/sdl3/image/libavif-16.dll | Bin 13907968 -> 13907968 bytes vendor/sdl3/image/libpng16-16.dll | Bin 0 -> 247296 bytes vendor/sdl3/image/libtiff-6.dll | Bin 403456 -> 425984 bytes vendor/sdl3/image/libwebpmux-3.dll | Bin 0 -> 44544 bytes 6 files changed, 139 insertions(+) create mode 100644 vendor/sdl3/image/LICENSE.libpng.txt create mode 100644 vendor/sdl3/image/image.sha256 create mode 100644 vendor/sdl3/image/libpng16-16.dll create mode 100644 vendor/sdl3/image/libwebpmux-3.dll diff --git a/vendor/sdl3/image/LICENSE.libpng.txt b/vendor/sdl3/image/LICENSE.libpng.txt new file mode 100644 index 000000000..ea6df986c --- /dev/null +++ b/vendor/sdl3/image/LICENSE.libpng.txt @@ -0,0 +1,134 @@ +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE +========================================= + +PNG Reference Library License version 2 +--------------------------------------- + + * Copyright (c) 1995-2025 The PNG Reference Library Authors. + * Copyright (c) 2018-2025 Cosmin Truta. + * Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson. + * Copyright (c) 1996-1997 Andreas Dilger. + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +The software is supplied "as is", without warranty of any kind, +express or implied, including, without limitation, the warranties +of merchantability, fitness for a particular purpose, title, and +non-infringement. In no event shall the Copyright owners, or +anyone distributing the software, be liable for any damages or +other liability, whether in contract, tort or otherwise, arising +from, out of, or in connection with the software, or the use or +other dealings in the software, even if advised of the possibility +of such damage. + +Permission is hereby granted to use, copy, modify, and distribute +this software, or portions hereof, for any purpose, without fee, +subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you + must not claim that you wrote the original software. If you + use this software in a product, an acknowledgment in the product + documentation would be appreciated, but is not required. + + 2. Altered source versions must be plainly marked as such, and must + not be misrepresented as being the original software. + + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + + +PNG Reference Library License version 1 (for libpng 0.5 through 1.6.35) +----------------------------------------------------------------------- + +libpng versions 1.0.7, July 1, 2000, through 1.6.35, July 15, 2018 are +Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson, are +derived from libpng-1.0.6, and are distributed according to the same +disclaimer and license as libpng-1.0.6 with the following individuals +added to the list of Contributing Authors: + + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + Mandar Sahastrabuddhe + Google Inc. + Vadim Barkov + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of + the library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is + with the user. + +Some files in the "contrib" directory and some configure-generated +files that are distributed with libpng have other copyright owners, and +are released under other open source licenses. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from +libpng-0.96, and are distributed according to the same disclaimer and +license as libpng-0.96, with the following individuals added to the +list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, +and are distributed according to the same disclaimer and license as +libpng-0.88, with the following individuals added to the list of +Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +Some files in the "scripts" directory have other copyright owners, +but are released under this license. + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing +Authors and Group 42, Inc. disclaim all warranties, expressed or +implied, including, without limitation, the warranties of +merchantability and of fitness for any purpose. The Contributing +Authors and Group 42, Inc. assume no liability for direct, indirect, +incidental, special, exemplary, or consequential damages, which may +result from the use of the PNG Reference Library, even if advised of +the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + + 1. The origin of this source code must not be misrepresented. + + 2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + + 3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, +without fee, and encourage the use of this source code as a component +to supporting the PNG file format in commercial products. If you use +this source code in a product, acknowledgment is not required but would +be appreciated. diff --git a/vendor/sdl3/image/image.sha256 b/vendor/sdl3/image/image.sha256 new file mode 100644 index 000000000..90116b556 --- /dev/null +++ b/vendor/sdl3/image/image.sha256 @@ -0,0 +1,5 @@ +37d53aed3e127eec41a2fc28be62dae3660097f56e74a5fbaf52514da3b64646 *libavif-16.dll +a6dbc633ae480cf0ce84aedc3ef67f82c3a0015601844482696211458cbb13bd *libtiff-6.dll +bc5ae0287c030902cc3132e9fc7c4611e358e0462513800f76aee0f907039455 *libwebp-7.dll +4daf903fd124351c2cdf5aea3cb803162a5c813736532e0285b924e1d3964a8c *libwebpdemux-2.dll +2ed872741d4faf261912dbbf96cc1c3f1f7d6fc4ec19ebb3230b9b50dd3f4510 *SDL3_image.dll diff --git a/vendor/sdl3/image/libavif-16.dll b/vendor/sdl3/image/libavif-16.dll index 7fef6232a44a89d45a1191a6534c5c69c9cd8f62..eb235450fe041071145da07db891723371ae55f8 100644 GIT binary patch delta 1111 zcmZqpaDfekC){A-o7{M-^%mpSTTJt8)DJT-FnDyg889<29A{u;U|`^1_o2B?f|0*{ z7Xt%Bw;MHOq%Lx6FhqNHGoui{(Q0V#vX=lH;L8* zCBZ)3s_I;~8C(tD?*0G&|NrR)c1+?N%09iD6}~YuOrK!Kq{6kQ+l{03KuNgarRfLk znA%iBu7h-go!aj8@Bjaom;U|#&o2*hKGahFwyo{C_Dt=$_RQ_M_AKqW_N?u>_H6CB z_U!Gs_8jfG_MGjx_FV0`_T25c_B`#m_Pp)6_I&NR_WbR+_5$s>_JZxX_CoEs_QLJC z_9E@M_M+{%_G0b1_Tufi_7d&6_LA+n_EPP+_R{US_A>3c_Ok7{_HymH_VVqy_6qH} z_KNMf_Db!!_R8(K_A2eU_Nwi<_G<09_Ui4q_8RTE_L}Xv_FC<^_S)^a_B!pk_PXu4 z_ImBP_WJF)_6F^__J-}b_D1cw_QvhG_9pGQ_NMK*_Gaz5_U7%m_7?5A_Ll9r_Ezn= z_SWsW_BQRg_O|W0_IB;L_V(?$_73g2_Kxkj_D=1&_Rj6O_Ac$Y_O9)@_HOOD_U`Su z_8#rI_MYvz_FnC|_TKHe_CD>o_P*`8_I~ZT_Wtd;_5tm=_JQrW_Cf8r_QCDB_95-L z_Mz>$_F?V0_TlZh_7Uy5_L1$m_EGJ*_R;OR_A%|b_Ob1`_HpgG_VMkx_6hB|_KEGe z_DSuz_Q~zJ_9^YT_Nnc;_G#_8_UY}p_8IND_L=Ru_F3(@_Sx;Z_Brjj_POo3_Id5O z_WA9(_66;^_J!@a_C@Wv_QmbF_9gAP_NDE)_GRt4_T}xl_7&~9_Lc3q_Eqh<_SNmV z_BHLf_OTS_WkX-_7mE3?I*V9+D~fFwV&LcYd@tu*M4ey zuKl$3T>I(mx%M;KbM0rg=i1L|&$XZ3o@+m+J=cD2d#?Sw_FVhs}w&&U} zYR|P_+@5Q{q&?SuX?w2yvi4m2B&Kx%NlfbM23{=h`1{&$U0% zo@;-yJ=gwJd#?TI_FVfj?YZ`6+jH&DwddNOZ_l;A(4K35u|3!R()L{Y%hPADNUN^S L*v@g|@{f1`xq-P{ delta 1128 zcmZqpaDfekC){AtnAmu$^%mpSTTJt8)VDD(FnDyg889<29A{u;U|`^1_o2B?f|0*{ zH3I`fw;Mo3uFuGViD4#i9)s9Ki-=lY512Y3i*^2`=_Aqq2Nwgj)iSy}JHRHO?;A;4G z@Bjb*|EKBk%eR0Hb?JQVk$Jn}8#99kbDThTx5qbThSrm%Dn7lN6}~YuOqf2!j!A`Q zcefiy>w%I;!%JxsrXR9nYEuup4l*0;@^+tp|Np-{{_p>Pet8#UC-JwfXwS80YR|Q2 zZqK!6Y0tH1ZO^r5YtOZ3Z_l;oXwS9hY|pjlYR|RjZqK#nY0tIiZO^smYtOakZ_l+C zXwS75Y|ph9YR|P7ZqKzBY0tG6ZO^qAYtOY8Z_l-tXwS8mY|piqYR|QoZqK!sY0tHn zZO^rrYtOZpZ_l+?XwS7*Y|phY0tG+ZO^q=YtOY;Z_l;YXwS9RY|pjV zYR|RTZqK#XY0tISZO^sWYtOaUZ_l+iXwS7bY|phfYR|PdZqKzhY0tGcZO^qgYtOYe zZ_l;2XwS8`Y|pi~YR|Q|ZqK#1Y0tH{ZO^s0YtOZ}Z_l-NXwS8GY|piKYR|QIZqK!M zY0tHHZO^rLYtOZJZ_l;&XwS9xY|pj#YR|RzZqK#%Y0tIyZO^s$YtOa!Z_l+4XwS6| zY|ph1YR|O~ZqKz3Y0tF}ZO^q2YtOY0Z_l-lXwS8eY|piiYR|QgZqK!kY0tHfZO^rj zYtOZhZ_l+)XwS7zY|ph%YR|P#ZqKz(Y0tG!ZO^q&YtOY$Z_l;QXwS9JY|pjNYR|RL zZqK#PY0tIKZO^sOYtOaMZ_l+aXwS7TY|phXYR|PVZqKzZY0tGUZO^qYYtOYWZ_l-_ zXwS8;Y|pi?YR|Q=ZqK!^Y0tHZ_l-FXwS88Y|piCYR|QAZqK!EY0tH9 zZO^rDYtOZBZ_l;wXwS9pY|pjtYR|RrZqK#vY0tIqZO^suYtOasZ_l-#(4K2Qu|3y* zQhTobXxr?uzWPjAn)pV6LcKeIj8epY*~{p|K!`#J5o_H)~F?dP@U z+Rty#wO`PlYrn8P*M3oZuKnWnT>B;Mx%NxjbM2S4=h`oC&$S1o&6VxB_N&@+?N_(w z+OKKPwO`wwYrn2N*M5C_uKkAgT>Fjfx%QjdbL}^`=h|;+&$Zv$o@>9YJ=cDFd#?SC z_FVg&?YZ{5+H>u9x98gLY0tIa+n#H`uRYg(e|xU|f%aVcgYCKYhuU-P54Y#qA8F6E zKiZyaf2=*%{&;(?{fYKm`;+at_NUr&?N7Jo+Mj99wLjaQYk#gi*ZzEauKk7fT>Fdd ax%QW~=h|PMK7-|y`n%Na95*iihz9_R*1+ii diff --git a/vendor/sdl3/image/libpng16-16.dll b/vendor/sdl3/image/libpng16-16.dll new file mode 100644 index 0000000000000000000000000000000000000000..ea1e35e615733e331f8a647085586ed276c5d8b7 GIT binary patch literal 247296 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 literal 0 HcmV?d00001 diff --git a/vendor/sdl3/image/libtiff-6.dll b/vendor/sdl3/image/libtiff-6.dll index 645e446b82453c001c0b815ebc3f783e3381b1b4..0dcf40a01420d07ef1d931e0e79caf6d29ad3b8e 100644 GIT binary patch delta 182554 zcmZp;AkokuHDNB#8fFHD8a4(776t}`i7Pd@K0w%!g6tD->*-ElV|XRXz`(G9jiH2{ z0RbG?7)oRiT!sg13^SM~DoU{)&}C!Ln5Zbs_Gcp-!vV&Lic&&)C8-r93=9kstC<-X z1Q-|?)=ZwoC}*|+r2POh0|OJtd}a_2jvW{R4(Ju7B$gyHFgRp0F)&Hn=tr!-2uTL9YU$HA0qwfgu5^&W3HWJ(DE+2at6QY!ekl zr5YF#4(O#ql!ARZfsKJdjDdk6YH}Zw6d%~b8`u~aI2afh3MOx3lIJ|Y261l18*PJS{2!wit;9zepCp=Pok^CfK1*I&&FVQp!HH+Wb-RVk8ar%MK%V*x1FL_^4S>nGcqtR_;jm^EMjAL&9Ub!Ktn`IPx2?S*8$&mH^A9HemX{0+3_Il+7#LnmS~U3p zi%31cdk~=w?whU|?YI=$3u1z{cRwUBF@Z-=kZ1-aJ!khR7htp`dUgVdYuQeb1~W^4Yz$lvmwfq|i$t@QwZ%Th24 zEVzq-fuU9XKYvRT*fLgcuw@J$tp`eYeLG+50!52Y=fnROnpv;sP0nLg7xn1nos!4K z@M8TUW`^V7#OKj&JpI6GCb4>OSiB7V|Nnm)zq|_rgW&;>cIKBQaK1;ks3q8ZUL^%K zhU09YpnGAykeT77ElAA-k8aVQ@*vOhK9Xl+cpOZfp##mpnSpcV71CJlZK%8q&@BIhT#0^+1X73!^q>2G7nH zhL=1#f4-R759V~<0&yykIF6l1UhJ5Bl}%p!MJqEyuk-)rAB<%Ro}DisN}c;BbF<5( zCjb5azx6=LYPdL4KQlw?0msfGCDF~l8B4dl*w_TNU>C@PAUi(xK^5?~mj3_$AMTKw zePDGESM5RO{GZ&%uI$jw`csaL;W#*LyxjNi|9^gY2Zl5~c=UIk^62GVmcz#I^5cAF zh6$k_oliY_c|j#Z?92QA|NoyX$l=K4wTGF(r}NZ{PkEDLILx^?q1=smljm}HaBbfW zk&Vxr{GP*vcj9hl2H(z`KApE-$mLBo;51}!+Re=H;#uzG3{Fpz>YGg9q`~RYe8eI; zE132jj`}DFZ?`CH3=&VuE@aQa2QSj)z`64rS@>9+_rkkFdQ@I{7GsSM7 z?8!HeY3sJhFZsHd3|JWxGyy}#3zKIE==#6k!p!i=gW@^d}E~t;3)A#-S zcoWM(;qwR-i*Dy9{}7aMwkT(2@aUc%!N|byQs(FX{~oQEN@PIt@t2rD5($h93?MNM zkeD|_ECX50{L2qgU4}aQ0c(n(d}*F(R#9k_eDtYWGNBN`bv;Roi|?y zIx;YT!hh!f|NlL@H#4w;-1MzP*Q1-wqdQE%qw}UmXER9j#q2U??#({APH-qub_?M{~UdLkV|UbG?Wof6EO928LcYMi1*| zkTQ?XV@0BRJmWkQgHLz22P*@EZ|lhtF`r&m){V>z9=)QLAgc4`3$r9f29M5L zh9^Cmk0?aP#lK8F&%^*O&_Mbl&NG2R$azqp{{k^N&oeQ+zRWKV%0&#|(o6#sqpBX=Gk1W( zuzMpYd|xn4<`&aa0oPd!3=GE`K~*%UT=3{@T)+&9>&6ujYRBYQF)3-+4a^L?L_k$j zr;kd6PcMk*^ik1xF{g3zBrzpE2_6Op7yj*j6+XSJf7VYvB&N)De?2H;eSEP$Ve)%1 zNya0SImO+Wrf!-XC@xiBxCxXh<5+VyF*ES%UEps!%)r3#nLqO2XZ|?W1dya7zaaBx z{y0aG&-{_BK_C(S2v)yMpyd7j14ixz8$gg$cGk@fn&-`(`CJ-Gb z`1NjEqlqnN`AxYwbpe`&Mq894Mj8 zHwDavxGrbogGk?U<&-}584xjlWZhqz$ z@J#s3AAjsKfBenQ{4tL{^T#^6eCCgh^!Uslm&n4er@CzeGXsA!4r18JMpPi1!NtL^$C?CE()4tM)g9CI*egdPh*5W$fz@)>-nP&^0zI4nDqi=)=|e! z2FGqDOGh7mH%A}GPA120MoY&4emBPe$4*AaZU#%o5Pmnu5XVjiehm{9kLDv1hha6* zXZ{$~IiU0dYEOWYWdkI93@^OA_3!`x37`36WNT35>p=<*dl+7L840S&Kl8`1#-Jzw z$sYj8zXKWYi9ZJ7;g{jyrT~Kf2bB9JeBzIR1n$d)U_PW>5WuflqN2dBS)*d$!msI~ z;$ZmAqw};!ucwTUR_F2Kj!*8eGB7yq2mv+4s`Ho`x|u-<3{)k2;uo;Jxek=5v`$Q3 zBc)s~&j1qc4)y^>HmJflk;ec28>rGa_K9EX!ecxcn8=D7k-W7AOj7*edgCX^_f4)IpdQHf82r3`~uDn zpZQ~)BR=!T9sJBM=*$5Q<9Y@Lr~?8BIUp3n0WF(B2?)szTS0Cx{04FW%=(;9{Bb`p zZRdIIo(6IN$bPT`z&-|P|HQ9#;uC+|!8Cr2^DiFNqkFn#Gbp7Y>?|_s4h{hYnMdn4 za9~w#1lKwrL5}da_^SCKqX*|Hkm-j$@kbnZJ%?YO;WNJgyWs&)AP7v>lTl|2h>nXt zoHn^a<`+{}_T&=TKzZ|QP!tJ>`SdO};9+3k*ErmiHxb30y!}0t5moESQ z|NqP%DXR!kaQhQ~ge)US0l&`Ymn;xTQ5J~grBD13qEA+ULQdz<_ZyuqDhe;R{srk5 zP<^-pWI^Qf&-_tOKJiDW?u973^D^`A|NqA)A5{otpR|IR;lTxIYO4BlHr{|pKLAm^tR9RE z3_hKmpw5L)=foe(AjP1H2c+1ev+)B&l@X&Cr~;ZO0IIG!8$o?mk6zZl|Nj5?=xpSG z2ugscZq^@6Yz!WqjS3LnF9=VAg@NI48mRT}8N@c(Ov!+G8WY>(Or^wVspX)?*TolB zA&d+lzx@ZbI}iKxvT8yl6j3Cgm8eIrsNHgAhS$>(d~*=L9l_UKK3P@SG@1!&%&K5U zP-mt2h{a)kc?O?eRzax5M1%yQ)#1@Ax^5Y&`O86kB=hGko4i%op&k~no}CjRF(ldw zZvJT1u<&K=AQ44$2xkjUV@`47}JmQ83Spje&u` zJ(m$A&kPnRTl zCa~t0#o$)414H-J9!3U+)=T_-iJ)?-yLAGn2h+`AEm@-O(d!}6>-68Fm&L)OSLC3F z~(qcPn+ zDjdx}nM#Bmjrq5isIc^gF{d^EV&ZRq&(6RA@{mWT1jJ1bKrM~N-%?<`CSafVO`fl5 z#)I(m%kIe!HEsD^8M;GLpyBY+VX}^vc|DSvzkmP#2geJ`U(fDPhHeKA{uV1H29W1H zyIncp_FV<319vR=w};k&oB|8mm%IM{{|^%Q%rDTo2GpG67i54qa>3vK|0nQocP&c; zk0sq_2LWLz8Iv=$m5~GN%H$c^){xNQ-##^n5oEV32i!&VfBye({4EaF3rY$6P4~dbQUWaU z3CxxRv0J}^#y_@C?P36%08fT5ZNVly1t&HpZ~}e?Vz(Xx6`9?jn9AwogCyCPLVrO1 zXPBIzqloOr`;&WhRAP`~aQ*N9|2vsp9)d&=r0?e0T>=U++r#si8Fq4l;$#{B^g|7| z7+Nmzw-$g5-YyJ^vb0VC{_Vj`pqPgHGJZ0zu7s*9sLR!Q1w5W1z`wl}H0I{n9V+12 z?aSe!c>pvZ*Jm}^M^~1EJcan!qkHNHh+e}39?g3}YzF?R2VU;~ z1q#A{3=9nXts&5K(;Zp>OP&jU{r^9~qkHNOXux@N3V__^(LMD5#5B)tR{@XisV5*j zNGi+z1xbJ1p%L{kgCc%``?-+N;NLzq1QM5sm@xkZay3LA6cXK`F)+O{AgS$BAwEV5 zXcmw-XsnQb`&3ZCfV8D`f}8^y7XZ5xZvV}n|NkRuVgBu*RZ!IsC-3?RaWW{&Yyd?M zBFp^z|9=8VEl3J9!2KC6)e15boCUwR3ORUm_s(EoVDRmBW#Dg(1{GY}r#4OI)VI-B z`w8+IxR1`iJ+usD7(8;he*XUt)ja{Kdvb}sU%e}XNB7hMP;mweh3P*)rXU5-R1g~` zTloXke^Wc4F$T9O98EvSKcFrg!at@UGr<1wtOuw41eobEKOn)=9hw0X;shy%k0$bO zpLzjdA^-NNmmoYuUcLDp)q$ZEDB-Z{`~Uy^+ox`UXk+jJXN0NSAY6ngQ$WfRIfTl=lAurl74t7&L_C6|{mDFr67}v#lKk7JIv~=YNB2}vTNRvMV7`+?ajj=3 z2PBy=egFTzxq^d{zn}fb|NkZO9=*H{vzQqicU%CCk@bp7&thiyFWOnk#^4C4IfVGz z?}M^NZ@p;3EM^9eWR@-u#tZ)+fSlhg46|*`H<0IH1pvgV86dH3V6hHp0o3{p5(^&P z!X7ZKg;23i`~u9M;3+fu+yDPQoey867%(t2|KM=!JXl|H3uNbKegS63=ASI^Nat@c z0IBU|?V1TH%tf6+ROic17ZsZq+g%tLx?NOkUh+aM0qKV8eEIz=B0(A+c=_V%|NkDx zL6tkCvhg?$8hvMYdEx8-|7p#EKNw35KrV3H2@+0ofd%QNuMkf;g1w#Q(h1T1a@N=X z|G`2pCqPx~WCrzPVfv~jUoz6GKLi>s<8J{KKcJDuZn4gTjSoT7JD_34^wyL7t-nCy zSiMP1p3Q$4>x6tPAJy~vSS|*QH}dy_Y738UW}jYOn;FcY+DjMY`(9DD#mo%HT~rkO z*g*;DrbnlXipGmZXGR8(>L$|lAm`VXcyxnxm%()V^zs@`2m3>51~@W*F9eOs z-F(sP1gdjivi$%5|3&ycg!>}k?gPz-A-j)*zvVL6DPSA+!EAUv$Afut1xq~xgHLac zN`&JMh`yIEltP#pzBvmt@VA2E%%j^yCBnn@|9?=su$_^Cp_iq>1C+!6|NsBL{@?>9 zj~O1ChkPs_@%Q`$^%5B$c=QHvcvwyb`HR2jDJWC7zAa(#=yYZ9U~UEt6+^7@==|u> zdFVy`mSC853qjG_&F0&BfWH;g4h31y@NyHVx|ergfQC>m%>6HK|NH+R;!Zb^CCKhn z0J&47!Kb@>11OGQF$YS}2Olwcw7&I7zQo_+&&0ssSpWYb*l92|9H5};`~;6(4*ph9 zTN!Lo3#h;4(fRSkLKS9)mqGtw_Adfex!YY-!k`vH(mympdPN+N>|DtJniqsv2?}

      o5we!0@*v^VS|Nr~+vM!zqc2E#h@)krg8sZ>u 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 delta 159145 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

      Dol1&=@f+1&s97x4J=U&HOs z|81^+{@c0!`9HxIf(v~A{7>-x^WVVt&wpc|KmWgb|M|bl`_KOgK@eOJ^yhzQ(4YSb zL4W?Q3Hb9rEa1=oAO3&-A8PvZKcVT*{|QZh{u?y?`OkpD=Y$A=@}B!?R^#c1&af)7 zIp^nkR?&ajG2KYoT)RW`jOBr_*9IJF?LD6u4!0X0KU zpLmH?Wc%8)to)2l-ShtZe=`5if0g-v{)5;@=0Ru>8-!EP_#iQ4oHB3wzjLf|EJ>^@ z|NIBxB`f~?FJJlR|Kt^a{#&m6^FMb5gzd88&;K(k|NP&x^3VUY6@UJ}fzlv02+v02 zgT#>Wot4w;F0)2WSGdAjF#W(4R)gshS6Mx#Pq@ljFi~4z+BMb%(;r-8ZJ6G5omFo7 zvg@q9yupdN1v#n3`URO4sX5aZTws-(KJNx=)pn1YtO|_NSKMOl0HsZa={mPruT0bs zn0AL%40I_oG$FoUI9=)vs|tAT3eq9@yYOuK_K-WQZ`h_kc+7fqdc$K@%jwIWu%0yc z%U38aNK8&u05u1FqQVt25{okwN)nTDQXx6SCn`KRwWPGbB{exe1uDkCu>IUq)=I|d zd!Dn(PuF|FnzsGV3)U@+^(}w@{4XE^$Nl~Df5YED{}-dF4M5{h{`=>@>OY8?0#F){ z`3Xc>4l>}w-#`B!pjieIzko&Tz~4XrAz{HVJu!(*c>1E(tn-XDl9N?6EVMx7X-cZ5 zrlPF@gK9BDMt+e?W?Gt=3B!EuzyGIj|NY;|{r7(z_uv1;+<&Kkf5WOMoXYd}e>BhE z|A9Pz|GV@2{cp?jce?glR@r)c-oO8idH?=b=l%O%n)mO2e%`Y2?GOzw7}p00s?>kvkLtE|BL_c|M&cV|ARD`pg0nu!Ptm_;ibUe|Mvv`{=Y2n z_x}ljzsCRf3P3a%VbNe{#=vk`@bCX^f`9+76#V;tj^N+_{esh--m$8Qw2J=ypCbDA zf0*ds|0<$?|CfmV{Xd=i1FMXPi}>IFBI1AlvxxuwpDy3`Co?|b>08uEd1f>n2bP$wIfzo+Ux&%tsKBjbx#-M zW)qqI;Sa09^bLPl&8F-9Wj)9hm0Faq0IJ@Lrz`GYmfCLok98;GR0%ejtrl#4jIiPN z?Ry#7k{PFKaI)#K1%vv4#nb07v+dcQz{17|S{^O1J&~17h?Ut)&tQ5P7hBeJUT!vN zNRgw?&DOa61~;1l({=$qwgyI#2WscQLCl~8p&Q&zr*Hql&nCmjrdN=XSduuMO^~g@ z>j!jQ@`w6@{BoGD85kITK=T$%o&ma=_XAY?156)yegUL$`T;?<1@(?a>7}`;c_j)d z`MHUic?zjTMfpVv8ZQ36j-Gy+3~=e<%)Io{oW!Ecl1c@QU{7~HaBGf%!M`lEC@m+y zT%jm2FFh5e-9OAV$j!$;T$3Rnv8W_7F-IXMzqlCGqAbo#&&y29Ois*8PF2tdsQ2*? z4h9<)l3#*TSqNMe14BqgszOm}acNEoXbEabe!fC+ZemW3LP@?t5=f??D782>uOu}^ zK_k@91?CLcN?Ne@K)z>)&rK}JNUbj_($KV0P%T!-1TC}GP)*lSP)*lVP|zq!Eh$UP zu~kji z0HmJb0~-GU8vg|vpCJKNKL;9L0M3U_peeuw!1gg%q@((Hg8FtN5w?ELdI1Iockp5f zHiiHJ28Mbe1_llWHiiZv28Pwb3=A?1Yz!NO85sTxGcf2durV-*Ffa&;Fff=furVlz zFfgczFfiCKurU~jFfb&EFfh01!Slg1B0{}149YOP%#FEHaP}{8U{9o333b!o8%Z6)-bR!9FSvR z_#?-_umz-Eo`Jzeo`GQx$WVC(h7x%Oh9e+D0!0<$#f#D1T8^Z^A z1_mt!28Jsjhbk~Iyi{ahxC0VbWT85m|TvN0&= zGcf4X>oYLS0cqA}U})24U|0b1jXndzOnnB16(EE385maTGcc?H`AnaIVUIoo!v;n+ zh6DNx46h6r7`A{MZNR`#W5~d;2jojb28Qc~3=C%&*%%%eGBAW0Gca5Lg@iE!!x>`+ zh6jvn3>S%$H1`5nSp_UiH+faGXq1g3j>1)6B|Q<3j;$zGy{VQ z6C0SG9L>Psz{JL|Aew<;cQgZo2S|N11Htd3!*XQ*IeW7rVGz;HQ+fuVtk zjp0EI1H^KI79dQf{b3hiyF)%!eV_;YTvN(=`AuOJO zVFSp5cm{^1cm{?&APeFd82%?RFdPBtO=4i+Phw!W0CHRs1H;l}28Jsjdz0%K7``Mk zFgyS$N?~9~O<`bo0rGJQ14C~L1H%`PK`9IjYf~5){(v;3Ffiz)GBB_(voRQ?GB7Ml zV_*SF=m0q= zhk?N*mw}-NB%aH_(3Z!*Fa_keJO+mPx_kzPB_Kul3=F6885p)OvoT!AXJDu;U|=`^ z5-(t2Xf9x2xB${nz`!uIfPvu($TtNH3`+_a7;b=kQ^3HmwSa-)4l^6WfdU4GqXi5M z4?yM=Ffd##U|@Ix@+62ZU|@K`%*OBmq^5|0;SDoeJ;Q|}1_t9|28KT%pA|DOxRfz4 z@UXBk1e7r_+%0EdP+?(Xcu>y3Fr$KjL5GEnVL=50!`cc41`8H8h7A=A47(~A7;ISB z7!Fi0FdV61U~phzW4KVkz;LUAfx!i&w}OE|u!@1fgN2Pjp^AY)poxLOhlLGHi?-D> zFrfDQ(R1t7aT4+Fy)5F14IF)%y*z!1R7#xP+a z1H;563=A0{HA@&6{w-x-s9|MeU|7b$5Vn$mVFD`~L&8c12HDjN3`;;}u4Z6ZwvK^e z2P+%HhII@K?&}#C&akpE1gvLZ*u05>q5cLd8^eK33=DU-GcdeiWn*}-oq>U4Cj$cu z8ykbbP6meGyBQcn*w{dYJ;U2;3=BGKYz!Z+F)*CF&A?#8#>Q~rHUq=g+YAf=AT@Uw z7*y{tFvPI2F&NxoVEA>9fguAVexHHi$X5o23XuA*3=B!%7#Jq7u`v{UW2k4?@r{9D z4jUW8fo}{93EvqQmawsb>DKQI3>(xh9Yz!CvGBC6;Ffur>voTCyU}RurWMl|nXJZgxWMpV%WMoJHi8C@X zure_+6oAB;7#SLw7#SKs;!KPTKbaUACa|+HFfcPR=rJ=gOkrnZFkoh6Fydfjm;thw zgOOni7bC+4ki}e#3@f-984j?sF>K&wWY|^D!^m(2B*DYTki^T#@P?g@p@5f>VVVFV z!w+^gh6MtQ47Gxc3<4Z%3=M*e3~@G$3F-03=?b^8Q$11GT3mi zF?_ILWC*uqWN-ngv1MeawPj=o0O_@5WSHm3$PmK8#<0MVks;ELks*VFjiEllkC7qG zkCCB)gN>oUkCCCzkCCATWT+n_L$E(1LkGwpe@2E6{)`MWKoV+aUf zWQYr3WLN=G6TrxjAHc}424qeEBg4r6MurU>Yz!9y7#R!#85#C)uz~5Lfs70%K;nUn z4Anu5^$b@)t_xyhXb)m!cmT3Eh>>Au5F^7A4mO4ZL5vJ1f*2WIfHVX#GROooGQ8nn zV^9cYWY`wW$nXQCCYX^yGMtftgOiOxA)JvxEu4`-fs>8FAe@omK{z9W3MU(wHjQ9p z(BNcaaEM@Jm>R*zV8F@7uppwIk-;mHk->tKjUgbCk>PYCBZCVk8^eW2Muw|Vj0^!F z%~6aD>!KMM5;)lyHbgTr{EK5`DBxscV2EdAD2Zoe=-^~yXozQIP)=ZEm;$mmfsvs# zfstVWCmX|r1V#pdL`H@coNQp)J&TcH1IVr{Mh5Q&MurphAWj1#gUAF%h6f-YOkia2 zn$F1Z10+73kzv<#Mg{>cHiiS!85!bcF)~PSu`wjfVr1Akhmk=8BtD0c;muq|1`94W zh7WTY8P3gTWN_eOW4JJ%k-=gKBZCJQ8-v3VMh4bxj0_1}YzzY17#Y^@WMrt|Vq@5_ zlaZm`ZxwTjX~fjBg3hqj0_3fYz!BUGBV6K&d5;0&Bn0cI3vUU6O0T!+-wX7PB1b|ImyVd z03?2rk)h%&Bf}PMHim|?j0_p)85z!SvoRE$XJn|kz{v0fBz}RBq5Wb#Bf}q%#TOYF zmR(|G5aD5C*l>xF;nQVC1|1$Y28Jt)3>J478C-bS7#!{}GOWDI$PfckbC;3f$U{bk z5*{{&3lA9?UOr=F=;2{w`0$L8!R7@c!xE7C7mN(iFBuv3@USr?ykumsdd0|a1tk88 zk-_^lBf|?GHim%u*NhDPZ$QVPvoTC~!^kk_EhB>jFB`*xw~P#LJ}@#E@Uk&{_`t|; z_Y)(72QM4LgHMbMem@u)5_s7d0)8+uT>j0-PyrJE&B*YYnTcTnNIf$XgQ_4C!wOzD z1_MDRh7chph6B883<*L^3~nM!3^zb}MVJ`O#F!ZBKk%|KIEXPZsERW&aPYA)7>F}5 z9FbyT;NfFqxFE&EpfAtFpaK$?XJS~c%EVy9$HuThm5ISlmx&>SkBz}Wmxym>t5zV8PGEupoqqAu5!K z!G)iVAt98BfhUZKA%dTcK_HBYK_rZcAp>Mk7!$+&FeZi^el~^&VN49_5ljp<{A>&c z5ljpr5ljp{{A>&f5ljq)kxUFz_}Lg5BAFOCqL>(#fXsRG5i6kPh?{Foy5c- z0GjnkW@1Q4VPa4bU<1=~(r5F^0GAdtqyP?^TWkR!mx(2&N&a4VCEp+;Xx)7gJmug!xWI_TqcHuJSK)U zAPe%C7*q?G81@LTF&GpuF|-viF`N)!W0+6`x;Kl7;R?t>B}@!cOPLrR2(U3MC}m8UK@Cg{7eE#?FflA?WMa4i(%ZF*1^P(A;iY;po59Qx08t>2V_ns6N5uH6GI6|eK!*W%M>Pt79lnU zfhkN3Zc~{U=77{pWn!pbIgN>7g%BG9=)M5Gxl9aOgxDAi<}xvK%w=LYBgDoq0d&2_ zJSK(+JtVz>jcco7qW%3>ylFCg`cnHc<*FflL)voQoLVPdFX!oHl&j1{+~EP)Cn}bp;cHgD@L|zzQY?(G^S#F2ZaK3M-fxG(dMj39~U6 ztYBiWT*1WP1F~!d6T_qxObh|SYzzxlFfj0QahkhGGCApzuwl}rp3E9;pU zGC(d}$;2SGiHRWxWauU)hSp6?3@soBZDL}WvWbbI2V~GDCWhskm>4DqvoUPg#Kf=# zBqt1NJu@*J-^9c)Lzs=>!X_q$8=III<_NPfJlMp<@O~2$!vc_JHZd`L*~G-K1mu~` zObqOsnHW}p98|xVi9u>J6T=#i#haNJ)HgFRYykOYGZTaPW+sL$Am40eVsPKg#IOSt zyqlRA!Z$N9>=9;TNZ8E8khPhK;Q+`to0%A@HZw6C0eNOK6GQuECWaFr4{T;)n7^5c z;S9(Fo0%BaZDwM)0P+CHyv#4km`s9ZU==B5Vu^JDBPj#CI_<7>KYjDC}ZlXxzob;32}sFku%H z!|h#63_c*uyOh_Epj>}FyJ-_6931Jb;kiJ@^f6GH(={ca|P8GD!*N<`Qg z7VKeSn6j6Np#j9+%fzr`9}`252phwOeM}5X4=^#z0I?4+G3+|X#IQo7o{izaK_-SB zhnN_4h_EpnIK;$o^e_{{2@y7i3x}B)jvi%VxB+4xWn$QNoQdHHNX>C3hAk(V82*6R zCz%+2oMd7U5oKdwIK{+ZcZ!KYL6nWb;S>`?#VIBR9Z@!hhEq%o`%W=2SctMQ95}_q z@a+^6g9}LgX(k4n`qNAd0U!+^&KV|#7!dmm6GPTnCWaDGHim+;Obl)3nHXwB*%&6A zXJXiXk%^%LWY9$>hESBFnTg@)7bXT1F*b$|Uziv?zcMknh_NvQd}U(z z|CNcsM~sbu;Tsdft8YvU5g;|+m>5)kFfpWvu`w9@U}E_HgNdO4q~<3R!~LI3^$ZOl z3w|;&{QSklFaad-n~5Ru9}~kIF*b&Re@qN@jLZyc#Ml@b7?~O7FflV65MyIlz{JeZ z$IQ%dL5z)I0y8tiIyPp82OvkYF*BTFXJ+^y#>Q}gotYtngPDOroQE$W{41HV>rOe z%y6HVnIT4;jo|?=GsAaYW`+cDHU+WgE6CE{!h2K>wncKpl?4dQGJ4*bjv?)=OQ9rfaD3<3Pi3|j@58G1mL z2{1E63NbTG5eK!`m>F7xm>Cv;94Exgut+`JODXJgqh*F2s6VIkU=8M40@u>3@<>MMVT4;M41`h zfYggJGprV6X7~VdoG3HHJ5gqaFCg`z%na&c%nUz3>cyBD`ox$S{(#hrF*7U`V`gBG zV5?`?AjZs4C(g{kBEiPcAkNINUYwbMLxPQAgE%w8Drsg00T5f7nc=21GlPZ%8^Z%> zW`_SV%nUjbYzz#t%nbWwnHd};*ccATGBX^IV`lIGvE`T<_RBLfgn-!c%nVQDnHgdv zKm*at3^j_(3@ISH6qy;8DAqGG6o4#HWM@!PRtBt&ddw} zAid7a3^SdX86rUHotYV~Ix{mQNUh=m4?Zm>KHbm>Fh(40U5>`0U2aumI#scV-4=cV>n)AYZyOGl;k| zGi(6)(w&(>#hsa93&@x5%nX{I%nV0BY)@u}*WSzwSESe&K6o=TOz>r9cq7HeP!D3% z_%Snl0a@V3%#a?y%)lbe#!wKz%y27!nSn=|jp0E6GedkJGlPsYsC&iCz!1dDpd-x& zrf&r?GnjzX1Ti!G3u0!l0f`4QGYADUGdM_thH97@Qi7QoTtH?9Gc)`RW@hjJsR?0b zC<$S%X9$sIV`vCrX4n_P%n&2Z#&95nnL$64nIT1*jlm$4nIS!tnIQ+HIh2`!F^rj^ zL>kluV`kVE#>`LyQXj_5a5#*ap#>x!&deYd&dksOvN)WXK`oq_p$BA6I5R^=1T(_~ zkU0^|45bmw3=2T^M$|Jitc+l0SR&2Fupxq(p*V_}VGT$kikV?YG&922xc-fu*k46C}c7- z=wvc8@W`++7-TXt$Ye1y2!PmG%nZ>v%nVoT+1S7g;XG!BC!mqcJZ6T*JZ6R+phTC) z%rGmDnL$Gaw3-bvj|d|fS(zAEjTjB4v)Hhyva&ETury8AvteuI1u>Nv7#P9y^mR6D z>CzJ13=$nI3_=ym47?dk3>=GC444y`3K#Z#14j~)QU!aquhS(R*i@#AI72f7JkxWX*ebwkrl&fx ziHL$Mc*JDDn83im2xm`^b7s??&gjG@GM&|lO#n=A!hJPe&w))@l$(`-JA;jZ4W^lg zoq=c3bTvmdbyjv32KGtQ<-*wH!R|ov`Sb%`Y_ikex`3Psa{omaHks)c?b$@8&$Vac zneOSzmNI>#E1Lx9OgKh{>GxdOw5N;uvMEg0bz^gx&g#x4G2IvBs#Z5PiRmDM6&y{| ztL)j7`N2#^18~d*F&a!aaAK34zSDzEV!N+9+f?T1W?pO()9bw0gs1a*v&k|lPS^Hk zE0c!l;^$!CXPn8vVZffiR=^s-a)9Z=^dsJEwcu5z9zJY};Fxz}U|&vFX$T0n!FPrlAzrJiKjMF`R*aW6e z1i56c8ynB`!T>gv>3jXzM5c=dvnfnJYsbbh{ii>h$Ml0vY@nOi7^Z)4W|N#gHGu8R z^qcl>TqRHm=>Ws{hm z8^k8T4)yl*1W+J}I$$VZPw#YNQ<%Osh)rPnS7$bf>AK-;Jku+K z*54jc5AZ5Vi&2M7(`sC|dwzvFn{MwyV4# zTZ0%4z?sKs`nqs7X<3kmf{;AK#mdTciH#W?o&jJb(;WlYM5ezDXVaKI*A~g?7XsN7 zr<+EwRZQO-!Iq#1%8-j7JFFSSI2pt`*cb#VK#7zEnnKg-uKh4J(s3xSN_n)d^!1_n*<6)-SNC}3dN0GcK&U|;~vHyVKEAwg4x`3wvV`3wvf zKx#HIfji3vdJGH=ISk<8;e>sR3;}x>879OtFia3*X1D+v`3H3~4H*~`Kw@&BMI>98 z7(ReBgF396nHWBRI=bH(7(RT5OcPD`&cM(R#K<~H3lq3Sc3?9T!-UOD3=1|h zfjh^bLUu|Y$C;-W&GcY(5Gcarb`JRs%++<{MUjn84!+ zpf&@j4N-8F2|OkV8l!CRV*(9aGJFtbW=Ifb1~=;;@G&zy_{qconiyla&j6kj1NB!n zurV_fa5IBeJ1{)(XJUBZ#{?dqWC&nlULSbx2BORi6GWI94u~)_d;qaUnHda3m>B{@ znClr7Koath7WDx|W`+%l%nS{N4B$y@(5(E2I0gm*H!kUfYhBX_*3u`up|JG~_vNmiChBj;rJ~p7KK{kdG8#abc z8#aa+Hf#(lZP*xg+ORPkw_#(rX~V|w-iD3guMHamr!5t8^a4bHikcTYz!jyYz%7lYz#K`Yz%?+Yz(RP zYz#H_Yz!0a*%%hvvoY+oXJa^T&&Ke?o{izFJsSh3Lp>XVlmi=smIE7uwF4W2hXWf! zlmi<>mIE6@y#pJ=1P3;T#SUx?TOHUKjyte1JaAxR_~^jK!0O1xAmhl!py|lQVCl%l z;O@xA5bVgtknYIFQ02(RFu{?HVWlG*!yZRAhBJF^D>`F=#rm zG1xh=F$C8;u`y&hu`yISu`#qeu`x_>Vq;k3#Ky3}3DnGIW4PqR#&F+>jp3aW8v~Ow z8-tiL8-uDd8-uYk8-tfK8$*OM8$-G?8$*RN8$+8j8^bhbHikvcYz!Nn*%%HwvoTzA zW@C8j%*OD~nTbt;CE$XkauNc(065HaCBv3@OEWm2zO;;NOomo$aiI9sCM1% zm%!G+xcycln>O2YoeVbB?G+hp9qf|>n3L3P0uYT#kw`X%oFFy^pFo7zhDbJsnqanx zilX&%LLkDcp!5zXeGW?Bfzn@~G*2i*y#kargVH`wItEJTKMl#YPXSx~wIN>6~&OQ7^7D18n}KY-GopfpoB$ewxz1_>|& z*7jy#P=WG|ptJ*&4uR51P&x-nS3v0oDBT66r$FgNPP*z|3GQB2#^mL7zCiS6qHth(t1$Z0!lkTX%8qJ6u|~Qp_d^BDv$=H z3!rorlx~62urQ)xngRKrfq}$CL&Y>x4+%oj5)Bp8Og%I%NlG*f3=GstGxg*o8c;eQ zHO+)EIOpUSr+OsjrR1bC^f5RWr6!i7x@l+Tq&hP6!?>9_slJH?1(|v2jtmS_kwn88 zZZb^&SIj0>|BJyjuOzj|xhS(FGdVFQI5oK>Ge3`k;XI>zYKe1cQBi7MNkCD4a%yog z!v#z+&lH9$NTMMbMX8A?o+%6rOib>nC2pBHsll05sjd|aLLk0RVsVKpXpK7qLl1}_ zT&Y@IlA0TmnVafZ3{nhYF)Rm3g=8jYJ423q{>?PquY^si-j~@YHL)xe!>KvUzKI24 znW^ReX&^Hg_A>{TrWREOq!y*+7v(1AC8vT7N-biz$qd?a09M4n#u8ML#F zKEp)70mQ%{%o?7VlIon1SQL`)Tbfgn=~P*g%An2~UX)pq3JxZJhWPlDoSgi;)C#7| zlIfDAY=-rF7~)flit_Rq7$g|uGxIV_N>Yn*8R{70bMlk38I+mgL8>!L7>+Q-m*#=R z9x}z373UQcW#*NnF)%bRCnn_=l`!-&Czj-AGBETrCl#kA7A0peOk_?5pLNZ^u#q_p zs(dqZT0v<^GQ$=yUCgkfo;j^3HI;$k2y+@}vt=p+!%61!)RNS^G6sh0%$dbteGH$N zbD>84WX?^^P0lS~VE6@Q6;v`X{06ad^UG2h{(xA;sU-{yTr7pfAZPKi6eWVU4#5weTl`qoSs(BmOWjvf=!$UwC@Jwx&YAr8^;Q^ zr;O4Cklh3cP`XDQ!Z%1bmkzqg;3#8#0y6_>q#1f4q21^{4cr1xnlCY#;3Bv?t1`p6KiiYJI zmOof7u)<+Q!HNYdF05c!X|OV3<%E?7R(@Eiuqt3x!>SFd9;^~r?XbFF^@7zGRx_+I zSd*}3!kPnXKCDq#8?csP0W-r41_p)&i!Ll;SZuI3Vey2;2Nr)=tgs|tNyCy2OCBr{ zSn9B}VCjOT7nU+CGgy|eY{Iew%RVeqSRSyvVflu7iY#wfyJ78vwF2uL))lNvSao3)!)k-o39BcpKCt@3YK1icYZ}&USo2_wz*>j31#1_qy|9*Hox!?< zbraSdSodL_!uo*q4eK|of3Tk60wg^NEO1y*uwcQ03kw())*CELSU6$ffrTFyDl7_E z)Uas7q6dov7CS61SiE5Ig~bd@43;D;nXu%*k`GH1mIf?sSh`{9gQWt?9F`R}%N>>{EC(ff76$NPic1|}ep}YC43scf!3o@9QNbdH4Xg|%AfY7()|^;#Va<&- z59-&vSo2}ck2MTy7pz^ecEj2oYY(hFvG&5+8*3k|eX;h#T2ND%l>u~Dz=j1o793bG zVab9e8HY}a6bivXMOAjo)u=K&w4@()A z2`p1sX0Xg*S-`S{Wd+L^64<~wOk#n-0t-+M11;|aWjTcf8q+7%v*k|?VCDk=9k+gB diff --git a/vendor/sdl3/image/libwebpmux-3.dll b/vendor/sdl3/image/libwebpmux-3.dll new file mode 100644 index 0000000000000000000000000000000000000000..4294a2394ac7c1217befc2dc49b258ebed1f969a GIT binary patch literal 44544 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 Date: Mon, 26 Jan 2026 09:07:06 +0100 Subject: [PATCH 172/212] Delete unnecessary file. --- vendor/sdl3/image/image.sha256 | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 vendor/sdl3/image/image.sha256 diff --git a/vendor/sdl3/image/image.sha256 b/vendor/sdl3/image/image.sha256 deleted file mode 100644 index 90116b556..000000000 --- a/vendor/sdl3/image/image.sha256 +++ /dev/null @@ -1,5 +0,0 @@ -37d53aed3e127eec41a2fc28be62dae3660097f56e74a5fbaf52514da3b64646 *libavif-16.dll -a6dbc633ae480cf0ce84aedc3ef67f82c3a0015601844482696211458cbb13bd *libtiff-6.dll -bc5ae0287c030902cc3132e9fc7c4611e358e0462513800f76aee0f907039455 *libwebp-7.dll -4daf903fd124351c2cdf5aea3cb803162a5c813736532e0285b924e1d3964a8c *libwebpdemux-2.dll -2ed872741d4faf261912dbbf96cc1c3f1f7d6fc4ec19ebb3230b9b50dd3f4510 *SDL3_image.dll From 83a10e929f634dad2f7e2542ec18d90f73a8925c Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 10:49:24 +0000 Subject: [PATCH 173/212] Require space after the prefix of `#+build` style tags --- src/parser.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/parser.cpp b/src/parser.cpp index c1a7fe0ff..af533d9a3 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -6238,9 +6238,28 @@ gb_internal String build_tag_get_token(String s, String *out) { return s; } +// returns true on failure +gb_internal bool build_require_space_after(String s, String prefix) { + GB_ASSERT(string_starts_with(s, prefix)); + + if (s.len == prefix.len) { + return false; + } + String stripped = string_trim_whitespace(substring(s, prefix.len, s.len)); + + if (s[prefix.len] != ' ' && stripped.len != 0) { + return true; + } + return false; +} + gb_internal bool parse_build_tag(Token token_for_pos, String s) { String const prefix = str_lit("build"); GB_ASSERT(string_starts_with(s, prefix)); + if (build_require_space_after(s, prefix)) { + syntax_error(token_for_pos, "Expected a space after #+%.*s", LIT(prefix)); + return true; + } s = string_trim_whitespace(substring(s, prefix.len, s.len)); if (s.len == 0) { @@ -6367,6 +6386,10 @@ gb_internal String vet_tag_get_token(String s, String *out, bool allow_colon) { gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { String const prefix = str_lit("vet"); GB_ASSERT(string_starts_with(s, prefix)); + if (build_require_space_after(s, prefix)) { + syntax_error(token_for_pos, "Expected a space after #+%.*s", LIT(prefix)); + return true; + } s = string_trim_whitespace(substring(s, prefix.len, s.len)); u64 vet_flags = build_context.vet_flags; @@ -6424,6 +6447,10 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { gb_internal u64 parse_feature_tag(Token token_for_pos, String s) { String const prefix = str_lit("feature"); GB_ASSERT(string_starts_with(s, prefix)); + if (build_require_space_after(s, prefix)) { + syntax_error(token_for_pos, "Expected a space after #+%.*s", LIT(prefix)); + return true; + } s = string_trim_whitespace(substring(s, prefix.len, s.len)); if (s.len == 0) { From 425e7ca780abef80bd646fce9a6541101bd5593d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 11:46:59 +0000 Subject: [PATCH 174/212] Add `core:container/handle_map` --- core/container/handle_map/handle_map.odin | 206 ++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 core/container/handle_map/handle_map.odin diff --git a/core/container/handle_map/handle_map.odin b/core/container/handle_map/handle_map.odin new file mode 100644 index 000000000..da816d288 --- /dev/null +++ b/core/container/handle_map/handle_map.odin @@ -0,0 +1,206 @@ +/* +Handle-based map using fixed-length arrays. + +Example: + import hm "core:container/handle_map" + + Handle :: hm.Handle32 + + Entity :: struct { + handle: Handle, + pos: [2]f32, + } + + entities: hm.Handle_Map(1024, Entity, Handle) + + h1 := hm.add(&entities, Entity{pos = {1, 4}}) + h2 := hm.add(&entities, Entity{pos = {9, 16}}) + + if e, ok := hm.get(&entities, h2); ok { + e.pos.x += 32 + } + + hm.remove(&entities, h1) + + h3 := hm.add(&entities, Entity{pos = {6, 7}}) + + it := hm.iterator_make(&entities) + for e, h in hm.iterate(&it) { + e.pos += {1, 2} + } +*/ +package container_handle_map + +import "base:builtin" +import "base:intrinsics" + +// Default 16-bit Handle type which can be used for handle maps which only need a maximum of 254 (1<<8 - 2) items +Handle16 :: struct { + idx: u8, + gen: u8, +} + +// Default 32-bit Handle type which can be used for handle maps which only need a maximum of 65534 (1<<16 - 2) items +Handle32 :: struct { + idx: u16, + gen: u16, +} + +// Default 64-bit Handle type which can be used for handle maps which only need a maximum of 4294967294 (1<<32 - 2) items +Handle64 :: struct { + idx: u32, + gen: u32, +} + +Handle_Map :: struct($N: uint, $T: typeid, $Handle_Type: typeid) + where + 0 < N, N < uint(1<<31 - 1), + + intrinsics.type_has_field(Handle_Type, "idx"), + intrinsics.type_has_field(Handle_Type, "gen"), + intrinsics.type_is_unsigned(intrinsics.type_field_type(Handle_Type, "idx")), + intrinsics.type_is_unsigned(intrinsics.type_field_type(Handle_Type, "gen")), + intrinsics.type_field_type(Handle_Type, "idx") == intrinsics.type_field_type(Handle_Type, "gen"), + + N < uint(max(intrinsics.type_field_type(Handle_Type, "idx"))), + + intrinsics.type_has_field (T, "handle"), + intrinsics.type_field_type(T, "handle") == Handle_Type +{ + + // The zero element represent a zero-value sentinel (dummy value), allowing for `idx == 0` to mean a no-handle. + // This means the capacity is actually N-1 items. + items: [N]T, + + used_len: u32, // How many of the items are in use + unused_len: u32, // Use to calculate the number of valid items + unused_items: [N]u32, + next_unused: u32, +} + + +// `add` a value of type `T` to the handle map. This will return a pointer to the item and an optional boolean to check for validity. +@(require_results) +add :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), item: T) -> (handle: Handle_Type, ok: bool) #optional_ok { + if i := m.next_unused; i != 0 { + ptr := &m.items[i] + + m.next_unused = m.unused_items[i] + m.unused_items[i] = 0 + + prev_gen := ptr.handle.gen + ptr^ = item + + ptr.handle.idx = auto_cast i + ptr.handle.gen = auto_cast (prev_gen + 1) + m.unused_len -= 1 + return ptr.handle, true + } + + if m.used_len == 0 { + // initialize the zero-value sentinel + m.items[0] = {} + m.used_len += 1 + } + + if m.used_len == builtin.len(m.items) { + return {}, false + } + + ptr := &m.items[m.used_len] + ptr^ = item + + ptr.handle.idx = auto_cast m.used_len + ptr.handle.gen = 1 + m.used_len += 1 + return ptr.handle, true +} + +// `get` a stable pointer of type `^T` by resolving the handle `h`. If the handle is not valid, then `nil, false` is returned. +@(require_results) +get :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> (^T, bool) #optional_ok { + if h.idx <= 0 || u32(h.idx) >= m.used_len { + return nil, false + } + if e := &m.items[h.idx]; e.handle == h { + return e, true + } + return nil, false +} + +// `remove` an item from the handle map from the handle `h`. +remove :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> bool { + if h.idx <= 0 || u32(h.idx) >= m.used_len { + return false + } + + if item := &m.items[h.idx]; item.handle == h { + m.unused_items[h.idx] = m.next_unused + m.next_unused = u32(h.idx) + m.unused_len += 1 + item.handle.idx = 0 + return true + } + + return false +} + +// Returns true when the handle `h` is valid relating to the handle map. +@(require_results) +is_valid :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> bool { + return h.idx > 0 && u32(h.idx) < m.used_len && m.items[h.idx].handle == h +} + +// Returns the number of possibly valid items in the handle map. +@(require_results) +len :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type)) -> uint { + n := uint(m.used_len) - uint(m.unused_len) + return n-1 if n > 0 else 0 +} + +// Returns the capacity of the items in a handle map. +// This is equivalent to `N-1` as the zero value is reserved for the zero-value sentinel. +@(require_results) +cap :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type)) -> uint { + // We could just return `N` but I am doing this for clarity + return builtin.len(m.items)-1 +} + +// `clear` the handle map by zeroing all of the memory. +// Internally this does not do `m^ = {}` but rather uses `intrinsics.mem_zero` explicitly improve performance. +clear :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type)) { + intrinsics.mem_zero(m, size_of(m^)) +} + +// An iterator for a handle map. +Handle_Map_Iterator :: struct($H: typeid) { + m: ^H, + index: u32, +} + +// Makes an iterator from a handle map. +@(require_results) +iterator_make :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type)) -> Handle_Map_Iterator(H) { + return {m, 1} +} + +/* + Iterate over a handle map. It will skip over unused item slots (e.g. handle.idx == 0). + Usage: + it := hm.iterator_make(&the_handle_map) + for item, handle in hm.iterate(&it) { + ... + } +*/ +@(require_results) +iterate :: proc "contextless" (it: ^$HI/Handle_Map_Iterator($H/Handle_Map($N, $T, $Handle_Type))) -> (val: ^T, h: Handle_Type, ok: bool) { + for _ in it.index.. Date: Mon, 26 Jan 2026 12:21:28 +0000 Subject: [PATCH 175/212] Add handle_map to examples/all --- examples/all/all_main.odin | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin index 9a7613ba5..69c9ad434 100644 --- a/examples/all/all_main.odin +++ b/examples/all/all_main.odin @@ -17,13 +17,14 @@ package all @(require) import "core:container/avl" @(require) import "core:container/bit_array" +@(require) import "core:container/handle_map" +@(require) import "core:container/intrusive/list" +@(require) import "core:container/lru" @(require) import "core:container/pool" @(require) import "core:container/priority_queue" @(require) import "core:container/queue" -@(require) import "core:container/small_array" -@(require) import "core:container/lru" -@(require) import "core:container/intrusive/list" @(require) import "core:container/rbtree" +@(require) import "core:container/small_array" @(require) import "core:container/topological_sort" @(require) import "core:container/xar" From 02e84f210843e4689090660131a3c6319ad06ee2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 14:11:40 +0000 Subject: [PATCH 176/212] Keep `-strict-style` happy --- core/container/handle_map/handle_map.odin | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/container/handle_map/handle_map.odin b/core/container/handle_map/handle_map.odin index da816d288..37b8de9f6 100644 --- a/core/container/handle_map/handle_map.odin +++ b/core/container/handle_map/handle_map.odin @@ -65,8 +65,7 @@ Handle_Map :: struct($N: uint, $T: typeid, $Handle_Type: typeid) N < uint(max(intrinsics.type_field_type(Handle_Type, "idx"))), intrinsics.type_has_field (T, "handle"), - intrinsics.type_field_type(T, "handle") == Handle_Type -{ + intrinsics.type_field_type(T, "handle") == Handle_Type { // The zero element represent a zero-value sentinel (dummy value), allowing for `idx == 0` to mean a no-handle. // This means the capacity is actually N-1 items. From f2a8960ab0e94a2e94d6ddce1959c0373e251d4e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 14:48:56 +0000 Subject: [PATCH 177/212] Add `Dynamic_Handle_Map` --- core/container/handle_map/doc.odin | 32 ++++ .../handle_map/dynamic_handle_map.odin | 142 ++++++++++++++++++ core/container/handle_map/handle_map.odin | 31 ---- 3 files changed, 174 insertions(+), 31 deletions(-) create mode 100644 core/container/handle_map/doc.odin create mode 100644 core/container/handle_map/dynamic_handle_map.odin diff --git a/core/container/handle_map/doc.odin b/core/container/handle_map/doc.odin new file mode 100644 index 000000000..e6ef0b344 --- /dev/null +++ b/core/container/handle_map/doc.odin @@ -0,0 +1,32 @@ +/* +Handle-based map using fixed-length arrays. + +Example: + import hm "core:container/handle_map" + + Handle :: hm.Handle32 + + Entity :: struct { + handle: Handle, + pos: [2]f32, + } + + entities: hm.Handle_Map(1024, Entity, Handle) + + h1 := hm.add(&entities, Entity{pos = {1, 4}}) + h2 := hm.add(&entities, Entity{pos = {9, 16}}) + + if e, ok := hm.get(&entities, h2); ok { + e.pos.x += 32 + } + + hm.remove(&entities, h1) + + h3 := hm.add(&entities, Entity{pos = {6, 7}}) + + it := hm.iterator_make(&entities) + for e, h in hm.iterate(&it) { + e.pos += {1, 2} + } +*/ +package container_handle_map \ No newline at end of file diff --git a/core/container/handle_map/dynamic_handle_map.odin b/core/container/handle_map/dynamic_handle_map.odin new file mode 100644 index 000000000..c754f2f25 --- /dev/null +++ b/core/container/handle_map/dynamic_handle_map.odin @@ -0,0 +1,142 @@ +package container_handle_map + +import "base:builtin" +import "base:runtime" +import "base:intrinsics" +import "core:container/xar" + + +Dynamic_Handle_Map :: struct($T: typeid, $Handle_Type: typeid) + where + intrinsics.type_has_field(Handle_Type, "idx"), + intrinsics.type_has_field(Handle_Type, "gen"), + intrinsics.type_is_unsigned(intrinsics.type_field_type(Handle_Type, "idx")), + intrinsics.type_is_unsigned(intrinsics.type_field_type(Handle_Type, "gen")), + intrinsics.type_field_type(Handle_Type, "idx") == intrinsics.type_field_type(Handle_Type, "gen"), + + intrinsics.type_has_field (T, "handle"), + intrinsics.type_field_type(T, "handle") == Handle_Type { + + items: xar.Array(T, 4), + unused_items: xar.Array(u32, 4), +} + +dynamic_init :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), allocator: runtime.Allocator) { + xar.init(&m.items, allocator) + xar.init(&m.unused_items, allocator) +} + +dynamic_destroy :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) { + xar.destroy(&m.unused_items) + xar.destroy(&m.items) +} + +@(require_results) +dynamic_add :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), item: T, loc := #caller_location) -> (handle: Handle_Type, err: runtime.Allocator_Error) { + if xar.len(m.unused_items) > 0 { + i := xar.pop(&m.unused_items) + ptr := xar.get_ptr(&m.items, i, loc) + prev_gen := ptr.handle.gen + ptr^ = item + + ptr.handle.idx = auto_cast i + ptr.handle.gen = auto_cast (prev_gen + 1) + return ptr.handle, nil + } + + if xar.len(m.items) == 0 { + // initialize the zero-value sentinel + xar.append(&m.items, T{}, loc) or_return + } + + i := xar.append(&m.items, item, loc) or_return + + ptr := xar.get_ptr(&m.items, i, loc) + ptr^ = item + + ptr.handle.idx = auto_cast i + ptr.handle.gen = 1 + return ptr.handle, nil +} + +@(require_results) +dynamic_get :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type) -> (^T, bool) #optional_ok { + if h.idx <= 0 || int(u32(h.idx)) >= xar.len(m.items) { + return nil, false + } + if e := xar.get_ptr(&m.items, h.idx); e.handle == h { + return e, true + } + return nil, false +} + +dynamic_remove :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type, loc := #caller_location) -> (found: bool, err: runtime.Allocator_Error) { + if h.idx <= 0 || int(u32(h.idx)) >= xar.len(m.items) { + return false, nil + } + + if item := xar.get_ptr(&m.items, h.idx); item.handle == h { + xar.append(&m.unused_items, u32(h.idx), loc) or_return + item.handle.idx = 0 + return true, nil + } + + return false, nil +} + +@(require_results) +dynamic_is_valid :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type, loc := #caller_location) -> bool { + return h.idx > 0 && int(u32(h.idx)) < xar.len(m.items) && xar.get(&m.items, h.idx, loc).handle == h +} + +// Returns the number of possibly valid items in the handle map. +@(require_results) +dynamic_len :: proc(m: $D/Dynamic_Handle_Map($T, $Handle_Type)) -> uint { + n := xar.len(m.items) - xar.len(m.unused_items) + return uint(n-1 if n > 0 else 0) +} + +@(require_results) +dynamic_cap :: proc(m: $D/Dynamic_Handle_Map($T, $Handle_Type)) -> uint { + n := xar.cap(m.items) + return uint(n-1 if n > 0 else 0) +} + +dynamic_clear :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) { + xar.clear(&m.items) + xar.clear(&m.unused_items) +} + + +// An iterator for a handle map. +Dynamic_Handle_Map_Iterator :: struct($D: typeid) { + m: ^D, + index: int, +} + +// Makes an iterator from a handle map. +@(require_results) +dynamic_iterator_make :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) -> Dynamic_Handle_Map_Iterator(D) { + return {m, 1} +} + +/* + Iterate over a handle map. It will skip over unused item slots (e.g. handle.idx == 0). + Usage: + it := hm.dynamic_iterator_make(&the_dynamic_handle_map) + for item, handle in hm.iterate(&it) { + ... + } +*/ +@(require_results) +dynamic_iterate :: proc(it: ^$DHI/Dynamic_Handle_Map_Iterator($D/Dynamic_Handle_Map($T, $Handle_Type))) -> (val: ^T, h: Handle_Type, ok: bool) { + for _ in it.index.. Date: Mon, 26 Jan 2026 14:53:01 +0000 Subject: [PATCH 178/212] Make things contextless where possible --- .../handle_map/dynamic_handle_map.odin | 24 +++++++++---------- core/container/xar/xar.odin | 15 ++++++++---- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/core/container/handle_map/dynamic_handle_map.odin b/core/container/handle_map/dynamic_handle_map.odin index c754f2f25..600f49c28 100644 --- a/core/container/handle_map/dynamic_handle_map.odin +++ b/core/container/handle_map/dynamic_handle_map.odin @@ -35,7 +35,7 @@ dynamic_destroy :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) { dynamic_add :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), item: T, loc := #caller_location) -> (handle: Handle_Type, err: runtime.Allocator_Error) { if xar.len(m.unused_items) > 0 { i := xar.pop(&m.unused_items) - ptr := xar.get_ptr(&m.items, i, loc) + ptr := xar.get_ptr_unsafe(&m.items, i) prev_gen := ptr.handle.gen ptr^ = item @@ -51,7 +51,7 @@ dynamic_add :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), item: T, loc := i := xar.append(&m.items, item, loc) or_return - ptr := xar.get_ptr(&m.items, i, loc) + ptr := xar.get_ptr_unsafe(&m.items, i) ptr^ = item ptr.handle.idx = auto_cast i @@ -60,11 +60,11 @@ dynamic_add :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), item: T, loc := } @(require_results) -dynamic_get :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type) -> (^T, bool) #optional_ok { +dynamic_get :: proc "contextless" (m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type) -> (^T, bool) #optional_ok { if h.idx <= 0 || int(u32(h.idx)) >= xar.len(m.items) { return nil, false } - if e := xar.get_ptr(&m.items, h.idx); e.handle == h { + if e := xar.get_ptr_unsafe(&m.items, h.idx); e.handle == h { return e, true } return nil, false @@ -85,24 +85,24 @@ dynamic_remove :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Ty } @(require_results) -dynamic_is_valid :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type, loc := #caller_location) -> bool { - return h.idx > 0 && int(u32(h.idx)) < xar.len(m.items) && xar.get(&m.items, h.idx, loc).handle == h +dynamic_is_valid :: proc "contextless" (m: ^$D/Dynamic_Handle_Map($T, $Handle_Type), h: Handle_Type) -> bool { + return h.idx > 0 && int(u32(h.idx)) < xar.len(m.items) && xar.get_ptr_unsafe(&m.items, h.idx).handle == h } // Returns the number of possibly valid items in the handle map. @(require_results) -dynamic_len :: proc(m: $D/Dynamic_Handle_Map($T, $Handle_Type)) -> uint { +dynamic_len :: proc "contextless" (m: $D/Dynamic_Handle_Map($T, $Handle_Type)) -> uint { n := xar.len(m.items) - xar.len(m.unused_items) return uint(n-1 if n > 0 else 0) } @(require_results) -dynamic_cap :: proc(m: $D/Dynamic_Handle_Map($T, $Handle_Type)) -> uint { +dynamic_cap :: proc "contextless" (m: $D/Dynamic_Handle_Map($T, $Handle_Type)) -> uint { n := xar.cap(m.items) return uint(n-1 if n > 0 else 0) } -dynamic_clear :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) { +dynamic_clear :: proc "contextless" (m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) { xar.clear(&m.items) xar.clear(&m.unused_items) } @@ -116,7 +116,7 @@ Dynamic_Handle_Map_Iterator :: struct($D: typeid) { // Makes an iterator from a handle map. @(require_results) -dynamic_iterator_make :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) -> Dynamic_Handle_Map_Iterator(D) { +dynamic_iterator_make :: proc "contextless" (m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) -> Dynamic_Handle_Map_Iterator(D) { return {m, 1} } @@ -129,9 +129,9 @@ dynamic_iterator_make :: proc(m: ^$D/Dynamic_Handle_Map($T, $Handle_Type)) -> Dy } */ @(require_results) -dynamic_iterate :: proc(it: ^$DHI/Dynamic_Handle_Map_Iterator($D/Dynamic_Handle_Map($T, $Handle_Type))) -> (val: ^T, h: Handle_Type, ok: bool) { +dynamic_iterate :: proc "contextless" (it: ^$DHI/Dynamic_Handle_Map_Iterator($D/Dynamic_Handle_Map($T, $Handle_Type))) -> (val: ^T, h: Handle_Type, ok: bool) { for _ in it.index.. int { +len :: proc "contextless" (x: $X/Array($T, $SHIFT)) -> int { return x.len } // Returns the number of allocated elements @(require_results) -cap :: proc(x: $X/Array($T, $SHIFT)) -> int { +cap :: proc "contextless" (x: $X/Array($T, $SHIFT)) -> int { #reverse for c, i in x.chunks { if c != nil { return 1 << (SHIFT + uint(i if i > 0 else 1)) @@ -132,7 +132,7 @@ cap :: proc(x: $X/Array($T, $SHIFT)) -> int { // Internal: computes chunk index, element index within chunk, and chunk capacity for a given index. @(require_results) -_meta_get :: #force_inline proc($SHIFT: uint, index: uint) -> (chunk_idx, elem_idx, chunk_cap: uint) { +_meta_get :: #force_inline proc "contextless" ($SHIFT: uint, index: uint) -> (chunk_idx, elem_idx, chunk_cap: uint) { elem_idx = index chunk_cap = uint(1) << SHIFT chunk_idx = 0 @@ -206,6 +206,13 @@ get_ptr :: proc(x: ^$X/Array($T, $SHIFT), #any_int index: int, loc := #caller_lo return &x.chunks[chunk_idx][elem_idx] } +// No bounds checking +@(require_results) +get_ptr_unsafe :: proc "contextless" (x: ^$X/Array($T, $SHIFT), #any_int index: int) -> (val: ^T) #no_bounds_check { + chunk_idx, elem_idx, _ := _meta_get(SHIFT, uint(index)) + return &x.chunks[chunk_idx][elem_idx] +} + /* Set the element at the specified index to the given value. From 25ecca7159c8cf1c63579ea796662357cd93d804 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 15:00:00 +0000 Subject: [PATCH 179/212] Rename to `Static_Handle_Map` --- core/container/handle_map/handle_map.odin | 71 +++++++++++++++++++---- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/core/container/handle_map/handle_map.odin b/core/container/handle_map/handle_map.odin index 485371d42..f308c5e95 100644 --- a/core/container/handle_map/handle_map.odin +++ b/core/container/handle_map/handle_map.odin @@ -21,7 +21,7 @@ Handle64 :: struct { gen: u32, } -Handle_Map :: struct($N: uint, $T: typeid, $Handle_Type: typeid) +Static_Handle_Map :: struct($N: uint, $T: typeid, $Handle_Type: typeid) where 0 < N, N < uint(1<<31 - 1), @@ -49,7 +49,7 @@ Handle_Map :: struct($N: uint, $T: typeid, $Handle_Type: typeid) // `add` a value of type `T` to the handle map. This will return a pointer to the item and an optional boolean to check for validity. @(require_results) -add :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), item: T) -> (handle: Handle_Type, ok: bool) #optional_ok { +static_add :: proc "contextless" (m: ^$H/Static_Handle_Map($N, $T, $Handle_Type), item: T) -> (handle: Handle_Type, ok: bool) #optional_ok { if i := m.next_unused; i != 0 { ptr := &m.items[i] @@ -86,7 +86,7 @@ add :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), item: T) -> // `get` a stable pointer of type `^T` by resolving the handle `h`. If the handle is not valid, then `nil, false` is returned. @(require_results) -get :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> (^T, bool) #optional_ok { +static_get :: proc "contextless" (m: ^$H/Static_Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> (^T, bool) #optional_ok { if h.idx <= 0 || u32(h.idx) >= m.used_len { return nil, false } @@ -97,7 +97,7 @@ get :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), h: Handle_Ty } // `remove` an item from the handle map from the handle `h`. -remove :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> bool { +static_remove :: proc "contextless" (m: ^$H/Static_Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> bool { if h.idx <= 0 || u32(h.idx) >= m.used_len { return false } @@ -115,13 +115,13 @@ remove :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type), h: Handle // Returns true when the handle `h` is valid relating to the handle map. @(require_results) -is_valid :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> bool { +static_is_valid :: proc "contextless" (m: $H/Static_Handle_Map($N, $T, $Handle_Type), h: Handle_Type) -> bool { return h.idx > 0 && u32(h.idx) < m.used_len && m.items[h.idx].handle == h } // Returns the number of possibly valid items in the handle map. @(require_results) -len :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type)) -> uint { +static_len :: proc "contextless" (m: $H/Static_Handle_Map($N, $T, $Handle_Type)) -> uint { n := uint(m.used_len) - uint(m.unused_len) return n-1 if n > 0 else 0 } @@ -129,26 +129,26 @@ len :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type)) -> uint { // Returns the capacity of the items in a handle map. // This is equivalent to `N-1` as the zero value is reserved for the zero-value sentinel. @(require_results) -cap :: proc "contextless" (m: $H/Handle_Map($N, $T, $Handle_Type)) -> uint { +static_cap :: proc "contextless" (m: $H/Static_Handle_Map($N, $T, $Handle_Type)) -> uint { // We could just return `N` but I am doing this for clarity return builtin.len(m.items)-1 } // `clear` the handle map by zeroing all of the memory. // Internally this does not do `m^ = {}` but rather uses `intrinsics.mem_zero` explicitly improve performance. -clear :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type)) { +static_clear :: proc "contextless" (m: ^$H/Static_Handle_Map($N, $T, $Handle_Type)) { intrinsics.mem_zero(m, size_of(m^)) } // An iterator for a handle map. -Handle_Map_Iterator :: struct($H: typeid) { +Static_Handle_Map_Iterator :: struct($H: typeid) { m: ^H, index: u32, } // Makes an iterator from a handle map. @(require_results) -iterator_make :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type)) -> Handle_Map_Iterator(H) { +static_iterator_make :: proc "contextless" (m: ^$H/Static_Handle_Map($N, $T, $Handle_Type)) -> Static_Handle_Map_Iterator(H) { return {m, 1} } @@ -161,7 +161,7 @@ iterator_make :: proc "contextless" (m: ^$H/Handle_Map($N, $T, $Handle_Type)) -> } */ @(require_results) -iterate :: proc "contextless" (it: ^$HI/Handle_Map_Iterator($H/Handle_Map($N, $T, $Handle_Type))) -> (val: ^T, h: Handle_Type, ok: bool) { +static_iterate :: proc "contextless" (it: ^$HI/Static_Handle_Map_Iterator($H/Static_Handle_Map($N, $T, $Handle_Type))) -> (val: ^T, h: Handle_Type, ok: bool) { for _ in it.index.. Date: Mon, 26 Jan 2026 15:00:15 +0000 Subject: [PATCH 180/212] Rename to static_handle_map.odin --- .../handle_map/{handle_map.odin => static_handle_map.odin} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename core/container/handle_map/{handle_map.odin => static_handle_map.odin} (100%) diff --git a/core/container/handle_map/handle_map.odin b/core/container/handle_map/static_handle_map.odin similarity index 100% rename from core/container/handle_map/handle_map.odin rename to core/container/handle_map/static_handle_map.odin From 9f206ba6d5fca31130a43e2ed167b6f898bf3a85 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 15:06:15 +0000 Subject: [PATCH 181/212] Keep `-vet` happy --- core/container/handle_map/dynamic_handle_map.odin | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/container/handle_map/dynamic_handle_map.odin b/core/container/handle_map/dynamic_handle_map.odin index 600f49c28..067212a54 100644 --- a/core/container/handle_map/dynamic_handle_map.odin +++ b/core/container/handle_map/dynamic_handle_map.odin @@ -1,10 +1,9 @@ package container_handle_map -import "base:builtin" import "base:runtime" +import "base:builtin" import "base:intrinsics" -import "core:container/xar" - +@(require) import "core:container/xar" Dynamic_Handle_Map :: struct($T: typeid, $Handle_Type: typeid) where From 2859bc08534d00fe8b8b30b55a08a795221d1620 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 15:11:07 +0000 Subject: [PATCH 182/212] Update doc.odin --- core/container/handle_map/doc.odin | 44 +++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/core/container/handle_map/doc.odin b/core/container/handle_map/doc.odin index e6ef0b344..c1949ffdd 100644 --- a/core/container/handle_map/doc.odin +++ b/core/container/handle_map/doc.odin @@ -11,22 +11,46 @@ Example: pos: [2]f32, } - entities: hm.Handle_Map(1024, Entity, Handle) + { // static map + entities: hm.Static_Handle_Map(1024, Entity, Handle) - h1 := hm.add(&entities, Entity{pos = {1, 4}}) - h2 := hm.add(&entities, Entity{pos = {9, 16}}) + h1 := hm.add(&entities, Entity{pos = {1, 4}}) + h2 := hm.add(&entities, Entity{pos = {9, 16}}) - if e, ok := hm.get(&entities, h2); ok { - e.pos.x += 32 + if e, ok := hm.get(&entities, h2); ok { + e.pos.x += 32 + } + + hm.remove(&entities, h1) + + h3 := hm.add(&entities, Entity{pos = {6, 7}}) + + it := hm.iterator_make(&entities) + for e, h in hm.iterate(&it) { + e.pos += {1, 2} + } } - hm.remove(&entities, h1) + { // dynamic map + entities: hm.Dynamic_Handle_Map(Entity, Handle) + hm.dynamic_init(&entities, context.allocator) + defer hm.dynamic_destroy(&entities) - h3 := hm.add(&entities, Entity{pos = {6, 7}}) + h1 := hm.add(&entities, Entity{pos = {1, 4}}) + h2 := hm.add(&entities, Entity{pos = {9, 16}}) - it := hm.iterator_make(&entities) - for e, h in hm.iterate(&it) { - e.pos += {1, 2} + if e, ok := hm.get(&entities, h2); ok { + e.pos.x += 32 + } + + hm.remove(&entities, h1) + + h3 := hm.add(&entities, Entity{pos = {6, 7}}) + + it := hm.iterator_make(&entities) + for e, h in hm.iterate(&it) { + e.pos += {1, 2} + } } */ package container_handle_map \ No newline at end of file From afe4369f6e1100fbacc0eb60a8d838dd0411850a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 15:37:54 +0000 Subject: [PATCH 183/212] Add `#+feature force-type-assert` which overrides `-no-type-assert` on a per-file basis --- src/build_settings.cpp | 8 +++++- src/llvm_backend_expr.cpp | 59 ++++++++++++++++++++++++++------------- 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/build_settings.cpp b/src/build_settings.cpp index 7d43788cd..e66d46713 100644 --- a/src/build_settings.cpp +++ b/src/build_settings.cpp @@ -360,12 +360,15 @@ enum OptInFeatureFlags : u64 { OptInFeatureFlag_IntegerDivisionByZero_Self = 1u<<4, OptInFeatureFlag_IntegerDivisionByZero_AllBits = 1u<<5, - OptInFeatureFlag_IntegerDivisionByZero_ALL = OptInFeatureFlag_IntegerDivisionByZero_Trap| OptInFeatureFlag_IntegerDivisionByZero_Zero| OptInFeatureFlag_IntegerDivisionByZero_Self| OptInFeatureFlag_IntegerDivisionByZero_AllBits, + OptInFeatureFlag_ForceTypeAssert = 1u<<6, + + + }; u64 get_feature_flag_from_name(String const &name) { @@ -384,6 +387,9 @@ u64 get_feature_flag_from_name(String const &name) { if (name == "integer-division-by-zero:all-bits") { return OptInFeatureFlag_IntegerDivisionByZero_AllBits; } + if (name == "force-type-assert") { + return OptInFeatureFlag_ForceTypeAssert; + } if (name == "global-context") { diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index dba61df44..59359942e 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -282,8 +282,7 @@ gb_internal lbValue lb_emit_unary_arith(lbProcedure *p, TokenKind op, lbValue x, return res; } - -gb_internal IntegerDivisionByZeroKind lb_check_for_integer_division_by_zero_behaviour(lbProcedure *p) { +gb_internal u64 lb_get_file_feature_flags(lbProcedure *p) { AstFile *file = nullptr; if (p->body && p->body->file()) { @@ -295,20 +294,29 @@ gb_internal IntegerDivisionByZeroKind lb_check_for_integer_division_by_zero_beha } if (file != nullptr && file->feature_flags_set) { - u64 flags = file->feature_flags; - if (flags & OptInFeatureFlag_IntegerDivisionByZero_Trap) { - return IntegerDivisionByZero_Trap; - } - if (flags & OptInFeatureFlag_IntegerDivisionByZero_Zero) { - return IntegerDivisionByZero_Zero; - } - if (flags & OptInFeatureFlag_IntegerDivisionByZero_Self) { - return IntegerDivisionByZero_Self; - } - if (flags & OptInFeatureFlag_IntegerDivisionByZero_AllBits) { - return IntegerDivisionByZero_AllBits; - } + return file->feature_flags; } + return 0; +} + + + +gb_internal IntegerDivisionByZeroKind lb_check_for_integer_division_by_zero_behaviour(lbProcedure *p) { + u64 flags = lb_get_file_feature_flags(p); + + if (flags & OptInFeatureFlag_IntegerDivisionByZero_Trap) { + return IntegerDivisionByZero_Trap; + } + if (flags & OptInFeatureFlag_IntegerDivisionByZero_Zero) { + return IntegerDivisionByZero_Zero; + } + if (flags & OptInFeatureFlag_IntegerDivisionByZero_Self) { + return IntegerDivisionByZero_Self; + } + if (flags & OptInFeatureFlag_IntegerDivisionByZero_AllBits) { + return IntegerDivisionByZero_AllBits; + } + return build_context.integer_division_by_zero_behaviour; } @@ -3802,6 +3810,17 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { Type *type = type_of_expr(ue_expr); GB_ASSERT(!is_type_tuple(type)); + bool do_type_check = true; + if (build_context.no_type_assert) { + u64 feature_flags = lb_get_file_feature_flags(p); + if ((feature_flags & OptInFeatureFlag_ForceTypeAssert) == 0) { + do_type_check = false; + } + + } else if ((p->state_flags & StateFlag_no_type_assert) != 0) { + do_type_check = false; + } + lbValue e = lb_build_expr(p, ta->expr); Type *t = type_deref(e.type); if (is_type_union(t)) { @@ -3813,7 +3832,7 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { Type *dst_type = type; - if (!build_context.no_type_assert && (p->state_flags & StateFlag_no_type_assert) == 0) { + if (do_type_check) { lbValue src_tag = {}; lbValue dst_tag = {}; if (is_type_union_maybe_pointer(src_type)) { @@ -3851,7 +3870,7 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { v = lb_emit_load(p, v); } lbValue data_ptr = lb_emit_struct_ev(p, v, 0); - if (!build_context.no_type_assert && (p->state_flags & StateFlag_no_type_assert) == 0) { + if (do_type_check) { GB_ASSERT(!build_context.no_rtti); lbValue any_id = lb_emit_struct_ev(p, v, 1); @@ -5313,7 +5332,8 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { if (cl->elems.count == 0) { break; } - GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); + u64 feature_flags = lb_get_file_feature_flags(p); + GB_ASSERT(feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); lbValue err = lb_dynamic_map_reserve(p, v.addr, 2*cl->elems.count, pos); gb_unused(err); @@ -5402,7 +5422,8 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { if (cl->elems.count == 0) { break; } - GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); + u64 feature_flags = lb_get_file_feature_flags(p); + GB_ASSERT(feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); Type *et = bt->DynamicArray.elem; lbValue size = lb_const_int(p->module, t_int, type_size_of(et)); From efdb89afcb893d9b405d517d00331082fcc849df Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 15:41:15 +0000 Subject: [PATCH 184/212] Revert dynamic literals feature check --- src/llvm_backend_expr.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 59359942e..c925ba2c9 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -5332,8 +5332,7 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { if (cl->elems.count == 0) { break; } - u64 feature_flags = lb_get_file_feature_flags(p); - GB_ASSERT(feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); + GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); lbValue err = lb_dynamic_map_reserve(p, v.addr, 2*cl->elems.count, pos); gb_unused(err); @@ -5422,8 +5421,7 @@ gb_internal lbAddr lb_build_addr_compound_lit(lbProcedure *p, Ast *expr) { if (cl->elems.count == 0) { break; } - u64 feature_flags = lb_get_file_feature_flags(p); - GB_ASSERT(feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); + GB_ASSERT(expr->file()->feature_flags & OptInFeatureFlag_DynamicLiterals || build_context.dynamic_literals); Type *et = bt->DynamicArray.elem; lbValue size = lb_const_int(p->module, t_int, type_size_of(et)); From 0774b7465fe0eb29c54af24e0375f80b776f42f6 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 15:51:38 +0000 Subject: [PATCH 185/212] Allow for shortcut to get feature flags from the expression directly assuming it as a file --- src/llvm_backend_expr.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index c925ba2c9..3c7092a32 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -282,10 +282,16 @@ gb_internal lbValue lb_emit_unary_arith(lbProcedure *p, TokenKind op, lbValue x, return res; } -gb_internal u64 lb_get_file_feature_flags(lbProcedure *p) { +gb_internal u64 lb_get_file_feature_flags(lbProcedure *p, Ast *expr = nullptr) { AstFile *file = nullptr; - if (p->body && p->body->file()) { + if (expr != nullptr) { + file = expr->file(); + } + + if (file != nullptr) { + // it is now set + } else if (p->body && p->body->file()) { file = p->body->file(); } else if (p->type_expr && p->type_expr->file()) { file = p->type_expr->file(); @@ -3812,7 +3818,7 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { bool do_type_check = true; if (build_context.no_type_assert) { - u64 feature_flags = lb_get_file_feature_flags(p); + u64 feature_flags = lb_get_file_feature_flags(p, ue_expr); if ((feature_flags & OptInFeatureFlag_ForceTypeAssert) == 0) { do_type_check = false; } From 3586bda6ae80b1dca1984ae54b023d5fec69067e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 18:23:29 +0000 Subject: [PATCH 186/212] Use `context.assertion_failure_proc` with type assertions when the `context` is available, otherwise use a trivial trap. --- base/runtime/error_checks.odin | 159 +++++++++++++--- base/runtime/print.odin | 331 +++++++++++++++++++++++++++++++++ src/check_expr.cpp | 16 +- src/llvm_backend_expr.cpp | 27 ++- src/llvm_backend_utility.cpp | 13 +- 5 files changed, 509 insertions(+), 37 deletions(-) diff --git a/base/runtime/error_checks.odin b/base/runtime/error_checks.odin index 32a895c3f..79245fc0c 100644 --- a/base/runtime/error_checks.odin +++ b/base/runtime/error_checks.odin @@ -137,7 +137,22 @@ matrix_bounds_check_error :: proc "contextless" (file: string, line, column: i32 when ODIN_NO_RTTI { - type_assertion_check :: proc "contextless" (ok: bool, file: string, line, column: i32) { + type_assertion_check_with_context :: proc "odin" (ok: bool, file: string, line, column: i32) { + if ok { + return + } + @(cold, no_instrumentation) + handle_error :: proc "odin" (file: string, line, column: i32) -> ! { + p := context.assertion_failure_proc + if p == nil { + p = default_assertion_failure_proc + } + p("type assertion", "Invalid type assertion", Source_Code_Location{file, line, column, ""}) + } + handle_error(file, line, column) + } + + type_assertion_check_contextless :: proc "contextless" (ok: bool, file: string, line, column: i32) { if ok { return } @@ -150,7 +165,7 @@ when ODIN_NO_RTTI { handle_error(file, line, column) } - type_assertion_check2 :: proc "contextless" (ok: bool, file: string, line, column: i32) { + type_assertion_check2_with_context :: proc "odin" (ok: bool, file: string, line, column: i32) { if ok { return } @@ -162,8 +177,53 @@ when ODIN_NO_RTTI { } handle_error(file, line, column) } + + type_assertion_check2_contextless :: proc "contextless" (ok: bool, file: string, line, column: i32) { + if ok { + return + } + @(cold, no_instrumentation) + handle_error :: proc "odin" (file: string, line, column: i32) -> ! { + p := context.assertion_failure_proc + if p == nil { + p = default_assertion_failure_proc + } + p("type assertion", "Invalid type assertion", Source_Code_Location{file, line, column, ""}) + } + handle_error(file, line, column) + } } else { - type_assertion_check :: proc "contextless" (ok: bool, file: string, line, column: i32, from, to: typeid) { + @(private="file") + TYPE_ASSERTION_BUFFER_SIZE :: 1024 + + type_assertion_check_with_context :: proc "odin" (ok: bool, file: string, line, column: i32, from, to: typeid) { + if ok { + return + } + @(cold, no_instrumentation) + handle_error :: proc "odin" (file: string, line, column: i32, from, to: typeid) -> ! { + do_msg :: proc "contextless" (i: ^int, buf: []byte, file: string, line, column: i32, from, to: typeid) -> bool { + try_copy_string(i, buf, "Invalid type assertion from ") or_return + try_copy_typeid(i, buf, from) or_return + try_copy_string(i, buf, " to ") or_return + try_copy_typeid(i, buf, to) or_return + return true + } + + buf: [TYPE_ASSERTION_BUFFER_SIZE]byte + i := 0 + _ = do_msg(&i, buf[:], file, line, column, from, to) + + p := context.assertion_failure_proc + if p == nil { + p = default_assertion_failure_proc + } + p("type assertion", string(buf[:i]), Source_Code_Location{file, line, column, ""}) + } + handle_error(file, line, column, from, to) + } + + type_assertion_check_contextless :: proc "contextless" (ok: bool, file: string, line, column: i32, from, to: typeid) { if ok { return } @@ -180,42 +240,85 @@ when ODIN_NO_RTTI { handle_error(file, line, column, from, to) } - type_assertion_check2 :: proc "contextless" (ok: bool, file: string, line, column: i32, from, to: typeid, from_data: rawptr) { + @(private="file") + type_assertion_variant_type :: proc "contextless" (id: typeid, data: rawptr) -> typeid { + if id == nil || data == nil { + return id + } + ti := type_info_base(type_info_of(id)) + #partial switch v in ti.variant { + case Type_Info_Any: + return (^any)(data).id + case Type_Info_Union: + if v.tag_type == nil { + if (^rawptr)(data)^ == nil { + return nil + } + return v.variants[0].id + + } + + tag_ptr := uintptr(data) + v.tag_offset + idx := 0 + switch v.tag_type.size { + case 1: idx = int( (^u8)(tag_ptr)^); if !v.no_nil { idx -= 1 } + case 2: idx = int( (^u16)(tag_ptr)^); if !v.no_nil { idx -= 1 } + case 4: idx = int( (^u32)(tag_ptr)^); if !v.no_nil { idx -= 1 } + case 8: idx = int( (^u64)(tag_ptr)^); if !v.no_nil { idx -= 1 } + case 16: idx = int((^u128)(tag_ptr)^); if !v.no_nil { idx -= 1 } + } + if idx < 0 { + return nil + } else if idx < len(v.variants) { + return v.variants[idx].id + } + } + return id + } + + type_assertion_check2_with_context :: proc "odin" (ok: bool, file: string, line, column: i32, from, to: typeid, from_data: rawptr) { if ok { return } - variant_type :: proc "contextless" (id: typeid, data: rawptr) -> typeid { - if id == nil || data == nil { - return id - } - ti := type_info_base(type_info_of(id)) - #partial switch v in ti.variant { - case Type_Info_Any: - return (^any)(data).id - case Type_Info_Union: - tag_ptr := uintptr(data) + v.tag_offset - idx := 0 - switch v.tag_type.size { - case 1: idx = int((^u8)(tag_ptr)^) - 1 - case 2: idx = int((^u16)(tag_ptr)^) - 1 - case 4: idx = int((^u32)(tag_ptr)^) - 1 - case 8: idx = int((^u64)(tag_ptr)^) - 1 - case 16: idx = int((^u128)(tag_ptr)^) - 1 - } - if idx < 0 { - return nil - } else if idx < len(v.variants) { - return v.variants[idx].id + @(cold, no_instrumentation) + handle_error :: proc "odin" (file: string, line, column: i32, from, to: typeid, from_data: rawptr) -> ! { + do_msg :: proc "contextless" (i: ^int, buf: []byte, file: string, line, column: i32, from, to, actual: typeid) -> bool { + try_copy_string(i, buf, "Invalid type assertion from ") or_return + try_copy_typeid(i, buf, from) or_return + try_copy_string(i, buf, " to ") or_return + try_copy_typeid(i, buf, to) or_return + if actual != from { + try_copy_string(i, buf, ", actual type: ") or_return + try_copy_typeid(i, buf, actual) or_return } + return true } - return id + + actual := type_assertion_variant_type(from, from_data) + + buf: [TYPE_ASSERTION_BUFFER_SIZE]byte + i := 0 + _ = do_msg(&i, buf[:], file, line, column, from, to, actual) + + p := context.assertion_failure_proc + if p == nil { + p = default_assertion_failure_proc + } + p("type assertion", string(buf[:i]), Source_Code_Location{file, line, column, ""}) + } + handle_error(file, line, column, from, to, from_data) + } + + type_assertion_check2_contextless :: proc "contextless" (ok: bool, file: string, line, column: i32, from, to: typeid, from_data: rawptr) { + if ok { + return } @(cold, no_instrumentation) handle_error :: proc "contextless" (file: string, line, column: i32, from, to: typeid, from_data: rawptr) -> ! { - actual := variant_type(from, from_data) + actual := type_assertion_variant_type(from, from_data) print_caller_location(Source_Code_Location{file, line, column, ""}) print_string(" Invalid type assertion from ") diff --git a/base/runtime/print.odin b/base/runtime/print.odin index 4ef142037..4a66f9743 100644 --- a/base/runtime/print.odin +++ b/base/runtime/print.odin @@ -502,3 +502,334 @@ print_type :: #force_no_inline proc "contextless" (ti: ^Type_Info) { print_type(info.elem) } } + + +@(require_results) +try_copy_string :: proc "contextless" (i: ^int, dst: []byte, src: string) -> bool { + if i^ < len(dst) { + i^ += copy(dst[i^:], src) + return true + } + return false +} + + +@(require_results) +try_copy_byte :: proc "contextless" (i: ^int, dst: []byte, src: byte) -> bool { + if i^ < len(dst) { + dst[i^] = src + i^ += 1 + return true + } + return false +} + + +@(require_results) +try_copy_u64 :: proc "contextless" (j: ^int, dst: []byte, x: u64) -> bool { + if j^ < len(dst) { + b :: u64(10) + u := x + + a: [129]byte + i := len(a) + for u >= b { + i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b] + u /= b + } + i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b] + + return try_copy_string(j, dst, string(a[i:])) + } + return false +} + + +@(require_results) +try_copy_caller_location :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, loc: Source_Code_Location) -> bool { + try_copy_string(i, buf, loc.file_path) or_return + + when ODIN_ERROR_POS_STYLE == .Default { + try_copy_byte(i, buf, '(') or_return + try_copy_u64(i, buf, u64(loc.line)) or_return + if loc.column != 0 { + try_copy_byte(i, buf, ':') or_return + try_copy_u64(i, buf, u64(loc.column)) or_return + } + try_copy_byte(i, buf, ')') or_return + return true + } else when ODIN_ERROR_POS_STYLE == .Unix { + try_copy_byte(i, buf, ':') or_return + try_copy_u64(i, buf, u64(loc.line)) or_return + if loc.column != 0 { + try_copy_try_copy_bytetring(i, buf, ':') or_return + try_copy_u64(i, buf, u64(loc.column)) or_return + } + try_copy_byte(i, buf, ':') or_return + return true + } else { + #panic("unhandled ODIN_ERROR_POS_STYLE") + } +} + +@(require_results) +try_copy_typeid :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, id: typeid) -> bool { + when ODIN_NO_RTTI { + if id == nil { + try_copy_string(i, buf, "nil") or_return + } else { + try_copy_string(i, buf, "") or_return + } + } else { + if id == nil { + try_copy_string(i, buf, "nil") or_return + } else { + ti := type_info_of(id) + try_copy_write_type(i, buf, ti) or_return + } + } + return true +} + +@(optimization_mode="favor_size") +try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, ti: ^Type_Info) -> bool { + if ti == nil { + try_copy_string(i, buf, "nil") or_return + return true + } + + switch info in ti.variant { + case Type_Info_Named: + try_copy_string(i, buf, info.name) or_return + case Type_Info_Integer: + switch ti.id { + case int: try_copy_string(i, buf, "int") or_return + case uint: try_copy_string(i, buf, "uint") or_return + case uintptr: try_copy_string(i, buf, "uintptr") or_return + case: + try_copy_byte(i, buf, 'i' if info.signed else 'u') or_return + try_copy_u64(i, buf, u64(8*ti.size)) or_return + } + case Type_Info_Rune: + try_copy_string(i, buf, "rune") or_return + case Type_Info_Float: + try_copy_byte(i, buf, 'f') or_return + try_copy_u64(i, buf, u64(8*ti.size)) or_return + case Type_Info_Complex: + try_copy_string(i, buf, "complex") or_return + try_copy_u64(i, buf, u64(8*ti.size)) or_return + case Type_Info_Quaternion: + try_copy_string(i, buf, "quaternion") or_return + try_copy_u64(i, buf, u64(8*ti.size)) or_return + case Type_Info_String: + if info.is_cstring { + try_copy_byte(i, buf, 'c') or_return + } + try_copy_string(i, buf, "string") or_return + switch info.encoding { + case .UTF_8: /**/ + case .UTF_16: try_copy_string(i, buf, "16") or_return + } + case Type_Info_Boolean: + switch ti.id { + case bool: try_copy_string(i, buf, "bool") or_return + case: + try_copy_byte(i, buf, 'b') or_return + try_copy_u64(i, buf, u64(8*ti.size)) or_return + } + case Type_Info_Any: + try_copy_string(i, buf, "any") or_return + case Type_Info_Type_Id: + try_copy_string(i, buf, "typeid") or_return + + case Type_Info_Pointer: + if info.elem == nil { + try_copy_string(i, buf, "rawptr") or_return + } else { + try_copy_string(i, buf, "^") or_return + try_copy_write_type(i, buf, info.elem) or_return + } + case Type_Info_Multi_Pointer: + try_copy_string(i, buf, "[^]") or_return + try_copy_write_type(i, buf, info.elem) or_return + case Type_Info_Soa_Pointer: + try_copy_string(i, buf, "#soa ^") or_return + try_copy_write_type(i, buf, info.elem) or_return + case Type_Info_Procedure: + try_copy_string(i, buf, "proc") or_return + if info.params == nil { + try_copy_string(i, buf, "()") or_return + } else { + t := info.params.variant.(Type_Info_Parameters) + try_copy_byte(i, buf, '(') or_return + for t, j in t.types { + if j > 0 { try_copy_string(i, buf, ", ") or_return } + try_copy_write_type(i, buf, t) or_return + } + try_copy_string(i, buf, ")") or_return + } + if info.results != nil { + try_copy_string(i, buf, " -> ") or_return + try_copy_write_type(i, buf, info.results) or_return + } + case Type_Info_Parameters: + count := len(info.names) + if count != 1 { try_copy_byte(i, buf, '(') or_return } + for name, j in info.names { + if j > 0 { try_copy_string(i, buf, ", ") or_return } + + t := info.types[j] + + if len(name) > 0 { + try_copy_string(i, buf, name) or_return + try_copy_string(i, buf, ": ") or_return + } + try_copy_write_type(i, buf, t) or_return + } + if count != 1 { try_copy_string(i, buf, ")") or_return } + + case Type_Info_Array: + try_copy_byte(i, buf, '[') or_return + try_copy_u64(i, buf, u64(info.count)) or_return + try_copy_byte(i, buf, ']') or_return + try_copy_write_type(i, buf, info.elem) or_return + + case Type_Info_Enumerated_Array: + if info.is_sparse { + try_copy_string(i, buf, "#sparse") or_return + } + try_copy_byte(i, buf, '[') or_return + try_copy_write_type(i, buf, info.index) or_return + try_copy_byte(i, buf, ']') or_return + try_copy_write_type(i, buf, info.elem) or_return + + + case Type_Info_Dynamic_Array: + try_copy_string(i, buf, "[dynamic]") or_return + try_copy_write_type(i, buf, info.elem) or_return + case Type_Info_Slice: + try_copy_string(i, buf, "[]") or_return + try_copy_write_type(i, buf, info.elem) or_return + + case Type_Info_Map: + try_copy_string(i, buf, "map[") or_return + try_copy_write_type(i, buf, info.key) or_return + try_copy_byte(i, buf, ']') or_return + try_copy_write_type(i, buf, info.value) or_return + + case Type_Info_Struct: + switch info.soa_kind { + case .None: // Ignore + case .Fixed: + try_copy_string(i, buf, "#soa[") or_return + try_copy_u64(i, buf, u64(info.soa_len)) or_return + try_copy_byte(i, buf, ']') or_return + try_copy_write_type(i, buf, info.soa_base_type) or_return + return true + case .Slice: + try_copy_string(i, buf, "#soa[]") or_return + try_copy_write_type(i, buf, info.soa_base_type) or_return + return true + case .Dynamic: + try_copy_string(i, buf, "#soa[dynamic]") or_return + try_copy_write_type(i, buf, info.soa_base_type) or_return + return true + } + + try_copy_string(i, buf, "struct ") or_return + if .packed in info.flags { try_copy_string(i, buf, "#packed ") or_return } + if .raw_union in info.flags { try_copy_string(i, buf, "#raw_union ") or_return } + if .all_or_none in info.flags { try_copy_string(i, buf, "#all_or_none ") or_return } + if .align in info.flags { + try_copy_string(i, buf, "#align(") or_return + try_copy_u64(i, buf, u64(ti.align)) or_return + try_copy_string(i, buf, ") ") or_return + } + try_copy_byte(i, buf, '{') or_return + for name, j in info.names[:info.field_count] { + if j > 0 { try_copy_string(i, buf, ", ") or_return } + try_copy_string(i, buf, name) or_return + try_copy_string(i, buf, ": ") or_return + try_copy_write_type(i, buf, info.types[j]) or_return + } + try_copy_byte(i, buf, '}') or_return + + case Type_Info_Union: + try_copy_string(i, buf, "union ") or_return + if info.custom_align { + try_copy_string(i, buf, "#align(") or_return + try_copy_u64(i, buf, u64(ti.align)) or_return + try_copy_string(i, buf, ") ") or_return + } + if info.no_nil { + try_copy_string(i, buf, "#no_nil ") or_return + } + try_copy_byte(i, buf, '{') or_return + for variant, j in info.variants { + if j > 0 { try_copy_string(i, buf, ", ") or_return } + try_copy_write_type(i, buf, variant) or_return + } + try_copy_string(i, buf, "}") or_return + + case Type_Info_Enum: + try_copy_string(i, buf, "enum ") or_return + try_copy_write_type(i, buf, info.base) or_return + try_copy_string(i, buf, " {") or_return + for name, j in info.names { + if j > 0 { try_copy_string(i, buf, ", ") or_return } + try_copy_string(i, buf, name) or_return + } + try_copy_string(i, buf, "}") or_return + + case Type_Info_Bit_Set: + try_copy_string(i, buf, "bit_set[") or_return + + #partial switch elem in type_info_base(info.elem).variant { + case Type_Info_Enum: + try_copy_write_type(i, buf, info.elem) or_return + case Type_Info_Rune: + print_encoded_rune(rune(info.lower)) + try_copy_string(i, buf, "..") or_return + print_encoded_rune(rune(info.upper)) + case: + print_i64(info.lower) + try_copy_string(i, buf, "..") or_return + print_i64(info.upper) + } + if info.underlying != nil { + try_copy_string(i, buf, "; ") or_return + try_copy_write_type(i, buf, info.underlying) or_return + } + try_copy_byte(i, buf, ']') or_return + + case Type_Info_Bit_Field: + try_copy_string(i, buf, "bit_field ") or_return + try_copy_write_type(i, buf, info.backing_type) or_return + try_copy_string(i, buf, " {") or_return + for name, j in info.names[:info.field_count] { + if j > 0 { try_copy_string(i, buf, ", ") or_return } + try_copy_string(i, buf, name) or_return + try_copy_string(i, buf, ": ") or_return + try_copy_write_type(i, buf, info.types[j]) or_return + try_copy_string(i, buf, " | ") or_return + try_copy_u64(i, buf, u64(info.bit_sizes[j])) or_return + } + try_copy_byte(i, buf, '}') or_return + + + case Type_Info_Simd_Vector: + try_copy_string(i, buf, "#simd[") or_return + try_copy_u64(i, buf, u64(info.count)) or_return + try_copy_byte(i, buf, ']') or_return + try_copy_write_type(i, buf, info.elem) or_return + + case Type_Info_Matrix: + try_copy_string(i, buf, "matrix[") or_return + try_copy_u64(i, buf, u64(info.row_count)) or_return + try_copy_string(i, buf, ", ") or_return + try_copy_u64(i, buf, u64(info.column_count)) or_return + try_copy_string(i, buf, "]") or_return + try_copy_write_type(i, buf, info.elem) or_return + } + return true +} \ No newline at end of file diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 42a398597..7d2240fdf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -11064,8 +11064,20 @@ gb_internal ExprKind check_type_assertion(CheckerContext *c, Operand *o, Ast *no end:; if ((c->state_flags & StateFlag_no_type_assert) == 0) { - add_package_dependency(c, "runtime", "type_assertion_check"); - add_package_dependency(c, "runtime", "type_assertion_check2"); + bool has_context = true; + if (c->proc_name.len == 0 && c->curr_proc_sig == nullptr) { + has_context = false; + } else if ((c->scope->flags & ScopeFlag_ContextDefined) == 0) { + has_context = false; + } + + if (has_context) { + add_package_dependency(c, "runtime", "type_assertion_check_with_context"); + add_package_dependency(c, "runtime", "type_assertion_check2_with_context"); + } else { + add_package_dependency(c, "runtime", "type_assertion_check_contextless"); + add_package_dependency(c, "runtime", "type_assertion_check2_contextless"); + } } return kind; } diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index 3c7092a32..aba196af8 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -3865,7 +3865,12 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { args[4] = lb_typeid(p->module, src_type); args[5] = lb_typeid(p->module, dst_type); } - lb_emit_runtime_call(p, "type_assertion_check", args); + + char const *name = "type_assertion_check_contextless"; + if (p->context_stack.count > 0) { + name = "type_assertion_check_with_context"; + } + lb_emit_runtime_call(p, name, args); } lbValue data_ptr = v; @@ -3881,16 +3886,28 @@ gb_internal lbValue lb_build_unary_and(lbProcedure *p, Ast *expr) { lbValue any_id = lb_emit_struct_ev(p, v, 1); + isize arg_count = 6; + if (build_context.no_rtti) { + arg_count = 4; + } + lbValue id = lb_typeid(p->module, type); lbValue ok = lb_emit_comp(p, Token_CmpEq, any_id, id); - auto args = array_make(permanent_allocator(), 6); + auto args = array_make(permanent_allocator(), arg_count); args[0] = ok; lb_set_file_line_col(p, array_slice(args, 1, args.count), pos); - args[4] = any_id; - args[5] = id; - lb_emit_runtime_call(p, "type_assertion_check", args); + if (!build_context.no_rtti) { + args[4] = any_id; + args[5] = id; + } + + char const *name = "type_assertion_check_contextless"; + if (p->context_stack.count > 0) { + name = "type_assertion_check_with_context"; + } + lb_emit_runtime_call(p, name, args); } return lb_emit_conv(p, data_ptr, tv.type); diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index 43cac70c1..929239486 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -803,7 +803,12 @@ gb_internal lbValue lb_emit_union_cast(lbProcedure *p, lbValue value, Type *type args[5] = lb_typeid(m, dst_type); args[6] = lb_emit_conv(p, value_, t_rawptr); } - lb_emit_runtime_call(p, "type_assertion_check2", args); + + char const *name = "type_assertion_check2_contextless"; + if (p->context_stack.count > 0) { + name = "type_assertion_check2_with_context"; + } + lb_emit_runtime_call(p, name, args); } return lb_emit_load(p, lb_emit_struct_ep(p, v.addr, 0)); @@ -877,7 +882,11 @@ gb_internal lbAddr lb_emit_any_cast_addr(lbProcedure *p, lbValue value, Type *ty args[5] = dst_typeid; args[6] = lb_emit_struct_ev(p, value, 0); } - lb_emit_runtime_call(p, "type_assertion_check2", args); + char const *name = "type_assertion_check2_contextless"; + if (p->context_stack.count > 0) { + name = "type_assertion_check2_with_context"; + } + lb_emit_runtime_call(p, name, args); } return lb_addr(lb_emit_struct_ep(p, v.addr, 0)); From 96f1069e4a615e0857d9443fe5af639e3b2dd46a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 18:29:39 +0000 Subject: [PATCH 187/212] Fix `type_assertion_check2*` for `-no-rtti` --- base/runtime/error_checks.odin | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/base/runtime/error_checks.odin b/base/runtime/error_checks.odin index 79245fc0c..34f51ab8e 100644 --- a/base/runtime/error_checks.odin +++ b/base/runtime/error_checks.odin @@ -170,11 +170,14 @@ when ODIN_NO_RTTI { return } @(cold, no_instrumentation) - handle_error :: proc "contextless" (file: string, line, column: i32) -> ! { - print_caller_location(Source_Code_Location{file, line, column, ""}) - print_string(" Invalid type assertion\n") - type_assertion_trap() + handle_error :: proc "odin" (file: string, line, column: i32) -> ! { + p := context.assertion_failure_proc + if p == nil { + p = default_assertion_failure_proc + } + p("type assertion", "Invalid type assertion", Source_Code_Location{file, line, column, ""}) } + handle_error(file, line, column) } @@ -183,12 +186,10 @@ when ODIN_NO_RTTI { return } @(cold, no_instrumentation) - handle_error :: proc "odin" (file: string, line, column: i32) -> ! { - p := context.assertion_failure_proc - if p == nil { - p = default_assertion_failure_proc - } - p("type assertion", "Invalid type assertion", Source_Code_Location{file, line, column, ""}) + handle_error :: proc "contextless" (file: string, line, column: i32) -> ! { + print_caller_location(Source_Code_Location{file, line, column, ""}) + print_string(" Invalid type assertion\n") + type_assertion_trap() } handle_error(file, line, column) } From b85f29d979ffbeb044bba644d43dd2e462a63008 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 18:31:04 +0000 Subject: [PATCH 188/212] Rename to `type_assertion_trap_contextless` --- base/runtime/error_checks.odin | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/base/runtime/error_checks.odin b/base/runtime/error_checks.odin index 34f51ab8e..df6cb9485 100644 --- a/base/runtime/error_checks.odin +++ b/base/runtime/error_checks.odin @@ -12,7 +12,7 @@ bounds_trap :: proc "contextless" () -> ! { } @(no_instrumentation) -type_assertion_trap :: proc "contextless" () -> ! { +type_assertion_trap_contextless :: proc "contextless" () -> ! { when ODIN_OS == .Windows { windows_trap_type_assertion() } else when ODIN_OS == .Orca { @@ -160,7 +160,7 @@ when ODIN_NO_RTTI { handle_error :: proc "contextless" (file: string, line, column: i32) -> ! { print_caller_location(Source_Code_Location{file, line, column, ""}) print_string(" Invalid type assertion\n") - type_assertion_trap() + type_assertion_trap_contextless() } handle_error(file, line, column) } @@ -189,7 +189,7 @@ when ODIN_NO_RTTI { handle_error :: proc "contextless" (file: string, line, column: i32) -> ! { print_caller_location(Source_Code_Location{file, line, column, ""}) print_string(" Invalid type assertion\n") - type_assertion_trap() + type_assertion_trap_contextless() } handle_error(file, line, column) } @@ -236,7 +236,7 @@ when ODIN_NO_RTTI { print_string(" to ") print_typeid(to) print_byte('\n') - type_assertion_trap() + type_assertion_trap_contextless() } handle_error(file, line, column, from, to) } @@ -331,7 +331,7 @@ when ODIN_NO_RTTI { print_typeid(actual) } print_byte('\n') - type_assertion_trap() + type_assertion_trap_contextless() } handle_error(file, line, column, from, to, from_data) } From 27bd72c18a0c4ff36e8464df0232263a93a5372e Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 19:15:40 +0000 Subject: [PATCH 189/212] Fix constant indexing within a call that doesn't exist --- src/check_expr.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 7d2240fdf..46455aacf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -5192,6 +5192,11 @@ gb_internal ExactValue get_constant_field_single(CheckerContext *c, ExactValue v } } else { TypeAndValue index_tav = fv->field->tav; + if (index_tav.mode != Addressing_Constant) { + if (success_) *success_ = false; + if (finish_) *finish_ = true; + return empty_exact_value; + } GB_ASSERT(index_tav.mode == Addressing_Constant); ExactValue index_value = index_tav.value; if (is_type_enumerated_array(node->tav.type)) { From 7bdd0a80caed77ea27907b380788b6e764b81364 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Mon, 26 Jan 2026 19:31:37 +0000 Subject: [PATCH 190/212] Allow for `CONSTANT_TYPEID_ARRAY[idx]` to be used as a type in certain contexts --- src/check_type.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/check_type.cpp b/src/check_type.cpp index af07efd8f..4b8f7b6ac 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -3750,6 +3750,20 @@ gb_internal bool check_type_internal(CheckerContext *ctx, Ast *e, Type **type, T set_base_type(named_type, *type); return true; case_end; + + default: { + Operand o = {}; + check_expr_base(ctx, &o, e, nullptr); + + if (o.mode == Addressing_Constant && + o.value.kind == ExactValue_Typeid) { + Type *t = o.value.value_typeid; + if (t != nullptr && t != t_invalid) { + *type = t; + return true; + } + } + } } *type = t_invalid; From f4008e9c9db4070198270a4b203c00df174462f0 Mon Sep 17 00:00:00 2001 From: Jim Date: Mon, 26 Jan 2026 23:33:17 -0800 Subject: [PATCH 191/212] Fix issue #6176 Update RenderTextureRotated to accept a nil pointer for center point parameter --- vendor/sdl3/sdl3_render.odin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/sdl3/sdl3_render.odin b/vendor/sdl3/sdl3_render.odin index 9b2d4efd4..51abbf777 100644 --- a/vendor/sdl3/sdl3_render.odin +++ b/vendor/sdl3/sdl3_render.odin @@ -235,7 +235,7 @@ foreign lib { RenderFillRect :: proc(renderer: ^Renderer, rect: Maybe(^FRect)) -> bool --- RenderFillRects :: proc(renderer: ^Renderer, rects: [^]FRect, count: c.int) -> bool --- RenderTexture :: proc(renderer: ^Renderer, texture: ^Texture, srcrect, dstrect: Maybe(^FRect)) -> bool --- - RenderTextureRotated :: proc(renderer: ^Renderer, texture: ^Texture, srcrect, dstrect: Maybe(^FRect), angle: f64, #by_ptr center: FPoint, flip: FlipMode) -> bool --- + RenderTextureRotated :: proc(renderer: ^Renderer, texture: ^Texture, srcrect, dstrect: Maybe(^FRect), angle: f64, center: Maybe(^FPoint), flip: FlipMode) -> bool --- RenderTextureAffine :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), origin, right, down: Maybe(^FPoint)) -> bool --- RenderTextureTiled :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), scale: f32, dstrect: Maybe(^FRect)) -> bool --- RenderTexture9Grid :: proc(renderer: ^Renderer, texture: ^Texture, srcrect: Maybe(^FRect), left_width, right_width, top_height, bottom_height: f32, scale: f32, dstrect: Maybe(^FRect)) -> bool --- From 92bef4578100e1bd4ca2e2ab9479216d8efcf2d3 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 27 Jan 2026 09:44:52 +0000 Subject: [PATCH 192/212] Fix #6183 --- src/check_builtin.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/check_builtin.cpp b/src/check_builtin.cpp index 929891826..e732d8ec3 100644 --- a/src/check_builtin.cpp +++ b/src/check_builtin.cpp @@ -5383,6 +5383,14 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As return false; } } + if (!are_types_identical(x.type, y.type)) { + gbString xts = type_to_string(x.type); + gbString yts = type_to_string(y.type); + error(x.expr, "Mismatched types for '%.*s', got %s vs %s", LIT(builtin_name), xts, yts); + gb_string_free(yts); + gb_string_free(xts); + return false; + } operand->mode = Addressing_Value; operand->type = make_optional_ok_type(default_type(x.type)); @@ -5426,6 +5434,14 @@ gb_internal bool check_builtin_procedure(CheckerContext *c, Operand *operand, As return false; } } + if (!are_types_identical(x.type, y.type)) { + gbString xts = type_to_string(x.type); + gbString yts = type_to_string(y.type); + error(x.expr, "Mismatched types for '%.*s', got %s vs %s", LIT(builtin_name), xts, yts); + gb_string_free(yts); + gb_string_free(xts); + return false; + } operand->mode = Addressing_Value; operand->type = default_type(x.type); From 9084d7e99b5679ba25c3dcc0f5f859939b76cc5d Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 27 Jan 2026 12:27:35 +0000 Subject: [PATCH 193/212] Fix #6173 --- core/sys/linux/bits.odin | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/core/sys/linux/bits.odin b/core/sys/linux/bits.odin index 2ca7558a2..9ce352bf6 100644 --- a/core/sys/linux/bits.odin +++ b/core/sys/linux/bits.odin @@ -449,7 +449,7 @@ FLock_Type :: enum i16 { /* Bits for FD_Notifications */ -FD_Notifications_Bits :: enum { +FD_Notifications_Bits :: enum i32 { ACCESS = 0, MODIFY = 1, CREATE = 2, @@ -1690,17 +1690,17 @@ IPC_Cmd :: enum i16 { /* File locking operation bits */ -FLock_Op_Bits :: enum { - SH = 1, - EX = 2, - NB = 4, - UN = 8, +FLock_Op_Bits :: enum i32 { + SH = 0, + EX = 1, + NB = 2, + UN = 3, } /* ptrace requests */ -PTrace_Request :: enum { +PTrace_Request :: enum i32 { TRACEME = 0, PEEKTEXT = 1, PEEKDATA = 2, @@ -1747,7 +1747,7 @@ PTrace_Request :: enum { /* ptrace options */ -PTrace_Options_Bits :: enum { +PTrace_Options_Bits :: enum i32 { TRACESYSGOOD = 0, TRACEFORK = 1, TRACEVFORK = 2, From 22ef6ae8c616ffdb2ce980dbbcc3f9eb3f9b3ff9 Mon Sep 17 00:00:00 2001 From: Leo Zurbriggen Date: Tue, 27 Jan 2026 18:11:09 +0100 Subject: [PATCH 194/212] add windows.ReadDirectoryChangesExW --- core/sys/windows/kernel32.odin | 11 +++++++++++ core/sys/windows/types.odin | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/core/sys/windows/kernel32.odin b/core/sys/windows/kernel32.odin index 07f34bed2..0309ff16f 100644 --- a/core/sys/windows/kernel32.odin +++ b/core/sys/windows/kernel32.odin @@ -474,6 +474,17 @@ foreign kernel32 { lpOverlapped: LPOVERLAPPED, lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, ) -> BOOL --- + ReadDirectoryChangesExW :: proc( + hDirectory: HANDLE, + lpBuffer: LPVOID, + nBufferLength: DWORD, + bWatchSubtree: BOOL, + dwNotifyFilter: DWORD, + lpBytesReturned: LPDWORD, + lpOverlapped: LPOVERLAPPED, + lpCompletionRoutine: LPOVERLAPPED_COMPLETION_ROUTINE, + ReadDirectoryNotifyInformationClass: READ_DIRECTORY_NOTIFY_INFORMATION_CLASS, + ) -> BOOL --- FindFirstChangeNotificationW :: proc( lpPathName: LPWSTR, bWatchSubtree: BOOL, diff --git a/core/sys/windows/types.odin b/core/sys/windows/types.odin index f3f581844..f9e9764e2 100644 --- a/core/sys/windows/types.odin +++ b/core/sys/windows/types.odin @@ -3176,6 +3176,13 @@ LPOVERLAPPED_COMPLETION_ROUTINE :: #type proc "system" ( lpOverlapped: LPOVERLAPPED, ) +READ_DIRECTORY_NOTIFY_INFORMATION_CLASS :: enum c_int { + ReadDirectoryNotifyInformation = 1, + ReadDirectoryNotifyExtendedInformation, + ReadDirectoryNotifyFullInformation, + ReadDirectoryNotifyMaximumInformation, +} + ADDRESS_MODE :: enum c_int { AddrMode1616, AddrMode1632, From 117e74cb8b74b3eec567e16533cc269bd873bd89 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 11:43:29 +0000 Subject: [PATCH 195/212] Fix typo in `try_copy_caller_location` --- base/runtime/print.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/runtime/print.odin b/base/runtime/print.odin index 4a66f9743..c1b04f7cd 100644 --- a/base/runtime/print.odin +++ b/base/runtime/print.odin @@ -562,8 +562,8 @@ try_copy_caller_location :: #force_no_inline proc "contextless" (i: ^int, buf: [ try_copy_byte(i, buf, ':') or_return try_copy_u64(i, buf, u64(loc.line)) or_return if loc.column != 0 { - try_copy_try_copy_bytetring(i, buf, ':') or_return - try_copy_u64(i, buf, u64(loc.column)) or_return + try_copy_byte(i, buf, ':') or_return + try_copy_u64 (i, buf, u64(loc.column)) or_return } try_copy_byte(i, buf, ':') or_return return true From 0d8b1481eaf2d0e2eaa12320da52397a41f285aa Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 11:53:40 +0000 Subject: [PATCH 196/212] Improve `try_copy_*` logic --- base/runtime/print.odin | 246 ++++++++++++++++++++++++++++------------ 1 file changed, 172 insertions(+), 74 deletions(-) diff --git a/base/runtime/print.odin b/base/runtime/print.odin index c1b04f7cd..cc51394c8 100644 --- a/base/runtime/print.odin +++ b/base/runtime/print.odin @@ -280,11 +280,22 @@ print_type :: #force_no_inline proc "contextless" (ti: ^Type_Info) { print_byte('i' if info.signed else 'u') print_u64(u64(8*ti.size)) } + switch info.endianness { + case .Platform: // nothing + case .Little: print_string("le") + case .Big: print_string("be") + } + case Type_Info_Rune: print_string("rune") case Type_Info_Float: print_byte('f') print_u64(u64(8*ti.size)) + switch info.endianness { + case .Platform: // nothing + case .Little: print_string("le") + case .Big: print_string("be") + } case Type_Info_Complex: print_string("complex") print_u64(u64(8*ti.size)) @@ -494,6 +505,9 @@ print_type :: #force_no_inline proc "contextless" (ti: ^Type_Info) { print_type(info.elem) case Type_Info_Matrix: + if info.layout == .Row_Major { + print_string("#row_major ") + } print_string("matrix[") print_u64(u64(info.row_count)) print_string(", ") @@ -544,25 +558,48 @@ try_copy_u64 :: proc "contextless" (j: ^int, dst: []byte, x: u64) -> bool { return false } +@(require_results) +try_copy_i64 :: proc "contextless" (j: ^int, dst: []byte, x: i64) -> bool { + if j^ < len(dst) { + b :: u64(10) + u := u64(abs(x)) + neg := x < 0 + + a: [129]byte + i := len(a) + for u >= b { + i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b] + u /= b + } + i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b] + if neg { + i -= 1; a[i] = '-' + } + + return try_copy_string(j, dst, string(a[i:])) + } + return false +} + @(require_results) try_copy_caller_location :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, loc: Source_Code_Location) -> bool { try_copy_string(i, buf, loc.file_path) or_return when ODIN_ERROR_POS_STYLE == .Default { - try_copy_byte(i, buf, '(') or_return - try_copy_u64(i, buf, u64(loc.line)) or_return + try_copy_byte(i, buf, '(') or_return + try_copy_u64 (i, buf, u64(loc.line)) or_return if loc.column != 0 { - try_copy_byte(i, buf, ':') or_return - try_copy_u64(i, buf, u64(loc.column)) or_return + try_copy_byte(i, buf, ':') or_return + try_copy_u64 (i, buf, u64(loc.column)) or_return } try_copy_byte(i, buf, ')') or_return return true } else when ODIN_ERROR_POS_STYLE == .Unix { - try_copy_byte(i, buf, ':') or_return - try_copy_u64(i, buf, u64(loc.line)) or_return + try_copy_byte(i, buf, ':') or_return + try_copy_u64 (i, buf, u64(loc.line)) or_return if loc.column != 0 { - try_copy_byte(i, buf, ':') or_return + try_copy_byte(i, buf, ':') or_return try_copy_u64 (i, buf, u64(loc.column)) or_return } try_copy_byte(i, buf, ':') or_return @@ -591,6 +628,52 @@ try_copy_typeid :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, id return true } + +@(require_results) +try_copy_rune :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, r: rune) -> (written: int, ok: bool) #no_bounds_check { + RUNE_SELF :: 0x80 + + if r < RUNE_SELF { + try_copy_byte(i, buf,byte(r)) or_return + return 1, true + } + + b, n := encode_rune(r) + prev := i^ + try_copy_string(i, buf, string(b[:n])) or_return + return i^ - prev, true +} + +@(require_results) +try_copy_encoded_rune :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, r: rune) -> bool { + try_copy_byte(i, buf, '\'') or_return + + switch r { + case '\a': try_copy_string(i, buf, "\\a") or_return + case '\b': try_copy_string(i, buf, "\\b") or_return + case '\e': try_copy_string(i, buf, "\\e") or_return + case '\f': try_copy_string(i, buf, "\\f") or_return + case '\n': try_copy_string(i, buf, "\\n") or_return + case '\r': try_copy_string(i, buf, "\\r") or_return + case '\t': try_copy_string(i, buf, "\\t") or_return + case '\v': try_copy_string(i, buf, "\\v") or_return + case: + if r <= 0 { + try_copy_string(i, buf, "\\x00") or_return + } else if r < 32 { + n0, n1 := u8(r) >> 4, u8(r) & 0xf + try_copy_string(i, buf, "\\x") or_return + try_copy_byte (i, buf, _INTEGER_DIGITS_VAR[n0]) or_return + try_copy_byte (i, buf, _INTEGER_DIGITS_VAR[n1]) or_return + } else { + _ = try_copy_rune(i, buf, r) or_return + } + } + + try_copy_byte(i, buf, '\'') or_return + return true +} + @(optimization_mode="favor_size") try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, ti: ^Type_Info) -> bool { if ti == nil { @@ -603,24 +686,36 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte try_copy_string(i, buf, info.name) or_return case Type_Info_Integer: switch ti.id { - case int: try_copy_string(i, buf, "int") or_return - case uint: try_copy_string(i, buf, "uint") or_return + case int: try_copy_string(i, buf, "int") or_return + case uint: try_copy_string(i, buf, "uint") or_return case uintptr: try_copy_string(i, buf, "uintptr") or_return case: try_copy_byte(i, buf, 'i' if info.signed else 'u') or_return - try_copy_u64(i, buf, u64(8*ti.size)) or_return + try_copy_u64 (i, buf, u64(8*ti.size)) or_return } + switch info.endianness { + case .Platform: // nothing + case .Little: try_copy_string(i, buf, "le") or_return + case .Big: try_copy_string(i, buf, "be") or_return + } + case Type_Info_Rune: try_copy_string(i, buf, "rune") or_return case Type_Info_Float: try_copy_byte(i, buf, 'f') or_return try_copy_u64(i, buf, u64(8*ti.size)) or_return + switch info.endianness { + case .Platform: // nothing + case .Little: try_copy_string(i, buf, "le") or_return + case .Big: try_copy_string(i, buf, "be") or_return + } + case Type_Info_Complex: - try_copy_string(i, buf, "complex") or_return - try_copy_u64(i, buf, u64(8*ti.size)) or_return + try_copy_string(i, buf, "complex") or_return + try_copy_u64 (i, buf, u64(8*ti.size)) or_return case Type_Info_Quaternion: - try_copy_string(i, buf, "quaternion") or_return - try_copy_u64(i, buf, u64(8*ti.size)) or_return + try_copy_string(i, buf, "quaternion") or_return + try_copy_u64 (i, buf, u64(8*ti.size)) or_return case Type_Info_String: if info.is_cstring { try_copy_byte(i, buf, 'c') or_return @@ -634,8 +729,8 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte switch ti.id { case bool: try_copy_string(i, buf, "bool") or_return case: - try_copy_byte(i, buf, 'b') or_return - try_copy_u64(i, buf, u64(8*ti.size)) or_return + try_copy_byte(i, buf, 'b') or_return + try_copy_u64 (i, buf, u64(8*ti.size)) or_return } case Type_Info_Any: try_copy_string(i, buf, "any") or_return @@ -646,14 +741,14 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte if info.elem == nil { try_copy_string(i, buf, "rawptr") or_return } else { - try_copy_string(i, buf, "^") or_return + try_copy_string (i, buf, "^") or_return try_copy_write_type(i, buf, info.elem) or_return } case Type_Info_Multi_Pointer: - try_copy_string(i, buf, "[^]") or_return + try_copy_string (i, buf, "[^]") or_return try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Soa_Pointer: - try_copy_string(i, buf, "#soa ^") or_return + try_copy_string (i, buf, "#soa ^") or_return try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Procedure: try_copy_string(i, buf, "proc") or_return @@ -669,7 +764,7 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte try_copy_string(i, buf, ")") or_return } if info.results != nil { - try_copy_string(i, buf, " -> ") or_return + try_copy_string (i, buf, " -> ") or_return try_copy_write_type(i, buf, info.results) or_return } case Type_Info_Parameters: @@ -689,67 +784,67 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte if count != 1 { try_copy_string(i, buf, ")") or_return } case Type_Info_Array: - try_copy_byte(i, buf, '[') or_return - try_copy_u64(i, buf, u64(info.count)) or_return - try_copy_byte(i, buf, ']') or_return - try_copy_write_type(i, buf, info.elem) or_return + try_copy_byte (i, buf, '[') or_return + try_copy_u64 (i, buf, u64(info.count)) or_return + try_copy_byte (i, buf, ']') or_return + try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Enumerated_Array: if info.is_sparse { try_copy_string(i, buf, "#sparse") or_return } - try_copy_byte(i, buf, '[') or_return + try_copy_byte (i, buf, '[') or_return try_copy_write_type(i, buf, info.index) or_return - try_copy_byte(i, buf, ']') or_return - try_copy_write_type(i, buf, info.elem) or_return + try_copy_byte (i, buf, ']') or_return + try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Dynamic_Array: - try_copy_string(i, buf, "[dynamic]") or_return - try_copy_write_type(i, buf, info.elem) or_return + try_copy_string (i, buf, "[dynamic]") or_return + try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Slice: - try_copy_string(i, buf, "[]") or_return + try_copy_string (i, buf, "[]") or_return try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Map: - try_copy_string(i, buf, "map[") or_return - try_copy_write_type(i, buf, info.key) or_return - try_copy_byte(i, buf, ']') or_return + try_copy_string (i, buf, "map[") or_return + try_copy_write_type(i, buf, info.key) or_return + try_copy_byte (i, buf, ']') or_return try_copy_write_type(i, buf, info.value) or_return case Type_Info_Struct: switch info.soa_kind { case .None: // Ignore case .Fixed: - try_copy_string(i, buf, "#soa[") or_return - try_copy_u64(i, buf, u64(info.soa_len)) or_return - try_copy_byte(i, buf, ']') or_return + try_copy_string (i, buf, "#soa[") or_return + try_copy_u64 (i, buf, u64(info.soa_len)) or_return + try_copy_byte (i, buf, ']') or_return try_copy_write_type(i, buf, info.soa_base_type) or_return return true case .Slice: - try_copy_string(i, buf, "#soa[]") or_return + try_copy_string (i, buf, "#soa[]") or_return try_copy_write_type(i, buf, info.soa_base_type) or_return return true case .Dynamic: - try_copy_string(i, buf, "#soa[dynamic]") or_return + try_copy_string (i, buf, "#soa[dynamic]") or_return try_copy_write_type(i, buf, info.soa_base_type) or_return return true } try_copy_string(i, buf, "struct ") or_return - if .packed in info.flags { try_copy_string(i, buf, "#packed ") or_return } - if .raw_union in info.flags { try_copy_string(i, buf, "#raw_union ") or_return } + if .packed in info.flags { try_copy_string(i, buf, "#packed ") or_return } + if .raw_union in info.flags { try_copy_string(i, buf, "#raw_union ") or_return } if .all_or_none in info.flags { try_copy_string(i, buf, "#all_or_none ") or_return } if .align in info.flags { - try_copy_string(i, buf, "#align(") or_return - try_copy_u64(i, buf, u64(ti.align)) or_return - try_copy_string(i, buf, ") ") or_return + try_copy_string(i, buf, "#align(") or_return + try_copy_u64(i, buf, u64(ti.align)) or_return + try_copy_string(i, buf, ") ") or_return } try_copy_byte(i, buf, '{') or_return for name, j in info.names[:info.field_count] { if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_string(i, buf, name) or_return - try_copy_string(i, buf, ": ") or_return + try_copy_string (i, buf, name) or_return + try_copy_string (i, buf, ": ") or_return try_copy_write_type(i, buf, info.types[j]) or_return } try_copy_byte(i, buf, '}') or_return @@ -757,9 +852,9 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte case Type_Info_Union: try_copy_string(i, buf, "union ") or_return if info.custom_align { - try_copy_string(i, buf, "#align(") or_return - try_copy_u64(i, buf, u64(ti.align)) or_return - try_copy_string(i, buf, ") ") or_return + try_copy_string(i, buf, "#align(") or_return + try_copy_u64 (i, buf, u64(ti.align)) or_return + try_copy_string(i, buf, ") ") or_return } if info.no_nil { try_copy_string(i, buf, "#no_nil ") or_return @@ -772,9 +867,9 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte try_copy_string(i, buf, "}") or_return case Type_Info_Enum: - try_copy_string(i, buf, "enum ") or_return + try_copy_string (i, buf, "enum ") or_return try_copy_write_type(i, buf, info.base) or_return - try_copy_string(i, buf, " {") or_return + try_copy_string (i, buf, " {") or_return for name, j in info.names { if j > 0 { try_copy_string(i, buf, ", ") or_return } try_copy_string(i, buf, name) or_return @@ -788,48 +883,51 @@ try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte case Type_Info_Enum: try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Rune: - print_encoded_rune(rune(info.lower)) - try_copy_string(i, buf, "..") or_return - print_encoded_rune(rune(info.upper)) + try_copy_encoded_rune(i, buf, rune(info.lower)) or_return + try_copy_string (i, buf, "..") or_return + try_copy_encoded_rune(i, buf, rune(info.upper)) or_return case: - print_i64(info.lower) - try_copy_string(i, buf, "..") or_return - print_i64(info.upper) + try_copy_i64 (i, buf, info.lower) or_return + try_copy_string(i, buf, "..") or_return + try_copy_i64 (i, buf, info.upper) or_return } if info.underlying != nil { - try_copy_string(i, buf, "; ") or_return + try_copy_string (i, buf, "; ") or_return try_copy_write_type(i, buf, info.underlying) or_return } try_copy_byte(i, buf, ']') or_return case Type_Info_Bit_Field: - try_copy_string(i, buf, "bit_field ") or_return + try_copy_string (i, buf, "bit_field ") or_return try_copy_write_type(i, buf, info.backing_type) or_return - try_copy_string(i, buf, " {") or_return + try_copy_string (i, buf, " {") or_return for name, j in info.names[:info.field_count] { if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_string(i, buf, name) or_return - try_copy_string(i, buf, ": ") or_return - try_copy_write_type(i, buf, info.types[j]) or_return - try_copy_string(i, buf, " | ") or_return - try_copy_u64(i, buf, u64(info.bit_sizes[j])) or_return + try_copy_string (i, buf, name) or_return + try_copy_string (i, buf, ": ") or_return + try_copy_write_type(i, buf, info.types[j]) or_return + try_copy_string (i, buf, " | ") or_return + try_copy_u64 (i, buf, u64(info.bit_sizes[j])) or_return } try_copy_byte(i, buf, '}') or_return case Type_Info_Simd_Vector: - try_copy_string(i, buf, "#simd[") or_return - try_copy_u64(i, buf, u64(info.count)) or_return - try_copy_byte(i, buf, ']') or_return - try_copy_write_type(i, buf, info.elem) or_return + try_copy_string (i, buf, "#simd[") or_return + try_copy_u64 (i, buf, u64(info.count)) or_return + try_copy_byte (i, buf, ']') or_return + try_copy_write_type(i, buf, info.elem) or_return case Type_Info_Matrix: - try_copy_string(i, buf, "matrix[") or_return - try_copy_u64(i, buf, u64(info.row_count)) or_return - try_copy_string(i, buf, ", ") or_return - try_copy_u64(i, buf, u64(info.column_count)) or_return - try_copy_string(i, buf, "]") or_return - try_copy_write_type(i, buf, info.elem) or_return + if info.layout == .Row_Major { + try_copy_string(i, buf, "#row_major ") or_return + } + try_copy_string (i, buf, "matrix[") or_return + try_copy_u64 (i, buf, u64(info.row_count)) or_return + try_copy_string (i, buf, ", ") or_return + try_copy_u64 (i, buf, u64(info.column_count)) or_return + try_copy_string (i, buf, "]") or_return + try_copy_write_type(i, buf, info.elem) or_return } return true } \ No newline at end of file From 7135bbdd67514d80739d1e9ee9dd41be9d5488f1 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 11:54:17 +0000 Subject: [PATCH 197/212] Rename `try_copy_*` to `write_*` --- base/runtime/error_checks.odin | 20 +- base/runtime/print.odin | 350 ++++++++++++++++----------------- 2 files changed, 185 insertions(+), 185 deletions(-) diff --git a/base/runtime/error_checks.odin b/base/runtime/error_checks.odin index df6cb9485..46a8f9b1d 100644 --- a/base/runtime/error_checks.odin +++ b/base/runtime/error_checks.odin @@ -204,10 +204,10 @@ when ODIN_NO_RTTI { @(cold, no_instrumentation) handle_error :: proc "odin" (file: string, line, column: i32, from, to: typeid) -> ! { do_msg :: proc "contextless" (i: ^int, buf: []byte, file: string, line, column: i32, from, to: typeid) -> bool { - try_copy_string(i, buf, "Invalid type assertion from ") or_return - try_copy_typeid(i, buf, from) or_return - try_copy_string(i, buf, " to ") or_return - try_copy_typeid(i, buf, to) or_return + write_string(i, buf, "Invalid type assertion from ") or_return + write_typeid(i, buf, from) or_return + write_string(i, buf, " to ") or_return + write_typeid(i, buf, to) or_return return true } @@ -285,13 +285,13 @@ when ODIN_NO_RTTI { @(cold, no_instrumentation) handle_error :: proc "odin" (file: string, line, column: i32, from, to: typeid, from_data: rawptr) -> ! { do_msg :: proc "contextless" (i: ^int, buf: []byte, file: string, line, column: i32, from, to, actual: typeid) -> bool { - try_copy_string(i, buf, "Invalid type assertion from ") or_return - try_copy_typeid(i, buf, from) or_return - try_copy_string(i, buf, " to ") or_return - try_copy_typeid(i, buf, to) or_return + write_string(i, buf, "Invalid type assertion from ") or_return + write_typeid(i, buf, from) or_return + write_string(i, buf, " to ") or_return + write_typeid(i, buf, to) or_return if actual != from { - try_copy_string(i, buf, ", actual type: ") or_return - try_copy_typeid(i, buf, actual) or_return + write_string(i, buf, ", actual type: ") or_return + write_typeid(i, buf, actual) or_return } return true } diff --git a/base/runtime/print.odin b/base/runtime/print.odin index cc51394c8..2deb0f4b1 100644 --- a/base/runtime/print.odin +++ b/base/runtime/print.odin @@ -519,7 +519,7 @@ print_type :: #force_no_inline proc "contextless" (ti: ^Type_Info) { @(require_results) -try_copy_string :: proc "contextless" (i: ^int, dst: []byte, src: string) -> bool { +write_string :: proc "contextless" (i: ^int, dst: []byte, src: string) -> bool { if i^ < len(dst) { i^ += copy(dst[i^:], src) return true @@ -529,7 +529,7 @@ try_copy_string :: proc "contextless" (i: ^int, dst: []byte, src: string) -> boo @(require_results) -try_copy_byte :: proc "contextless" (i: ^int, dst: []byte, src: byte) -> bool { +write_byte :: proc "contextless" (i: ^int, dst: []byte, src: byte) -> bool { if i^ < len(dst) { dst[i^] = src i^ += 1 @@ -540,7 +540,7 @@ try_copy_byte :: proc "contextless" (i: ^int, dst: []byte, src: byte) -> bool { @(require_results) -try_copy_u64 :: proc "contextless" (j: ^int, dst: []byte, x: u64) -> bool { +write_u64 :: proc "contextless" (j: ^int, dst: []byte, x: u64) -> bool { if j^ < len(dst) { b :: u64(10) u := x @@ -553,13 +553,13 @@ try_copy_u64 :: proc "contextless" (j: ^int, dst: []byte, x: u64) -> bool { } i -= 1; a[i] = _INTEGER_DIGITS_VAR[u % b] - return try_copy_string(j, dst, string(a[i:])) + return write_string(j, dst, string(a[i:])) } return false } @(require_results) -try_copy_i64 :: proc "contextless" (j: ^int, dst: []byte, x: i64) -> bool { +write_i64 :: proc "contextless" (j: ^int, dst: []byte, x: i64) -> bool { if j^ < len(dst) { b :: u64(10) u := u64(abs(x)) @@ -576,33 +576,33 @@ try_copy_i64 :: proc "contextless" (j: ^int, dst: []byte, x: i64) -> bool { i -= 1; a[i] = '-' } - return try_copy_string(j, dst, string(a[i:])) + return write_string(j, dst, string(a[i:])) } return false } @(require_results) -try_copy_caller_location :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, loc: Source_Code_Location) -> bool { - try_copy_string(i, buf, loc.file_path) or_return +write_caller_location :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, loc: Source_Code_Location) -> bool { + write_string(i, buf, loc.file_path) or_return when ODIN_ERROR_POS_STYLE == .Default { - try_copy_byte(i, buf, '(') or_return - try_copy_u64 (i, buf, u64(loc.line)) or_return + write_byte(i, buf, '(') or_return + write_u64 (i, buf, u64(loc.line)) or_return if loc.column != 0 { - try_copy_byte(i, buf, ':') or_return - try_copy_u64 (i, buf, u64(loc.column)) or_return + write_byte(i, buf, ':') or_return + write_u64 (i, buf, u64(loc.column)) or_return } - try_copy_byte(i, buf, ')') or_return + write_byte(i, buf, ')') or_return return true } else when ODIN_ERROR_POS_STYLE == .Unix { - try_copy_byte(i, buf, ':') or_return - try_copy_u64 (i, buf, u64(loc.line)) or_return + write_byte(i, buf, ':') or_return + write_u64 (i, buf, u64(loc.line)) or_return if loc.column != 0 { - try_copy_byte(i, buf, ':') or_return - try_copy_u64 (i, buf, u64(loc.column)) or_return + write_byte(i, buf, ':') or_return + write_u64 (i, buf, u64(loc.column)) or_return } - try_copy_byte(i, buf, ':') or_return + write_byte(i, buf, ':') or_return return true } else { #panic("unhandled ODIN_ERROR_POS_STYLE") @@ -610,19 +610,19 @@ try_copy_caller_location :: #force_no_inline proc "contextless" (i: ^int, buf: [ } @(require_results) -try_copy_typeid :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, id: typeid) -> bool { +write_typeid :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, id: typeid) -> bool { when ODIN_NO_RTTI { if id == nil { - try_copy_string(i, buf, "nil") or_return + write_string(i, buf, "nil") or_return } else { - try_copy_string(i, buf, "") or_return + write_string(i, buf, "") or_return } } else { if id == nil { - try_copy_string(i, buf, "nil") or_return + write_string(i, buf, "nil") or_return } else { ti := type_info_of(id) - try_copy_write_type(i, buf, ti) or_return + write_write_type(i, buf, ti) or_return } } return true @@ -630,304 +630,304 @@ try_copy_typeid :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, id @(require_results) -try_copy_rune :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, r: rune) -> (written: int, ok: bool) #no_bounds_check { +write_rune :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, r: rune) -> (written: int, ok: bool) #no_bounds_check { RUNE_SELF :: 0x80 if r < RUNE_SELF { - try_copy_byte(i, buf,byte(r)) or_return + write_byte(i, buf,byte(r)) or_return return 1, true } b, n := encode_rune(r) prev := i^ - try_copy_string(i, buf, string(b[:n])) or_return + write_string(i, buf, string(b[:n])) or_return return i^ - prev, true } @(require_results) -try_copy_encoded_rune :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, r: rune) -> bool { - try_copy_byte(i, buf, '\'') or_return +write_encoded_rune :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, r: rune) -> bool { + write_byte(i, buf, '\'') or_return switch r { - case '\a': try_copy_string(i, buf, "\\a") or_return - case '\b': try_copy_string(i, buf, "\\b") or_return - case '\e': try_copy_string(i, buf, "\\e") or_return - case '\f': try_copy_string(i, buf, "\\f") or_return - case '\n': try_copy_string(i, buf, "\\n") or_return - case '\r': try_copy_string(i, buf, "\\r") or_return - case '\t': try_copy_string(i, buf, "\\t") or_return - case '\v': try_copy_string(i, buf, "\\v") or_return + case '\a': write_string(i, buf, "\\a") or_return + case '\b': write_string(i, buf, "\\b") or_return + case '\e': write_string(i, buf, "\\e") or_return + case '\f': write_string(i, buf, "\\f") or_return + case '\n': write_string(i, buf, "\\n") or_return + case '\r': write_string(i, buf, "\\r") or_return + case '\t': write_string(i, buf, "\\t") or_return + case '\v': write_string(i, buf, "\\v") or_return case: if r <= 0 { - try_copy_string(i, buf, "\\x00") or_return + write_string(i, buf, "\\x00") or_return } else if r < 32 { n0, n1 := u8(r) >> 4, u8(r) & 0xf - try_copy_string(i, buf, "\\x") or_return - try_copy_byte (i, buf, _INTEGER_DIGITS_VAR[n0]) or_return - try_copy_byte (i, buf, _INTEGER_DIGITS_VAR[n1]) or_return + write_string(i, buf, "\\x") or_return + write_byte (i, buf, _INTEGER_DIGITS_VAR[n0]) or_return + write_byte (i, buf, _INTEGER_DIGITS_VAR[n1]) or_return } else { - _ = try_copy_rune(i, buf, r) or_return + _ = write_rune(i, buf, r) or_return } } - try_copy_byte(i, buf, '\'') or_return + write_byte(i, buf, '\'') or_return return true } @(optimization_mode="favor_size") -try_copy_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, ti: ^Type_Info) -> bool { +write_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, ti: ^Type_Info) -> bool { if ti == nil { - try_copy_string(i, buf, "nil") or_return + write_string(i, buf, "nil") or_return return true } switch info in ti.variant { case Type_Info_Named: - try_copy_string(i, buf, info.name) or_return + write_string(i, buf, info.name) or_return case Type_Info_Integer: switch ti.id { - case int: try_copy_string(i, buf, "int") or_return - case uint: try_copy_string(i, buf, "uint") or_return - case uintptr: try_copy_string(i, buf, "uintptr") or_return + case int: write_string(i, buf, "int") or_return + case uint: write_string(i, buf, "uint") or_return + case uintptr: write_string(i, buf, "uintptr") or_return case: - try_copy_byte(i, buf, 'i' if info.signed else 'u') or_return - try_copy_u64 (i, buf, u64(8*ti.size)) or_return + write_byte(i, buf, 'i' if info.signed else 'u') or_return + write_u64 (i, buf, u64(8*ti.size)) or_return } switch info.endianness { case .Platform: // nothing - case .Little: try_copy_string(i, buf, "le") or_return - case .Big: try_copy_string(i, buf, "be") or_return + case .Little: write_string(i, buf, "le") or_return + case .Big: write_string(i, buf, "be") or_return } case Type_Info_Rune: - try_copy_string(i, buf, "rune") or_return + write_string(i, buf, "rune") or_return case Type_Info_Float: - try_copy_byte(i, buf, 'f') or_return - try_copy_u64(i, buf, u64(8*ti.size)) or_return + write_byte(i, buf, 'f') or_return + write_u64(i, buf, u64(8*ti.size)) or_return switch info.endianness { case .Platform: // nothing - case .Little: try_copy_string(i, buf, "le") or_return - case .Big: try_copy_string(i, buf, "be") or_return + case .Little: write_string(i, buf, "le") or_return + case .Big: write_string(i, buf, "be") or_return } case Type_Info_Complex: - try_copy_string(i, buf, "complex") or_return - try_copy_u64 (i, buf, u64(8*ti.size)) or_return + write_string(i, buf, "complex") or_return + write_u64 (i, buf, u64(8*ti.size)) or_return case Type_Info_Quaternion: - try_copy_string(i, buf, "quaternion") or_return - try_copy_u64 (i, buf, u64(8*ti.size)) or_return + write_string(i, buf, "quaternion") or_return + write_u64 (i, buf, u64(8*ti.size)) or_return case Type_Info_String: if info.is_cstring { - try_copy_byte(i, buf, 'c') or_return + write_byte(i, buf, 'c') or_return } - try_copy_string(i, buf, "string") or_return + write_string(i, buf, "string") or_return switch info.encoding { case .UTF_8: /**/ - case .UTF_16: try_copy_string(i, buf, "16") or_return + case .UTF_16: write_string(i, buf, "16") or_return } case Type_Info_Boolean: switch ti.id { - case bool: try_copy_string(i, buf, "bool") or_return + case bool: write_string(i, buf, "bool") or_return case: - try_copy_byte(i, buf, 'b') or_return - try_copy_u64 (i, buf, u64(8*ti.size)) or_return + write_byte(i, buf, 'b') or_return + write_u64 (i, buf, u64(8*ti.size)) or_return } case Type_Info_Any: - try_copy_string(i, buf, "any") or_return + write_string(i, buf, "any") or_return case Type_Info_Type_Id: - try_copy_string(i, buf, "typeid") or_return + write_string(i, buf, "typeid") or_return case Type_Info_Pointer: if info.elem == nil { - try_copy_string(i, buf, "rawptr") or_return + write_string(i, buf, "rawptr") or_return } else { - try_copy_string (i, buf, "^") or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "^") or_return + write_write_type(i, buf, info.elem) or_return } case Type_Info_Multi_Pointer: - try_copy_string (i, buf, "[^]") or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "[^]") or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Soa_Pointer: - try_copy_string (i, buf, "#soa ^") or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "#soa ^") or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Procedure: - try_copy_string(i, buf, "proc") or_return + write_string(i, buf, "proc") or_return if info.params == nil { - try_copy_string(i, buf, "()") or_return + write_string(i, buf, "()") or_return } else { t := info.params.variant.(Type_Info_Parameters) - try_copy_byte(i, buf, '(') or_return + write_byte(i, buf, '(') or_return for t, j in t.types { - if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_write_type(i, buf, t) or_return + if j > 0 { write_string(i, buf, ", ") or_return } + write_write_type(i, buf, t) or_return } - try_copy_string(i, buf, ")") or_return + write_string(i, buf, ")") or_return } if info.results != nil { - try_copy_string (i, buf, " -> ") or_return - try_copy_write_type(i, buf, info.results) or_return + write_string (i, buf, " -> ") or_return + write_write_type(i, buf, info.results) or_return } case Type_Info_Parameters: count := len(info.names) - if count != 1 { try_copy_byte(i, buf, '(') or_return } + if count != 1 { write_byte(i, buf, '(') or_return } for name, j in info.names { - if j > 0 { try_copy_string(i, buf, ", ") or_return } + if j > 0 { write_string(i, buf, ", ") or_return } t := info.types[j] if len(name) > 0 { - try_copy_string(i, buf, name) or_return - try_copy_string(i, buf, ": ") or_return + write_string(i, buf, name) or_return + write_string(i, buf, ": ") or_return } - try_copy_write_type(i, buf, t) or_return + write_write_type(i, buf, t) or_return } - if count != 1 { try_copy_string(i, buf, ")") or_return } + if count != 1 { write_string(i, buf, ")") or_return } case Type_Info_Array: - try_copy_byte (i, buf, '[') or_return - try_copy_u64 (i, buf, u64(info.count)) or_return - try_copy_byte (i, buf, ']') or_return - try_copy_write_type(i, buf, info.elem) or_return + write_byte (i, buf, '[') or_return + write_u64 (i, buf, u64(info.count)) or_return + write_byte (i, buf, ']') or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Enumerated_Array: if info.is_sparse { - try_copy_string(i, buf, "#sparse") or_return + write_string(i, buf, "#sparse") or_return } - try_copy_byte (i, buf, '[') or_return - try_copy_write_type(i, buf, info.index) or_return - try_copy_byte (i, buf, ']') or_return - try_copy_write_type(i, buf, info.elem) or_return + write_byte (i, buf, '[') or_return + write_write_type(i, buf, info.index) or_return + write_byte (i, buf, ']') or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Dynamic_Array: - try_copy_string (i, buf, "[dynamic]") or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "[dynamic]") or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Slice: - try_copy_string (i, buf, "[]") or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "[]") or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Map: - try_copy_string (i, buf, "map[") or_return - try_copy_write_type(i, buf, info.key) or_return - try_copy_byte (i, buf, ']') or_return - try_copy_write_type(i, buf, info.value) or_return + write_string (i, buf, "map[") or_return + write_write_type(i, buf, info.key) or_return + write_byte (i, buf, ']') or_return + write_write_type(i, buf, info.value) or_return case Type_Info_Struct: switch info.soa_kind { case .None: // Ignore case .Fixed: - try_copy_string (i, buf, "#soa[") or_return - try_copy_u64 (i, buf, u64(info.soa_len)) or_return - try_copy_byte (i, buf, ']') or_return - try_copy_write_type(i, buf, info.soa_base_type) or_return + write_string (i, buf, "#soa[") or_return + write_u64 (i, buf, u64(info.soa_len)) or_return + write_byte (i, buf, ']') or_return + write_write_type(i, buf, info.soa_base_type) or_return return true case .Slice: - try_copy_string (i, buf, "#soa[]") or_return - try_copy_write_type(i, buf, info.soa_base_type) or_return + write_string (i, buf, "#soa[]") or_return + write_write_type(i, buf, info.soa_base_type) or_return return true case .Dynamic: - try_copy_string (i, buf, "#soa[dynamic]") or_return - try_copy_write_type(i, buf, info.soa_base_type) or_return + write_string (i, buf, "#soa[dynamic]") or_return + write_write_type(i, buf, info.soa_base_type) or_return return true } - try_copy_string(i, buf, "struct ") or_return - if .packed in info.flags { try_copy_string(i, buf, "#packed ") or_return } - if .raw_union in info.flags { try_copy_string(i, buf, "#raw_union ") or_return } - if .all_or_none in info.flags { try_copy_string(i, buf, "#all_or_none ") or_return } + write_string(i, buf, "struct ") or_return + if .packed in info.flags { write_string(i, buf, "#packed ") or_return } + if .raw_union in info.flags { write_string(i, buf, "#raw_union ") or_return } + if .all_or_none in info.flags { write_string(i, buf, "#all_or_none ") or_return } if .align in info.flags { - try_copy_string(i, buf, "#align(") or_return - try_copy_u64(i, buf, u64(ti.align)) or_return - try_copy_string(i, buf, ") ") or_return + write_string(i, buf, "#align(") or_return + write_u64(i, buf, u64(ti.align)) or_return + write_string(i, buf, ") ") or_return } - try_copy_byte(i, buf, '{') or_return + write_byte(i, buf, '{') or_return for name, j in info.names[:info.field_count] { - if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_string (i, buf, name) or_return - try_copy_string (i, buf, ": ") or_return - try_copy_write_type(i, buf, info.types[j]) or_return + if j > 0 { write_string(i, buf, ", ") or_return } + write_string (i, buf, name) or_return + write_string (i, buf, ": ") or_return + write_write_type(i, buf, info.types[j]) or_return } - try_copy_byte(i, buf, '}') or_return + write_byte(i, buf, '}') or_return case Type_Info_Union: - try_copy_string(i, buf, "union ") or_return + write_string(i, buf, "union ") or_return if info.custom_align { - try_copy_string(i, buf, "#align(") or_return - try_copy_u64 (i, buf, u64(ti.align)) or_return - try_copy_string(i, buf, ") ") or_return + write_string(i, buf, "#align(") or_return + write_u64 (i, buf, u64(ti.align)) or_return + write_string(i, buf, ") ") or_return } if info.no_nil { - try_copy_string(i, buf, "#no_nil ") or_return + write_string(i, buf, "#no_nil ") or_return } - try_copy_byte(i, buf, '{') or_return + write_byte(i, buf, '{') or_return for variant, j in info.variants { - if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_write_type(i, buf, variant) or_return + if j > 0 { write_string(i, buf, ", ") or_return } + write_write_type(i, buf, variant) or_return } - try_copy_string(i, buf, "}") or_return + write_string(i, buf, "}") or_return case Type_Info_Enum: - try_copy_string (i, buf, "enum ") or_return - try_copy_write_type(i, buf, info.base) or_return - try_copy_string (i, buf, " {") or_return + write_string (i, buf, "enum ") or_return + write_write_type(i, buf, info.base) or_return + write_string (i, buf, " {") or_return for name, j in info.names { - if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_string(i, buf, name) or_return + if j > 0 { write_string(i, buf, ", ") or_return } + write_string(i, buf, name) or_return } - try_copy_string(i, buf, "}") or_return + write_string(i, buf, "}") or_return case Type_Info_Bit_Set: - try_copy_string(i, buf, "bit_set[") or_return + write_string(i, buf, "bit_set[") or_return #partial switch elem in type_info_base(info.elem).variant { case Type_Info_Enum: - try_copy_write_type(i, buf, info.elem) or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Rune: - try_copy_encoded_rune(i, buf, rune(info.lower)) or_return - try_copy_string (i, buf, "..") or_return - try_copy_encoded_rune(i, buf, rune(info.upper)) or_return + write_encoded_rune(i, buf, rune(info.lower)) or_return + write_string (i, buf, "..") or_return + write_encoded_rune(i, buf, rune(info.upper)) or_return case: - try_copy_i64 (i, buf, info.lower) or_return - try_copy_string(i, buf, "..") or_return - try_copy_i64 (i, buf, info.upper) or_return + write_i64 (i, buf, info.lower) or_return + write_string(i, buf, "..") or_return + write_i64 (i, buf, info.upper) or_return } if info.underlying != nil { - try_copy_string (i, buf, "; ") or_return - try_copy_write_type(i, buf, info.underlying) or_return + write_string (i, buf, "; ") or_return + write_write_type(i, buf, info.underlying) or_return } - try_copy_byte(i, buf, ']') or_return + write_byte(i, buf, ']') or_return case Type_Info_Bit_Field: - try_copy_string (i, buf, "bit_field ") or_return - try_copy_write_type(i, buf, info.backing_type) or_return - try_copy_string (i, buf, " {") or_return + write_string (i, buf, "bit_field ") or_return + write_write_type(i, buf, info.backing_type) or_return + write_string (i, buf, " {") or_return for name, j in info.names[:info.field_count] { - if j > 0 { try_copy_string(i, buf, ", ") or_return } - try_copy_string (i, buf, name) or_return - try_copy_string (i, buf, ": ") or_return - try_copy_write_type(i, buf, info.types[j]) or_return - try_copy_string (i, buf, " | ") or_return - try_copy_u64 (i, buf, u64(info.bit_sizes[j])) or_return + if j > 0 { write_string(i, buf, ", ") or_return } + write_string (i, buf, name) or_return + write_string (i, buf, ": ") or_return + write_write_type(i, buf, info.types[j]) or_return + write_string (i, buf, " | ") or_return + write_u64 (i, buf, u64(info.bit_sizes[j])) or_return } - try_copy_byte(i, buf, '}') or_return + write_byte(i, buf, '}') or_return case Type_Info_Simd_Vector: - try_copy_string (i, buf, "#simd[") or_return - try_copy_u64 (i, buf, u64(info.count)) or_return - try_copy_byte (i, buf, ']') or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "#simd[") or_return + write_u64 (i, buf, u64(info.count)) or_return + write_byte (i, buf, ']') or_return + write_write_type(i, buf, info.elem) or_return case Type_Info_Matrix: if info.layout == .Row_Major { - try_copy_string(i, buf, "#row_major ") or_return + write_string(i, buf, "#row_major ") or_return } - try_copy_string (i, buf, "matrix[") or_return - try_copy_u64 (i, buf, u64(info.row_count)) or_return - try_copy_string (i, buf, ", ") or_return - try_copy_u64 (i, buf, u64(info.column_count)) or_return - try_copy_string (i, buf, "]") or_return - try_copy_write_type(i, buf, info.elem) or_return + write_string (i, buf, "matrix[") or_return + write_u64 (i, buf, u64(info.row_count)) or_return + write_string (i, buf, ", ") or_return + write_u64 (i, buf, u64(info.column_count)) or_return + write_string (i, buf, "]") or_return + write_write_type(i, buf, info.elem) or_return } return true } \ No newline at end of file From 429e8a46dba047833087f22bddd8d03519929258 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Wed, 31 Dec 2025 09:30:29 +0900 Subject: [PATCH 198/212] core/crypto/ed25519: Cosmetic fixes (NFC) --- core/crypto/_edwards25519/edwards25519_scalar_mul.odin | 2 +- core/crypto/ed25519/ed25519.odin | 2 +- tests/core/crypto/test_core_crypto_edwards.odin | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/crypto/_edwards25519/edwards25519_scalar_mul.odin b/core/crypto/_edwards25519/edwards25519_scalar_mul.odin index 757a51257..c24447072 100644 --- a/core/crypto/_edwards25519/edwards25519_scalar_mul.odin +++ b/core/crypto/_edwards25519/edwards25519_scalar_mul.odin @@ -8,7 +8,7 @@ import "core:mem" // // Note: When generating, the values were reduced to Tight_Field_Element // ranges, even though that is not required. -@(private) +@(private,rodata) GE_BASEPOINT_TABLE := Multiply_Table { { {62697248952638, 204681361388450, 631292143396476, 338455783676468, 1213667448819585}, diff --git a/core/crypto/ed25519/ed25519.odin b/core/crypto/ed25519/ed25519.odin index 0382a6739..f6a71d888 100644 --- a/core/crypto/ed25519/ed25519.odin +++ b/core/crypto/ed25519/ed25519.odin @@ -170,7 +170,7 @@ public_key_set_bytes :: proc "contextless" (pub_key: ^Public_Key, b: []byte) -> // public_key_set_priv sets pub_key to the public component of priv_key. public_key_set_priv :: proc(pub_key: ^Public_Key, priv_key: ^Private_Key) { - ensure(priv_key._is_initialized, "crypto/ed25519: uninitialized public key") + ensure(priv_key._is_initialized, "crypto/ed25519: uninitialized private key") src := &priv_key._pub_key copy(pub_key._b[:], src._b[:]) diff --git a/tests/core/crypto/test_core_crypto_edwards.odin b/tests/core/crypto/test_core_crypto_edwards.odin index 61933c00f..a1307da24 100644 --- a/tests/core/crypto/test_core_crypto_edwards.odin +++ b/tests/core/crypto/test_core_crypto_edwards.odin @@ -10,7 +10,7 @@ import "core:crypto/x25519" import "core:crypto/x448" @(test) -test_sqrt_ratio_m1 :: proc(t: ^testing.T) { +test_edwards25519_sqrt_ratio_m1 :: proc(t: ^testing.T) { test_vectors := []struct { u: string, v: string, @@ -747,14 +747,14 @@ test_x448 :: proc(t: ^testing.T) { } } -@(private) +@(private="file") ge_str :: proc(ge: ^ristretto255.Group_Element) -> string { b: [ristretto255.ELEMENT_SIZE]byte ristretto255.ge_bytes(ge, b[:]) return string(hex.encode(b[:], context.temp_allocator)) } -@(private) +@(private="file") fe_str :: proc(fe: ^field.Tight_Field_Element) -> string { b: [32]byte field.fe_to_bytes(&b, fe) From 6bbd060352dc0aba41594362c9b82bda636fedde Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Fri, 2 Jan 2026 23:59:38 +0900 Subject: [PATCH 199/212] core/crypto/_subtle: Refactor out common helpers --- .../edwards25519_scalar_mul.odin | 6 +-- .../crypto/_fiat/field_scalar25519/field.odin | 7 ++-- core/crypto/_subtle/subtle.odin | 42 +++++++++++++++++++ core/crypto/crypto.odin | 13 +++++- 4 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 core/crypto/_subtle/subtle.odin diff --git a/core/crypto/_edwards25519/edwards25519_scalar_mul.odin b/core/crypto/_edwards25519/edwards25519_scalar_mul.odin index c24447072..6e0eb42c7 100644 --- a/core/crypto/_edwards25519/edwards25519_scalar_mul.odin +++ b/core/crypto/_edwards25519/edwards25519_scalar_mul.odin @@ -1,7 +1,7 @@ package _edwards25519 import field "core:crypto/_fiat/field_scalar25519" -import "core:math/bits" +import subtle "core:crypto/_subtle" import "core:mem" // GE_BASEPOINT_TABLE is 1 * G, ... 15 * G, in precomputed format. @@ -281,8 +281,8 @@ mul_tbl_add :: proc "contextless" ( {2, 0, 0, 0, 0}, // z * 2 } for i := u64(1); i < 16; i = i + 1 { - _, ctrl := bits.sub_u64(0, (i ~ idx), 0) - ge_addend_conditional_assign(tmp_addend, &tbl[i - 1], int(~ctrl) & 1) + ctrl := subtle.eq(i, idx) + ge_addend_conditional_assign(tmp_addend, &tbl[i - 1], int(ctrl)) } ge_add_addend(ge, ge, tmp_addend, tmp_add) } diff --git a/core/crypto/_fiat/field_scalar25519/field.odin b/core/crypto/_fiat/field_scalar25519/field.odin index 933637c54..96b279ce7 100644 --- a/core/crypto/_fiat/field_scalar25519/field.odin +++ b/core/crypto/_fiat/field_scalar25519/field.odin @@ -1,5 +1,6 @@ package field_scalar25519 +import subtle "core:crypto/_subtle" import "core:encoding/endian" import "core:math/bits" import "core:mem" @@ -121,13 +122,11 @@ fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> tmp: Montgomery_Domain_Field_Element fe_sub(&tmp, arg1, arg2) - // This will only underflow iff arg1 == arg2, and we return the borrow, - // which will be 1. - _, borrow := bits.sub_u64(fe_non_zero(&tmp), 1, 0) + is_eq := subtle.eq(fe_non_zero(&tmp), 0) fe_clear(&tmp) - return int(borrow) + return int(is_eq) } fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { diff --git a/core/crypto/_subtle/subtle.odin b/core/crypto/_subtle/subtle.odin new file mode 100644 index 000000000..89328072c --- /dev/null +++ b/core/crypto/_subtle/subtle.odin @@ -0,0 +1,42 @@ +/* +Various useful bit operations in constant time. +*/ +package _subtle + +import "core:math/bits" + +// byte_eq returns 1 iff a == b, 0 otherwise. +@(optimization_mode="none") +byte_eq :: proc "contextless" (a, b: byte) -> int { + v := a ~ b + + // v == 0 iff a == b. The subtraction will underflow, setting the + // sign bit, which will get returned. + return int((u32(v)-1) >> 31) +} + +// u64_eq returns 1 iff a == b, 0 otherwise. +@(optimization_mode="none") +u64_eq :: proc "contextless" (a, b: u64) -> u64 { + _, borrow := bits.sub_u64(0, a ~ b, 0) + return (~borrow) & 1 +} + +eq :: proc { + byte_eq, + u64_eq, +} + +// u64_is_zero returns 1 iff a == 0, 0 otherwise. +@(optimization_mode="none") +u64_is_zero :: proc "contextless" (a: u64) -> u64 { + _, borrow := bits.sub_u64(a, 1, 0) + return borrow +} + +// u64_is_non_zero returns 1 iff a != 0, 0 otherwise. +@(optimization_mode="none") +u64_is_non_zero :: proc "contextless" (a: u64) -> u64 { + is_zero := u64_is_zero(a) + return (~is_zero) & 1 +} diff --git a/core/crypto/crypto.odin b/core/crypto/crypto.odin index 7ccf126e6..435c5daaf 100644 --- a/core/crypto/crypto.odin +++ b/core/crypto/crypto.odin @@ -2,6 +2,7 @@ package crypto import "base:runtime" +import subtle "core:crypto/_subtle" import "core:mem" // HAS_RAND_BYTES is true iff the runtime provides a cryptographic @@ -44,7 +45,17 @@ compare_byte_ptrs_constant_time :: proc "contextless" (a, b: ^byte, n: int) -> i // After the loop, v == 0 iff a == b. The subtraction will underflow // iff v == 0, setting the sign-bit, which gets returned. - return int((u32(v)-1) >> 31) + return subtle.eq(0, v) +} + +// is_zero_constant_time returns 1 iff b is all 0s, 0 otherwise. +is_zero_constant_time :: proc "contextless" (b: []byte) -> int { + v: byte + for b_ in b { + v |= b_ + } + + return subtle.byte_eq(0, v) } // rand_bytes fills the dst buffer with cryptographic entropy taken from From db26fb8a216982a4cf7bb7f992e1cf92ad856a02 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 13:39:51 +0000 Subject: [PATCH 200/212] Add missing `@(require_results)` to procedures --- core/unicode/utf8/utf8.odin | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/unicode/utf8/utf8.odin b/core/unicode/utf8/utf8.odin index 281e36f43..78cefa8b4 100644 --- a/core/unicode/utf8/utf8.odin +++ b/core/unicode/utf8/utf8.odin @@ -60,6 +60,7 @@ accept_sizes := [256]u8{ 0xf5..=0xff = 0xf1, // ascii, size 1 } +@(require_results) encode_rune :: proc "contextless" (c: rune) -> ([4]u8, int) { r := c @@ -101,9 +102,11 @@ decode_rune :: proc{ decode_rune_in_string, decode_rune_in_bytes, } +@(require_results) decode_rune_in_string :: #force_inline proc "contextless" (s: string) -> (rune, int) { return decode_rune_in_bytes(transmute([]u8)s) } +@(require_results) decode_rune_in_bytes :: proc "contextless" (s: []u8) -> (rune, int) { n := len(s) if n < 1 { @@ -141,6 +144,7 @@ decode_rune_in_bytes :: proc "contextless" (s: []u8) -> (rune, int) { return rune(s0&MASK4)<<18 | rune(b1&MASKX)<<12 | rune(b2&MASKX)<<6 | rune(b3&MASKX), 4 } +@(require_results) string_to_runes :: proc "odin" (s: string, allocator := context.allocator) -> (runes: []rune) { n := rune_count_in_string(s) @@ -153,6 +157,7 @@ string_to_runes :: proc "odin" (s: string, allocator := context.allocator) -> (r return } +@(require_results) runes_to_string :: proc "odin" (runes: []rune, allocator := context.allocator) -> string { byte_count := 0 for r in runes { @@ -177,9 +182,11 @@ decode_last_rune :: proc{ decode_last_rune_in_bytes, } +@(require_results) decode_last_rune_in_string :: #force_inline proc "contextless" (s: string) -> (rune, int) { return decode_last_rune_in_bytes(transmute([]u8)s) } +@(require_results) decode_last_rune_in_bytes :: proc "contextless" (s: []u8) -> (rune, int) { r: rune size: int @@ -212,6 +219,7 @@ decode_last_rune_in_bytes :: proc "contextless" (s: []u8) -> (rune, int) { return r, size } +@(require_results) rune_at_pos :: proc "contextless" (s: string, pos: int) -> rune { if pos < 0 { return RUNE_ERROR @@ -227,6 +235,7 @@ rune_at_pos :: proc "contextless" (s: string, pos: int) -> rune { return RUNE_ERROR } +@(require_results) rune_string_at_pos :: proc "contextless" (s: string, pos: int) -> string { if pos < 0 { return "" @@ -243,6 +252,7 @@ rune_string_at_pos :: proc "contextless" (s: string, pos: int) -> string { return "" } +@(require_results) rune_at :: proc "contextless" (s: string, byte_index: int) -> rune { r, _ := decode_rune_in_string(s[byte_index:]) return r @@ -250,6 +260,7 @@ rune_at :: proc "contextless" (s: string, byte_index: int) -> rune { // Returns the byte position of rune at position pos in s with an optional start byte position. // Returns -1 if it runs out of the string. +@(require_results) rune_offset :: proc "contextless" (s: string, pos: int, start: int = 0) -> int { if pos < 0 { return -1 @@ -265,6 +276,7 @@ rune_offset :: proc "contextless" (s: string, pos: int, start: int = 0) -> int { return -1 } +@(require_results) valid_rune :: proc "contextless" (r: rune) -> bool { if r < 0 { return false @@ -276,6 +288,7 @@ valid_rune :: proc "contextless" (r: rune) -> bool { return true } +@(require_results) valid_string :: proc "contextless" (s: string) -> bool { n := len(s) for i := 0; i < n; { @@ -309,6 +322,7 @@ valid_string :: proc "contextless" (s: string) -> bool { return true } +@(require_results) rune_start :: #force_inline proc "contextless" (b: u8) -> bool { return b&0xc0 != 0x80 } @@ -318,9 +332,11 @@ rune_count :: proc{ rune_count_in_bytes, } +@(require_results) rune_count_in_string :: #force_inline proc(s: string) -> int { return rune_count_in_bytes(transmute([]u8)s) } +@(require_results) rune_count_in_bytes :: proc "contextless" (s: []u8) -> int { count := 0 n := len(s) @@ -360,6 +376,7 @@ rune_count_in_bytes :: proc "contextless" (s: []u8) -> int { } +@(require_results) rune_size :: proc "contextless" (r: rune) -> int { switch { case r < 0: return -1 @@ -381,6 +398,7 @@ full_rune :: proc{ // full_rune_in_bytes reports if the bytes in b begin with a full utf-8 encoding of a rune or not // An invalid encoding is considered a full rune since it will convert as an error rune of width 1 (RUNE_ERROR) +@(require_results) full_rune_in_bytes :: proc "contextless" (b: []byte) -> bool { n := len(b) if n == 0 { @@ -401,6 +419,7 @@ full_rune_in_bytes :: proc "contextless" (b: []byte) -> bool { // full_rune_in_string reports if the bytes in s begin with a full utf-8 encoding of a rune or not // An invalid encoding is considered a full rune since it will convert as an error rune of width 1 (RUNE_ERROR) +@(require_results) full_rune_in_string :: proc "contextless" (s: string) -> bool { return full_rune_in_bytes(transmute([]byte)s) } From 5ce448a8d52bec3c3e8bd44629bfef870e06dac6 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Thu, 2 Oct 2025 07:42:52 +0900 Subject: [PATCH 201/212] core/crypto: Start work on the NIST curves --- core/crypto/_fiat/field_p256r1/field.odin | 346 ++ core/crypto/_fiat/field_p256r1/field64.odin | 501 +++ .../_fiat/field_scalarp256r1/field.odin | 210 + .../_fiat/field_scalarp256r1/field64.odin | 569 +++ core/crypto/_weierstrass/fe.odin | 135 + core/crypto/_weierstrass/point.odin | 548 +++ core/crypto/_weierstrass/point_s11n_sec.odin | 95 + core/crypto/_weierstrass/sc.odin | 76 + core/crypto/_weierstrass/scalar_mul.odin | 204 + core/crypto/_weierstrass/secp256r1_table.odin | 3985 +++++++++++++++++ .../_weierstrass/tools/ecc_gen_tables.odin | 99 + core/crypto/crypto.odin | 3 + .../crypto/test_core_crypto_weierstrass.odin | 486 ++ 13 files changed, 7257 insertions(+) create mode 100644 core/crypto/_fiat/field_p256r1/field.odin create mode 100644 core/crypto/_fiat/field_p256r1/field64.odin create mode 100644 core/crypto/_fiat/field_scalarp256r1/field.odin create mode 100644 core/crypto/_fiat/field_scalarp256r1/field64.odin create mode 100644 core/crypto/_weierstrass/fe.odin create mode 100644 core/crypto/_weierstrass/point.odin create mode 100644 core/crypto/_weierstrass/point_s11n_sec.odin create mode 100644 core/crypto/_weierstrass/sc.odin create mode 100644 core/crypto/_weierstrass/scalar_mul.odin create mode 100644 core/crypto/_weierstrass/secp256r1_table.odin create mode 100644 core/crypto/_weierstrass/tools/ecc_gen_tables.odin create mode 100644 tests/core/crypto/test_core_crypto_weierstrass.odin diff --git a/core/crypto/_fiat/field_p256r1/field.odin b/core/crypto/_fiat/field_p256r1/field.odin new file mode 100644 index 000000000..b1662fd48 --- /dev/null +++ b/core/crypto/_fiat/field_p256r1/field.odin @@ -0,0 +1,346 @@ +package field_p256r1 + +import subtle "core:crypto/_subtle" +import "core:encoding/endian" +import "core:math/bits" +import "core:mem" + +fe_clear :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) { + mem.zero_explicit(arg1, size_of(Montgomery_Domain_Field_Element)) +} + +fe_clear_vec :: proc "contextless" ( + arg1: []^Montgomery_Domain_Field_Element, +) { + for fe in arg1 { + fe_clear(fe) + } +} + +fe_from_bytes :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: []byte, + unsafe_assume_canonical := false, +) -> bool { + ensure_contextless(len(arg1) == 32, "p256r1: invalid fe input buffer") + + // Note: We assume the input is in big-endian. + tmp := Non_Montgomery_Domain_Field_Element { + endian.unchecked_get_u64be(arg1[24:]), + endian.unchecked_get_u64be(arg1[16:]), + endian.unchecked_get_u64be(arg1[8:]), + endian.unchecked_get_u64be(arg1[0:]), + } + defer mem.zero_explicit(&tmp, size_of(tmp)) + + // Check that tmp is in the the range [0, ELL). + if !unsafe_assume_canonical { + _, borrow := bits.sub_u64(ELL[0] - 1, tmp[0], 0) + _, borrow = bits.sub_u64(ELL[1], tmp[1], borrow) + _, borrow = bits.sub_u64(ELL[2], tmp[2], borrow) + _, borrow = bits.sub_u64(ELL[3], tmp[3], borrow) + if borrow != 0 { + return false + } + } + + fe_to_montgomery(out1, &tmp) + + return true +} + +fe_to_bytes :: proc "contextless" (out1: []byte, arg1: ^Montgomery_Domain_Field_Element) { + ensure_contextless(len(out1) == 32, "p256r1: invalid fe output buffer") + + tmp: Non_Montgomery_Domain_Field_Element + fe_from_montgomery(&tmp, arg1) + + // Note: Likewise, output in big-endian. + endian.unchecked_put_u64be(out1[24:], tmp[0]) + endian.unchecked_put_u64be(out1[16:], tmp[1]) + endian.unchecked_put_u64be(out1[8:], tmp[2]) + endian.unchecked_put_u64be(out1[0:], tmp[3]) + + mem.zero_explicit(&tmp, size_of(tmp)) +} + +@(require_results) +fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> int { + tmp: Montgomery_Domain_Field_Element + fe_sub(&tmp, arg1, arg2) + + // This will only underflow iff arg1 == arg2, and we return the borrow, + // which will be 1. + is_eq := subtle.u64_is_zero(fe_non_zero(&tmp)) + + fe_clear(&tmp) + + return int(is_eq) +} + +@(require_results) +fe_is_odd :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> int { + tmp: Non_Montgomery_Domain_Field_Element + defer mem.zero_explicit(&tmp, size_of(tmp)) + + fe_from_montgomery(&tmp, arg1) + return int(tmp[0] & 1) +} + +fe_pow2k :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: ^Montgomery_Domain_Field_Element, + arg2: uint, +) { + // Special case: `arg1^(2 * 0) = 1`, though this should never happen. + if arg2 == 0 { + fe_one(out1) + return + } + + fe_square(out1, arg1) + for _ in 1 ..< arg2 { + fe_square(out1, out1) + } +} + +fe_inv :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + // Inversion computation is derived from the addition chain: + // + // _10 = 2*1 + // _11 = 1 + _10 + // _110 = 2*_11 + // _111 = 1 + _110 + // _111000 = _111 << 3 + // _111111 = _111 + _111000 + // x12 = _111111 << 6 + _111111 + // x15 = x12 << 3 + _111 + // x16 = 2*x15 + 1 + // x32 = x16 << 16 + x16 + // i53 = x32 << 15 + // x47 = x15 + i53 + // i263 = ((i53 << 17 + 1) << 143 + x47) << 47 + // return (x47 + i263) << 2 + // + // Operations: 255 squares 11 multiplies + // + // Generated by github.com/mmcloughlin/addchain v0.4.0. + + // Note: Need to stash `arg1` (`xx`) in the case that `out1`/`arg1` alias, + // as `arg1` is used after `out1` has been altered. + t0, t1, xx: Montgomery_Domain_Field_Element = ---, ---, arg1^ + + // Step 1: z = x^0x2 + fe_square(out1, arg1) + + // Step 2: z = x^0x3 + fe_mul(out1, &xx, out1) + + // Step 3: z = x^0x6 + fe_square(out1, out1) + + // Step 4: z = x^0x7 + fe_mul(out1, &xx, out1) + + // Step 7: t0 = x^0x38 + fe_pow2k(&t0, out1, 3) + + // Step 8: t0 = x^0x3f + fe_mul(&t0, out1, &t0) + + // Step 14: t1 = x^0xfc0 + fe_pow2k(&t1, &t0, 6) + + // Step 15: t0 = x^0xfff + fe_mul(&t0, &t0, &t1) + + // Step 18: t0 = x^0x7ff8 + fe_pow2k(&t0, &t0, 3) + + // Step 19: z = x^0x7fff + fe_mul(out1, out1, &t0) + + // Step 20: t0 = x^0xfffe + fe_square(&t0, out1) + + // Step 21: t0 = x^0xffff + fe_mul(&t0, &xx, &t0) + + // Step 37: t1 = x^0xffff0000 + fe_pow2k(&t1, &t0, 16) + + // Step 38: t0 = x^0xffffffff + fe_mul(&t0, &t0, &t1) + + // Step 53: t0 = x^0x7fffffff8000 + fe_pow2k(&t0, &t0, 15) + + // Step 54: z = x^0x7fffffffffff + fe_mul(out1, out1, &t0) + + // Step 71: t0 = x^0xffffffff00000000 + fe_pow2k(&t0, &t0, 17) + + // Step 72: t0 = x^0xffffffff00000001 + fe_mul(&t0, &xx, &t0) + + // Step 215: t0 = x^0x7fffffff80000000800000000000000000000000000000000000 + fe_pow2k(&t0, &t0, 143) + + // Step 216: t0 = x^0x7fffffff800000008000000000000000000000007fffffffffff + fe_mul(&t0, out1, &t0) + + // Step 263: t0 = x^0x3fffffffc00000004000000000000000000000003fffffffffff800000000000 + fe_pow2k(&t0, &t0, 47) + + // Step 264: z = x^0x3fffffffc00000004000000000000000000000003fffffffffffffffffffffff + fe_mul(out1, out1, &t0) + + // Step 266: z = x^0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc + fe_pow2k(out1, out1, 2) + + fe_mul(out1, out1, &xx) + + fe_clear_vec([]^Montgomery_Domain_Field_Element{&t0, &t1, &xx}) +} + +@(require_results) +fe_sqrt :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) -> int { + // Square root candidate can be derived via exponentiation by `(p + 1) / 4` + // From sage: 28948022302589062190674361737351893382521535853822578548883407827216774463488 + // + // // Inversion computation is derived from the addition chain: + // + // _10 = 2*1 + // _11 = 1 + _10 + // _1100 = _11 << 2 + // _1111 = _11 + _1100 + // _11110000 = _1111 << 4 + // _11111111 = _1111 + _11110000 + // x16 = _11111111 << 8 + _11111111 + // x32 = x16 << 16 + x16 + // return ((x32 << 32 + 1) << 96 + 1) << 94 + // + // Operations: 253 squares 7 multiplies + // + // Generated by github.com/mmcloughlin/addchain v0.4.0. + + // Likewise this tramples over arg1, so stash another copy. + t0, xx: Montgomery_Domain_Field_Element = ---, arg1^ + + // Step 1: z = x^0x2 + fe_square(out1, arg1) + + // Step 2: z = x^0x3 + fe_mul(out1, &xx, out1) + + // Step 4: t0 = x^0xc + fe_pow2k(&t0, &xx, 2) + + // Step 5: z = x^0xf + fe_mul(out1, out1, &t0) + + // Step 9: t0 = x^0xf0 + fe_pow2k(&t0, out1, 4) + + // Step 10: z = x^0xff + fe_mul(out1, out1, &t0) + + // Step 18: t0 = x^0xff00 + fe_pow2k(&t0, out1, 8) + + // Step 19: z = x^0xffff + fe_mul(out1, out1, &t0) + + // Step 35: t0 = x^0xffff0000 + fe_pow2k(&t0, out1, 16) + + // Step 36: z = x^0xffffffff + fe_mul(out1, out1, &t0) + + // Step 68: z = x^0xffffffff00000000 + fe_pow2k(out1, out1, 32) + + // Step 69: z = x^0xffffffff00000001 + fe_mul(out1, &xx, out1) + + // Step 165: z = x^0xffffffff00000001000000000000000000000000 + fe_pow2k(out1, out1, 96) + + // Step 166: z = x^0xffffffff00000001000000000000000000000001 + fe_mul(out1, &xx, out1) + + // Step 260: z = x^0x3fffffffc0000000400000000000000000000000400000000000000000000000 + fe_pow2k(out1, out1, 94) + + // Ensure that our candidate is actually the square root. + check, zero: Montgomery_Domain_Field_Element + fe_square(&check, out1) + + is_valid := fe_equal(&check, &xx) + fe_cond_select(out1, &zero, out1, is_valid) + + fe_clear_vec([]^Montgomery_Domain_Field_Element{&t0, &xx, &check}) + + return is_valid + +} + +fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0 + out1[1] = 0 + out1[2] = 0 + out1[3] = 0 +} + +fe_set :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[0] + x2 := arg1[1] + x3 := arg1[2] + x4 := arg1[3] + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 +} + +@(optimization_mode = "none") +fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Montgomery_Domain_Field_Element, arg1: int) { + mask := (u64(arg1) * 0xffffffffffffffff) + x := (out1[0] ~ out2[0]) & mask + x1, y1 := out1[0] ~ x, out2[0] ~ x + x = (out1[1] ~ out2[1]) & mask + x2, y2 := out1[1] ~ x, out2[1] ~ x + x = (out1[2] ~ out2[2]) & mask + x3, y3 := out1[2] ~ x, out2[2] ~ x + x = (out1[3] ~ out2[3]) & mask + x4, y4 := out1[3] ~ x, out2[3] ~ x + out1[0], out2[0] = x1, y1 + out1[1], out2[1] = x2, y2 + out1[2], out2[2] = x3, y3 + out1[3], out2[3] = x4, y4 +} + +@(optimization_mode = "none") +fe_cond_select :: #force_no_inline proc "contextless" ( + out1, arg1, arg2: ^Montgomery_Domain_Field_Element, + arg3: int, +) { + mask := (u64(arg3) * 0xffffffffffffffff) + x1 := ((mask & arg2[0]) | ((~mask) & arg1[0])) + x2 := ((mask & arg2[1]) | ((~mask) & arg1[1])) + x3 := ((mask & arg2[2]) | ((~mask) & arg1[2])) + x4 := ((mask & arg2[3]) | ((~mask) & arg1[3])) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 +} + +fe_cond_negate :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element, ctrl: int) { + tmp1: Montgomery_Domain_Field_Element = --- + fe_opp(&tmp1, arg1) + fe_cond_select(out1, arg1, &tmp1, ctrl) + + fe_clear(&tmp1) +} diff --git a/core/crypto/_fiat/field_p256r1/field64.odin b/core/crypto/_fiat/field_p256r1/field64.odin new file mode 100644 index 000000000..940f2cd07 --- /dev/null +++ b/core/crypto/_fiat/field_p256r1/field64.odin @@ -0,0 +1,501 @@ +// The BSD 1-Clause License (BSD-1-Clause) +// +// Copyright (c) 2015-2020 the fiat-crypto authors (see the AUTHORS file) +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, +// Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package field_p256r1 + +// The file provides arithmetic on the field Z/(2^256 - 2^224 + 2^192 + 2^96 - 1) +// using a 64-bit Montgomery form internal representation. It is derived +// primarily from the machine generated Golang output from the fiat-crypto +// project. +// +// While the base implementation is provably correct, this implementation +// makes no such claims as the port and optimizations were done by hand. +// +// WARNING: While big-endian is the common representation used for this +// curve, the fiat output uses least-significant-limb first. + +import fiat "core:crypto/_fiat" +import "core:math/bits" + +// ELL is the saturated representation of the field order, least-significant +// limb first. +ELL :: [4]u64{0xffffffffffffffff, 0xffffffff, 0x0, 0xffffffff00000001} + +Montgomery_Domain_Field_Element :: distinct [4]u64 +Non_Montgomery_Domain_Field_Element :: distinct [4]u64 + +fe_mul :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[0] + x6, x5 := bits.mul_u64(x4, arg2[3]) + x8, x7 := bits.mul_u64(x4, arg2[2]) + x10, x9 := bits.mul_u64(x4, arg2[1]) + x12, x11 := bits.mul_u64(x4, arg2[0]) + x13, x14 := bits.add_u64(x12, x9, u64(0x0)) + x15, x16 := bits.add_u64(x10, x7, u64(fiat.u1(x14))) + x17, x18 := bits.add_u64(x8, x5, u64(fiat.u1(x16))) + x19 := (u64(fiat.u1(x18)) + x6) + x21, x20 := bits.mul_u64(x11, 0xffffffff00000001) + x23, x22 := bits.mul_u64(x11, 0xffffffff) + x25, x24 := bits.mul_u64(x11, 0xffffffffffffffff) + x26, x27 := bits.add_u64(x25, x22, u64(0x0)) + x28 := (u64(fiat.u1(x27)) + x23) + _, x30 := bits.add_u64(x11, x24, u64(0x0)) + x31, x32 := bits.add_u64(x13, x26, u64(fiat.u1(x30))) + x33, x34 := bits.add_u64(x15, x28, u64(fiat.u1(x32))) + x35, x36 := bits.add_u64(x17, x20, u64(fiat.u1(x34))) + x37, x38 := bits.add_u64(x19, x21, u64(fiat.u1(x36))) + x40, x39 := bits.mul_u64(x1, arg2[3]) + x42, x41 := bits.mul_u64(x1, arg2[2]) + x44, x43 := bits.mul_u64(x1, arg2[1]) + x46, x45 := bits.mul_u64(x1, arg2[0]) + x47, x48 := bits.add_u64(x46, x43, u64(0x0)) + x49, x50 := bits.add_u64(x44, x41, u64(fiat.u1(x48))) + x51, x52 := bits.add_u64(x42, x39, u64(fiat.u1(x50))) + x53 := (u64(fiat.u1(x52)) + x40) + x54, x55 := bits.add_u64(x31, x45, u64(0x0)) + x56, x57 := bits.add_u64(x33, x47, u64(fiat.u1(x55))) + x58, x59 := bits.add_u64(x35, x49, u64(fiat.u1(x57))) + x60, x61 := bits.add_u64(x37, x51, u64(fiat.u1(x59))) + x62, x63 := bits.add_u64(u64(fiat.u1(x38)), x53, u64(fiat.u1(x61))) + x65, x64 := bits.mul_u64(x54, 0xffffffff00000001) + x67, x66 := bits.mul_u64(x54, 0xffffffff) + x69, x68 := bits.mul_u64(x54, 0xffffffffffffffff) + x70, x71 := bits.add_u64(x69, x66, u64(0x0)) + x72 := (u64(fiat.u1(x71)) + x67) + _, x74 := bits.add_u64(x54, x68, u64(0x0)) + x75, x76 := bits.add_u64(x56, x70, u64(fiat.u1(x74))) + x77, x78 := bits.add_u64(x58, x72, u64(fiat.u1(x76))) + x79, x80 := bits.add_u64(x60, x64, u64(fiat.u1(x78))) + x81, x82 := bits.add_u64(x62, x65, u64(fiat.u1(x80))) + x83 := (u64(fiat.u1(x82)) + u64(fiat.u1(x63))) + x85, x84 := bits.mul_u64(x2, arg2[3]) + x87, x86 := bits.mul_u64(x2, arg2[2]) + x89, x88 := bits.mul_u64(x2, arg2[1]) + x91, x90 := bits.mul_u64(x2, arg2[0]) + x92, x93 := bits.add_u64(x91, x88, u64(0x0)) + x94, x95 := bits.add_u64(x89, x86, u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x87, x84, u64(fiat.u1(x95))) + x98 := (u64(fiat.u1(x97)) + x85) + x99, x100 := bits.add_u64(x75, x90, u64(0x0)) + x101, x102 := bits.add_u64(x77, x92, u64(fiat.u1(x100))) + x103, x104 := bits.add_u64(x79, x94, u64(fiat.u1(x102))) + x105, x106 := bits.add_u64(x81, x96, u64(fiat.u1(x104))) + x107, x108 := bits.add_u64(x83, x98, u64(fiat.u1(x106))) + x110, x109 := bits.mul_u64(x99, 0xffffffff00000001) + x112, x111 := bits.mul_u64(x99, 0xffffffff) + x114, x113 := bits.mul_u64(x99, 0xffffffffffffffff) + x115, x116 := bits.add_u64(x114, x111, u64(0x0)) + x117 := (u64(fiat.u1(x116)) + x112) + _, x119 := bits.add_u64(x99, x113, u64(0x0)) + x120, x121 := bits.add_u64(x101, x115, u64(fiat.u1(x119))) + x122, x123 := bits.add_u64(x103, x117, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x105, x109, u64(fiat.u1(x123))) + x126, x127 := bits.add_u64(x107, x110, u64(fiat.u1(x125))) + x128 := (u64(fiat.u1(x127)) + u64(fiat.u1(x108))) + x130, x129 := bits.mul_u64(x3, arg2[3]) + x132, x131 := bits.mul_u64(x3, arg2[2]) + x134, x133 := bits.mul_u64(x3, arg2[1]) + x136, x135 := bits.mul_u64(x3, arg2[0]) + x137, x138 := bits.add_u64(x136, x133, u64(0x0)) + x139, x140 := bits.add_u64(x134, x131, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x132, x129, u64(fiat.u1(x140))) + x143 := (u64(fiat.u1(x142)) + x130) + x144, x145 := bits.add_u64(x120, x135, u64(0x0)) + x146, x147 := bits.add_u64(x122, x137, u64(fiat.u1(x145))) + x148, x149 := bits.add_u64(x124, x139, u64(fiat.u1(x147))) + x150, x151 := bits.add_u64(x126, x141, u64(fiat.u1(x149))) + x152, x153 := bits.add_u64(x128, x143, u64(fiat.u1(x151))) + x155, x154 := bits.mul_u64(x144, 0xffffffff00000001) + x157, x156 := bits.mul_u64(x144, 0xffffffff) + x159, x158 := bits.mul_u64(x144, 0xffffffffffffffff) + x160, x161 := bits.add_u64(x159, x156, u64(0x0)) + x162 := (u64(fiat.u1(x161)) + x157) + _, x164 := bits.add_u64(x144, x158, u64(0x0)) + x165, x166 := bits.add_u64(x146, x160, u64(fiat.u1(x164))) + x167, x168 := bits.add_u64(x148, x162, u64(fiat.u1(x166))) + x169, x170 := bits.add_u64(x150, x154, u64(fiat.u1(x168))) + x171, x172 := bits.add_u64(x152, x155, u64(fiat.u1(x170))) + x173 := (u64(fiat.u1(x172)) + u64(fiat.u1(x153))) + x174, x175 := bits.sub_u64(x165, 0xffffffffffffffff, u64(0x0)) + x176, x177 := bits.sub_u64(x167, 0xffffffff, u64(fiat.u1(x175))) + x178, x179 := bits.sub_u64(x169, u64(0x0), u64(fiat.u1(x177))) + x180, x181 := bits.sub_u64(x171, 0xffffffff00000001, u64(fiat.u1(x179))) + _, x183 := bits.sub_u64(x173, u64(0x0), u64(fiat.u1(x181))) + x184 := fiat.cmovznz_u64(fiat.u1(x183), x174, x165) + x185 := fiat.cmovznz_u64(fiat.u1(x183), x176, x167) + x186 := fiat.cmovznz_u64(fiat.u1(x183), x178, x169) + x187 := fiat.cmovznz_u64(fiat.u1(x183), x180, x171) + out1[0] = x184 + out1[1] = x185 + out1[2] = x186 + out1[3] = x187 +} + +fe_square :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[0] + x6, x5 := bits.mul_u64(x4, arg1[3]) + x8, x7 := bits.mul_u64(x4, arg1[2]) + x10, x9 := bits.mul_u64(x4, arg1[1]) + x12, x11 := bits.mul_u64(x4, arg1[0]) + x13, x14 := bits.add_u64(x12, x9, u64(0x0)) + x15, x16 := bits.add_u64(x10, x7, u64(fiat.u1(x14))) + x17, x18 := bits.add_u64(x8, x5, u64(fiat.u1(x16))) + x19 := (u64(fiat.u1(x18)) + x6) + x21, x20 := bits.mul_u64(x11, 0xffffffff00000001) + x23, x22 := bits.mul_u64(x11, 0xffffffff) + x25, x24 := bits.mul_u64(x11, 0xffffffffffffffff) + x26, x27 := bits.add_u64(x25, x22, u64(0x0)) + x28 := (u64(fiat.u1(x27)) + x23) + _, x30 := bits.add_u64(x11, x24, u64(0x0)) + x31, x32 := bits.add_u64(x13, x26, u64(fiat.u1(x30))) + x33, x34 := bits.add_u64(x15, x28, u64(fiat.u1(x32))) + x35, x36 := bits.add_u64(x17, x20, u64(fiat.u1(x34))) + x37, x38 := bits.add_u64(x19, x21, u64(fiat.u1(x36))) + x40, x39 := bits.mul_u64(x1, arg1[3]) + x42, x41 := bits.mul_u64(x1, arg1[2]) + x44, x43 := bits.mul_u64(x1, arg1[1]) + x46, x45 := bits.mul_u64(x1, arg1[0]) + x47, x48 := bits.add_u64(x46, x43, u64(0x0)) + x49, x50 := bits.add_u64(x44, x41, u64(fiat.u1(x48))) + x51, x52 := bits.add_u64(x42, x39, u64(fiat.u1(x50))) + x53 := (u64(fiat.u1(x52)) + x40) + x54, x55 := bits.add_u64(x31, x45, u64(0x0)) + x56, x57 := bits.add_u64(x33, x47, u64(fiat.u1(x55))) + x58, x59 := bits.add_u64(x35, x49, u64(fiat.u1(x57))) + x60, x61 := bits.add_u64(x37, x51, u64(fiat.u1(x59))) + x62, x63 := bits.add_u64(u64(fiat.u1(x38)), x53, u64(fiat.u1(x61))) + x65, x64 := bits.mul_u64(x54, 0xffffffff00000001) + x67, x66 := bits.mul_u64(x54, 0xffffffff) + x69, x68 := bits.mul_u64(x54, 0xffffffffffffffff) + x70, x71 := bits.add_u64(x69, x66, u64(0x0)) + x72 := (u64(fiat.u1(x71)) + x67) + _, x74 := bits.add_u64(x54, x68, u64(0x0)) + x75, x76 := bits.add_u64(x56, x70, u64(fiat.u1(x74))) + x77, x78 := bits.add_u64(x58, x72, u64(fiat.u1(x76))) + x79, x80 := bits.add_u64(x60, x64, u64(fiat.u1(x78))) + x81, x82 := bits.add_u64(x62, x65, u64(fiat.u1(x80))) + x83 := (u64(fiat.u1(x82)) + u64(fiat.u1(x63))) + x85, x84 := bits.mul_u64(x2, arg1[3]) + x87, x86 := bits.mul_u64(x2, arg1[2]) + x89, x88 := bits.mul_u64(x2, arg1[1]) + x91, x90 := bits.mul_u64(x2, arg1[0]) + x92, x93 := bits.add_u64(x91, x88, u64(0x0)) + x94, x95 := bits.add_u64(x89, x86, u64(fiat.u1(x93))) + x96, x97 := bits.add_u64(x87, x84, u64(fiat.u1(x95))) + x98 := (u64(fiat.u1(x97)) + x85) + x99, x100 := bits.add_u64(x75, x90, u64(0x0)) + x101, x102 := bits.add_u64(x77, x92, u64(fiat.u1(x100))) + x103, x104 := bits.add_u64(x79, x94, u64(fiat.u1(x102))) + x105, x106 := bits.add_u64(x81, x96, u64(fiat.u1(x104))) + x107, x108 := bits.add_u64(x83, x98, u64(fiat.u1(x106))) + x110, x109 := bits.mul_u64(x99, 0xffffffff00000001) + x112, x111 := bits.mul_u64(x99, 0xffffffff) + x114, x113 := bits.mul_u64(x99, 0xffffffffffffffff) + x115, x116 := bits.add_u64(x114, x111, u64(0x0)) + x117 := (u64(fiat.u1(x116)) + x112) + _, x119 := bits.add_u64(x99, x113, u64(0x0)) + x120, x121 := bits.add_u64(x101, x115, u64(fiat.u1(x119))) + x122, x123 := bits.add_u64(x103, x117, u64(fiat.u1(x121))) + x124, x125 := bits.add_u64(x105, x109, u64(fiat.u1(x123))) + x126, x127 := bits.add_u64(x107, x110, u64(fiat.u1(x125))) + x128 := (u64(fiat.u1(x127)) + u64(fiat.u1(x108))) + x130, x129 := bits.mul_u64(x3, arg1[3]) + x132, x131 := bits.mul_u64(x3, arg1[2]) + x134, x133 := bits.mul_u64(x3, arg1[1]) + x136, x135 := bits.mul_u64(x3, arg1[0]) + x137, x138 := bits.add_u64(x136, x133, u64(0x0)) + x139, x140 := bits.add_u64(x134, x131, u64(fiat.u1(x138))) + x141, x142 := bits.add_u64(x132, x129, u64(fiat.u1(x140))) + x143 := (u64(fiat.u1(x142)) + x130) + x144, x145 := bits.add_u64(x120, x135, u64(0x0)) + x146, x147 := bits.add_u64(x122, x137, u64(fiat.u1(x145))) + x148, x149 := bits.add_u64(x124, x139, u64(fiat.u1(x147))) + x150, x151 := bits.add_u64(x126, x141, u64(fiat.u1(x149))) + x152, x153 := bits.add_u64(x128, x143, u64(fiat.u1(x151))) + x155, x154 := bits.mul_u64(x144, 0xffffffff00000001) + x157, x156 := bits.mul_u64(x144, 0xffffffff) + x159, x158 := bits.mul_u64(x144, 0xffffffffffffffff) + x160, x161 := bits.add_u64(x159, x156, u64(0x0)) + x162 := (u64(fiat.u1(x161)) + x157) + _, x164 := bits.add_u64(x144, x158, u64(0x0)) + x165, x166 := bits.add_u64(x146, x160, u64(fiat.u1(x164))) + x167, x168 := bits.add_u64(x148, x162, u64(fiat.u1(x166))) + x169, x170 := bits.add_u64(x150, x154, u64(fiat.u1(x168))) + x171, x172 := bits.add_u64(x152, x155, u64(fiat.u1(x170))) + x173 := (u64(fiat.u1(x172)) + u64(fiat.u1(x153))) + x174, x175 := bits.sub_u64(x165, 0xffffffffffffffff, u64(0x0)) + x176, x177 := bits.sub_u64(x167, 0xffffffff, u64(fiat.u1(x175))) + x178, x179 := bits.sub_u64(x169, u64(0x0), u64(fiat.u1(x177))) + x180, x181 := bits.sub_u64(x171, 0xffffffff00000001, u64(fiat.u1(x179))) + _, x183 := bits.sub_u64(x173, u64(0x0), u64(fiat.u1(x181))) + x184 := fiat.cmovznz_u64(fiat.u1(x183), x174, x165) + x185 := fiat.cmovznz_u64(fiat.u1(x183), x176, x167) + x186 := fiat.cmovznz_u64(fiat.u1(x183), x178, x169) + x187 := fiat.cmovznz_u64(fiat.u1(x183), x180, x171) + out1[0] = x184 + out1[1] = x185 + out1[2] = x186 + out1[3] = x187 +} + +fe_add :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.add_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.add_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.add_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.add_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9, x10 := bits.sub_u64(x1, 0xffffffffffffffff, u64(0x0)) + x11, x12 := bits.sub_u64(x3, 0xffffffff, u64(fiat.u1(x10))) + x13, x14 := bits.sub_u64(x5, u64(0x0), u64(fiat.u1(x12))) + x15, x16 := bits.sub_u64(x7, 0xffffffff00000001, u64(fiat.u1(x14))) + _, x18 := bits.sub_u64(u64(fiat.u1(x8)), u64(0x0), u64(fiat.u1(x16))) + x19 := fiat.cmovznz_u64(fiat.u1(x18), x9, x1) + x20 := fiat.cmovznz_u64(fiat.u1(x18), x11, x3) + x21 := fiat.cmovznz_u64(fiat.u1(x18), x13, x5) + x22 := fiat.cmovznz_u64(fiat.u1(x18), x15, x7) + out1[0] = x19 + out1[1] = x20 + out1[2] = x21 + out1[3] = x22 +} + +fe_sub :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.sub_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9 := fiat.cmovznz_u64(fiat.u1(x8), u64(0x0), 0xffffffffffffffff) + x10, x11 := bits.add_u64(x1, x9, u64(0x0)) + x12, x13 := bits.add_u64(x3, (x9 & 0xffffffff), u64(fiat.u1(x11))) + x14, x15 := bits.add_u64(x5, u64(0x0), u64(fiat.u1(x13))) + x16, _ := bits.add_u64(x7, (x9 & 0xffffffff00000001), u64(fiat.u1(x15))) + out1[0] = x10 + out1[1] = x12 + out1[2] = x14 + out1[3] = x16 +} + +fe_opp :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(u64(0x0), arg1[0], u64(0x0)) + x3, x4 := bits.sub_u64(u64(0x0), arg1[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(u64(0x0), arg1[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(u64(0x0), arg1[3], u64(fiat.u1(x6))) + x9 := fiat.cmovznz_u64(fiat.u1(x8), u64(0x0), 0xffffffffffffffff) + x10, x11 := bits.add_u64(x1, x9, u64(0x0)) + x12, x13 := bits.add_u64(x3, (x9 & 0xffffffff), u64(fiat.u1(x11))) + x14, x15 := bits.add_u64(x5, u64(0x0), u64(fiat.u1(x13))) + x16, _ := bits.add_u64(x7, (x9 & 0xffffffff00000001), u64(fiat.u1(x15))) + out1[0] = x10 + out1[1] = x12 + out1[2] = x14 + out1[3] = x16 +} + +fe_one :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0x1 + out1[1] = 0xffffffff00000000 + out1[2] = 0xffffffffffffffff + out1[3] = 0xfffffffe +} + +fe_non_zero :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> u64 { + return arg1[0] | (arg1[1] | (arg1[2] | arg1[3])) +} + +@(optimization_mode = "none") +fe_cond_assign :: #force_no_inline proc "contextless" ( + out1, arg1: ^Montgomery_Domain_Field_Element, + arg2: int, +) { + x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0]) + x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1]) + x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2]) + x4 := fiat.cmovznz_u64(fiat.u1(arg2), out1[3], arg1[3]) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 +} + +fe_from_montgomery :: proc "contextless" ( + out1: ^Non_Montgomery_Domain_Field_Element, + arg1: ^Montgomery_Domain_Field_Element, +) { + x1 := arg1[0] + x3, x2 := bits.mul_u64(x1, 0xffffffff00000001) + x5, x4 := bits.mul_u64(x1, 0xffffffff) + x7, x6 := bits.mul_u64(x1, 0xffffffffffffffff) + x8, x9 := bits.add_u64(x7, x4, u64(0x0)) + _, x11 := bits.add_u64(x1, x6, u64(0x0)) + x12, x13 := bits.add_u64(u64(0x0), x8, u64(fiat.u1(x11))) + x14, x15 := bits.add_u64(x12, arg1[1], u64(0x0)) + x17, x16 := bits.mul_u64(x14, 0xffffffff00000001) + x19, x18 := bits.mul_u64(x14, 0xffffffff) + x21, x20 := bits.mul_u64(x14, 0xffffffffffffffff) + x22, x23 := bits.add_u64(x21, x18, u64(0x0)) + _, x25 := bits.add_u64(x14, x20, u64(0x0)) + x26, x27 := bits.add_u64((u64(fiat.u1(x15)) + (u64(fiat.u1(x13)) + (u64(fiat.u1(x9)) + x5))), x22, u64(fiat.u1(x25))) + x28, x29 := bits.add_u64(x2, (u64(fiat.u1(x23)) + x19), u64(fiat.u1(x27))) + x30, x31 := bits.add_u64(x3, x16, u64(fiat.u1(x29))) + x32, x33 := bits.add_u64(x26, arg1[2], u64(0x0)) + x34, x35 := bits.add_u64(x28, u64(0x0), u64(fiat.u1(x33))) + x36, x37 := bits.add_u64(x30, u64(0x0), u64(fiat.u1(x35))) + x39, x38 := bits.mul_u64(x32, 0xffffffff00000001) + x41, x40 := bits.mul_u64(x32, 0xffffffff) + x43, x42 := bits.mul_u64(x32, 0xffffffffffffffff) + x44, x45 := bits.add_u64(x43, x40, u64(0x0)) + _, x47 := bits.add_u64(x32, x42, u64(0x0)) + x48, x49 := bits.add_u64(x34, x44, u64(fiat.u1(x47))) + x50, x51 := bits.add_u64(x36, (u64(fiat.u1(x45)) + x41), u64(fiat.u1(x49))) + x52, x53 := bits.add_u64((u64(fiat.u1(x37)) + (u64(fiat.u1(x31)) + x17)), x38, u64(fiat.u1(x51))) + x54, x55 := bits.add_u64(x48, arg1[3], u64(0x0)) + x56, x57 := bits.add_u64(x50, u64(0x0), u64(fiat.u1(x55))) + x58, x59 := bits.add_u64(x52, u64(0x0), u64(fiat.u1(x57))) + x61, x60 := bits.mul_u64(x54, 0xffffffff00000001) + x63, x62 := bits.mul_u64(x54, 0xffffffff) + x65, x64 := bits.mul_u64(x54, 0xffffffffffffffff) + x66, x67 := bits.add_u64(x65, x62, u64(0x0)) + _, x69 := bits.add_u64(x54, x64, u64(0x0)) + x70, x71 := bits.add_u64(x56, x66, u64(fiat.u1(x69))) + x72, x73 := bits.add_u64(x58, (u64(fiat.u1(x67)) + x63), u64(fiat.u1(x71))) + x74, x75 := bits.add_u64((u64(fiat.u1(x59)) + (u64(fiat.u1(x53)) + x39)), x60, u64(fiat.u1(x73))) + x76 := (u64(fiat.u1(x75)) + x61) + x77, x78 := bits.sub_u64(x70, 0xffffffffffffffff, u64(0x0)) + x79, x80 := bits.sub_u64(x72, 0xffffffff, u64(fiat.u1(x78))) + x81, x82 := bits.sub_u64(x74, u64(0x0), u64(fiat.u1(x80))) + x83, x84 := bits.sub_u64(x76, 0xffffffff00000001, u64(fiat.u1(x82))) + _, x86 := bits.sub_u64(u64(0x0), u64(0x0), u64(fiat.u1(x84))) + x87 := fiat.cmovznz_u64(fiat.u1(x86), x77, x70) + x88 := fiat.cmovznz_u64(fiat.u1(x86), x79, x72) + x89 := fiat.cmovznz_u64(fiat.u1(x86), x81, x74) + x90 := fiat.cmovznz_u64(fiat.u1(x86), x83, x76) + out1[0] = x87 + out1[1] = x88 + out1[2] = x89 + out1[3] = x90 +} + +fe_to_montgomery :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: ^Non_Montgomery_Domain_Field_Element, +) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[0] + x6, x5 := bits.mul_u64(x4, 0x4fffffffd) + x8, x7 := bits.mul_u64(x4, 0xfffffffffffffffe) + x10, x9 := bits.mul_u64(x4, 0xfffffffbffffffff) + x12, x11 := bits.mul_u64(x4, 0x3) + x13, x14 := bits.add_u64(x12, x9, u64(0x0)) + x15, x16 := bits.add_u64(x10, x7, u64(fiat.u1(x14))) + x17, x18 := bits.add_u64(x8, x5, u64(fiat.u1(x16))) + x20, x19 := bits.mul_u64(x11, 0xffffffff00000001) + x22, x21 := bits.mul_u64(x11, 0xffffffff) + x24, x23 := bits.mul_u64(x11, 0xffffffffffffffff) + x25, x26 := bits.add_u64(x24, x21, u64(0x0)) + _, x28 := bits.add_u64(x11, x23, u64(0x0)) + x29, x30 := bits.add_u64(x13, x25, u64(fiat.u1(x28))) + x31, x32 := bits.add_u64(x15, (u64(fiat.u1(x26)) + x22), u64(fiat.u1(x30))) + x33, x34 := bits.add_u64(x17, x19, u64(fiat.u1(x32))) + x35, x36 := bits.add_u64((u64(fiat.u1(x18)) + x6), x20, u64(fiat.u1(x34))) + x38, x37 := bits.mul_u64(x1, 0x4fffffffd) + x40, x39 := bits.mul_u64(x1, 0xfffffffffffffffe) + x42, x41 := bits.mul_u64(x1, 0xfffffffbffffffff) + x44, x43 := bits.mul_u64(x1, 0x3) + x45, x46 := bits.add_u64(x44, x41, u64(0x0)) + x47, x48 := bits.add_u64(x42, x39, u64(fiat.u1(x46))) + x49, x50 := bits.add_u64(x40, x37, u64(fiat.u1(x48))) + x51, x52 := bits.add_u64(x29, x43, u64(0x0)) + x53, x54 := bits.add_u64(x31, x45, u64(fiat.u1(x52))) + x55, x56 := bits.add_u64(x33, x47, u64(fiat.u1(x54))) + x57, x58 := bits.add_u64(x35, x49, u64(fiat.u1(x56))) + x60, x59 := bits.mul_u64(x51, 0xffffffff00000001) + x62, x61 := bits.mul_u64(x51, 0xffffffff) + x64, x63 := bits.mul_u64(x51, 0xffffffffffffffff) + x65, x66 := bits.add_u64(x64, x61, u64(0x0)) + _, x68 := bits.add_u64(x51, x63, u64(0x0)) + x69, x70 := bits.add_u64(x53, x65, u64(fiat.u1(x68))) + x71, x72 := bits.add_u64(x55, (u64(fiat.u1(x66)) + x62), u64(fiat.u1(x70))) + x73, x74 := bits.add_u64(x57, x59, u64(fiat.u1(x72))) + x75, x76 := bits.add_u64(((u64(fiat.u1(x58)) + u64(fiat.u1(x36))) + (u64(fiat.u1(x50)) + x38)), x60, u64(fiat.u1(x74))) + x78, x77 := bits.mul_u64(x2, 0x4fffffffd) + x80, x79 := bits.mul_u64(x2, 0xfffffffffffffffe) + x82, x81 := bits.mul_u64(x2, 0xfffffffbffffffff) + x84, x83 := bits.mul_u64(x2, 0x3) + x85, x86 := bits.add_u64(x84, x81, u64(0x0)) + x87, x88 := bits.add_u64(x82, x79, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x80, x77, u64(fiat.u1(x88))) + x91, x92 := bits.add_u64(x69, x83, u64(0x0)) + x93, x94 := bits.add_u64(x71, x85, u64(fiat.u1(x92))) + x95, x96 := bits.add_u64(x73, x87, u64(fiat.u1(x94))) + x97, x98 := bits.add_u64(x75, x89, u64(fiat.u1(x96))) + x100, x99 := bits.mul_u64(x91, 0xffffffff00000001) + x102, x101 := bits.mul_u64(x91, 0xffffffff) + x104, x103 := bits.mul_u64(x91, 0xffffffffffffffff) + x105, x106 := bits.add_u64(x104, x101, u64(0x0)) + _, x108 := bits.add_u64(x91, x103, u64(0x0)) + x109, x110 := bits.add_u64(x93, x105, u64(fiat.u1(x108))) + x111, x112 := bits.add_u64(x95, (u64(fiat.u1(x106)) + x102), u64(fiat.u1(x110))) + x113, x114 := bits.add_u64(x97, x99, u64(fiat.u1(x112))) + x115, x116 := bits.add_u64(((u64(fiat.u1(x98)) + u64(fiat.u1(x76))) + (u64(fiat.u1(x90)) + x78)), x100, u64(fiat.u1(x114))) + x118, x117 := bits.mul_u64(x3, 0x4fffffffd) + x120, x119 := bits.mul_u64(x3, 0xfffffffffffffffe) + x122, x121 := bits.mul_u64(x3, 0xfffffffbffffffff) + x124, x123 := bits.mul_u64(x3, 0x3) + x125, x126 := bits.add_u64(x124, x121, u64(0x0)) + x127, x128 := bits.add_u64(x122, x119, u64(fiat.u1(x126))) + x129, x130 := bits.add_u64(x120, x117, u64(fiat.u1(x128))) + x131, x132 := bits.add_u64(x109, x123, u64(0x0)) + x133, x134 := bits.add_u64(x111, x125, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x113, x127, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(x115, x129, u64(fiat.u1(x136))) + x140, x139 := bits.mul_u64(x131, 0xffffffff00000001) + x142, x141 := bits.mul_u64(x131, 0xffffffff) + x144, x143 := bits.mul_u64(x131, 0xffffffffffffffff) + x145, x146 := bits.add_u64(x144, x141, u64(0x0)) + _, x148 := bits.add_u64(x131, x143, u64(0x0)) + x149, x150 := bits.add_u64(x133, x145, u64(fiat.u1(x148))) + x151, x152 := bits.add_u64(x135, (u64(fiat.u1(x146)) + x142), u64(fiat.u1(x150))) + x153, x154 := bits.add_u64(x137, x139, u64(fiat.u1(x152))) + x155, x156 := bits.add_u64(((u64(fiat.u1(x138)) + u64(fiat.u1(x116))) + (u64(fiat.u1(x130)) + x118)), x140, u64(fiat.u1(x154))) + x157, x158 := bits.sub_u64(x149, 0xffffffffffffffff, u64(0x0)) + x159, x160 := bits.sub_u64(x151, 0xffffffff, u64(fiat.u1(x158))) + x161, x162 := bits.sub_u64(x153, u64(0x0), u64(fiat.u1(x160))) + x163, x164 := bits.sub_u64(x155, 0xffffffff00000001, u64(fiat.u1(x162))) + _, x166 := bits.sub_u64(u64(fiat.u1(x156)), u64(0x0), u64(fiat.u1(x164))) + x167 := fiat.cmovznz_u64(fiat.u1(x166), x157, x149) + x168 := fiat.cmovznz_u64(fiat.u1(x166), x159, x151) + x169 := fiat.cmovznz_u64(fiat.u1(x166), x161, x153) + x170 := fiat.cmovznz_u64(fiat.u1(x166), x163, x155) + out1[0] = x167 + out1[1] = x168 + out1[2] = x169 + out1[3] = x170 +} diff --git a/core/crypto/_fiat/field_scalarp256r1/field.odin b/core/crypto/_fiat/field_scalarp256r1/field.odin new file mode 100644 index 000000000..73c01fb46 --- /dev/null +++ b/core/crypto/_fiat/field_scalarp256r1/field.odin @@ -0,0 +1,210 @@ +package field_scalarp256r1 + +import subtle "core:crypto/_subtle" +import "core:encoding/endian" +import "core:math/bits" +import "core:mem" + +@(private, rodata) +TWO_192 := Montgomery_Domain_Field_Element{ + 2482910415990817935, + 2879494685571067143, + 8732918506673730078, + 85565669603516024, +} +@(private, rodata) +TWO_384 := Montgomery_Domain_Field_Element{ + 2127524300190691059, + 17014302137236182484, + 16604910261202196099, + 3621421107472562910, +} +// 2^384 % p (From sage) +// 0x431905529c0166ce652e96b7ccca0a99679b73e19ad16947f01cf013fc632551 + +fe_clear :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) { + mem.zero_explicit(arg1, size_of(Montgomery_Domain_Field_Element)) +} + +fe_clear_vec :: proc "contextless" ( + arg1: []^Montgomery_Domain_Field_Element, +) { + for fe in arg1 { + fe_clear(fe) + } +} + +fe_from_bytes :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: []byte, +) -> bool { + ensure_contextless(len(out1) <= 64, "p256r1: invalid scalar input buffer") + + is_canonical := false + s_len := len(arg1) + switch { + case s_len < 32: + // No way this can be greater than the order. + fe_unchecked_set(out1, arg1) + is_canonical = true + case s_len == 32: + // It is quite likely that a reduction mod p is required, + // as the order of the curve is sufficiently smaller than + // 2^256-1, so just check if we actually needed to reduced + // and do the reduction anyway, so that things that require + // canonical scalars can reject non-canonical encodings. + is_canonical = fe_is_canonical(arg1) + fallthrough + case: + // Use Frank Denis' trick, as documented by Filippo Valsorda + // at https://words.filippo.io/dispatches/wide-reduction/ + // + // "I represent the value as a+b*2^192+c*2^384" + // + // Note: Omitting the `c` computation is fine as, reduction + // being length dependent provides no useful timing information. + + // Zero extend to 512-bits. + src_512: [64]byte + copy(src_512[64-s_len:], arg1) + defer mem.zero_explicit(&src_512, size_of(src_512)) + + fe_unchecked_set(out1, src_512[40:]) // a + b: Montgomery_Domain_Field_Element + fe_unchecked_set(&b, src_512[16:40]) // b + + fe_mul(&b, &b, &TWO_192) + fe_add(out1, out1, &b) + if s_len >= 48 { + c: Montgomery_Domain_Field_Element + fe_unchecked_set(&c, src_512[:16]) // c + fe_mul(&c, &c, &TWO_384) + fe_add(out1, out1, &c) + + fe_clear(&c) + } + + fe_clear(&b) + } + + return !is_canonical +} + +@(private) +fe_is_canonical :: proc "contextless" (arg1: []byte) -> bool { + _, borrow := bits.sub_u64(ELL[0] - 1, endian.unchecked_get_u64be(arg1[24:]), 0) + _, borrow = bits.sub_u64(ELL[1], endian.unchecked_get_u64be(arg1[16:]), borrow) + _, borrow = bits.sub_u64(ELL[2], endian.unchecked_get_u64be(arg1[8:]), borrow) + _, borrow = bits.sub_u64(ELL[3], endian.unchecked_get_u64be(arg1[0:]), borrow) + return borrow == 0 +} + +@(private) +fe_unchecked_set :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element, arg1: []byte) { + arg1_256: [32]byte + defer mem.zero_explicit(&arg1_256, size_of(arg1_256)) + copy(arg1_256[32-len(arg1):], arg1) + + tmp := Non_Montgomery_Domain_Field_Element { + endian.unchecked_get_u64be(arg1_256[24:]), + endian.unchecked_get_u64be(arg1_256[16:]), + endian.unchecked_get_u64be(arg1_256[8:]), + endian.unchecked_get_u64be(arg1_256[0:]), + } + defer mem.zero_explicit(&tmp, size_of(tmp)) + + fe_to_montgomery(out1, &tmp) +} + +fe_to_bytes :: proc "contextless" (out1: []byte, arg1: ^Montgomery_Domain_Field_Element) { + ensure_contextless(len(out1) == 32, "p256r1: invalid scalar output buffer") + + tmp: Non_Montgomery_Domain_Field_Element + fe_from_montgomery(&tmp, arg1) + + // Note: Likewise, output in big-endian. + endian.unchecked_put_u64be(out1[24:], tmp[0]) + endian.unchecked_put_u64be(out1[16:], tmp[1]) + endian.unchecked_put_u64be(out1[8:], tmp[2]) + endian.unchecked_put_u64be(out1[0:], tmp[3]) + + mem.zero_explicit(&tmp, size_of(tmp)) +} + +fe_equal :: proc "contextless" (arg1, arg2: ^Montgomery_Domain_Field_Element) -> int { + tmp: Montgomery_Domain_Field_Element + fe_sub(&tmp, arg1, arg2) + + is_eq := subtle.u64_is_zero(fe_non_zero(&tmp)) + + fe_clear(&tmp) + + return int(is_eq) +} + +fe_is_odd :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> int { + tmp: Non_Montgomery_Domain_Field_Element + defer mem.zero_explicit(&tmp, size_of(tmp)) + + fe_from_montgomery(&tmp, arg1) + return int(tmp[0] & 1) +} + +fe_zero :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0 + out1[1] = 0 + out1[2] = 0 + out1[3] = 0 +} + +fe_set :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[0] + x2 := arg1[1] + x3 := arg1[2] + x4 := arg1[3] + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 +} + +@(optimization_mode = "none") +fe_cond_swap :: #force_no_inline proc "contextless" (out1, out2: ^Montgomery_Domain_Field_Element, arg1: int) { + mask := (u64(arg1) * 0xffffffffffffffff) + x := (out1[0] ~ out2[0]) & mask + x1, y1 := out1[0] ~ x, out2[0] ~ x + x = (out1[1] ~ out2[1]) & mask + x2, y2 := out1[1] ~ x, out2[1] ~ x + x = (out1[2] ~ out2[2]) & mask + x3, y3 := out1[2] ~ x, out2[2] ~ x + x = (out1[3] ~ out2[3]) & mask + x4, y4 := out1[3] ~ x, out2[3] ~ x + out1[0], out2[0] = x1, y1 + out1[1], out2[1] = x2, y2 + out1[2], out2[2] = x3, y3 + out1[3], out2[3] = x4, y4 +} + +@(optimization_mode = "none") +fe_cond_select :: #force_no_inline proc "contextless" ( + out1, arg1, arg2: ^Montgomery_Domain_Field_Element, + arg3: int, +) { + mask := (u64(arg3) * 0xffffffffffffffff) + x1 := ((mask & arg2[0]) | ((~mask) & arg1[0])) + x2 := ((mask & arg2[1]) | ((~mask) & arg1[1])) + x3 := ((mask & arg2[2]) | ((~mask) & arg1[2])) + x4 := ((mask & arg2[3]) | ((~mask) & arg1[3])) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 +} + +fe_cond_negate :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element, ctrl: int) { + tmp1: Montgomery_Domain_Field_Element = --- + fe_opp(&tmp1, arg1) + fe_cond_select(out1, arg1, &tmp1, ctrl) + + fe_clear(&tmp1) +} diff --git a/core/crypto/_fiat/field_scalarp256r1/field64.odin b/core/crypto/_fiat/field_scalarp256r1/field64.odin new file mode 100644 index 000000000..4217374a7 --- /dev/null +++ b/core/crypto/_fiat/field_scalarp256r1/field64.odin @@ -0,0 +1,569 @@ +// The BSD 1-Clause License (BSD-1-Clause) +// +// Copyright (c) 2015-2020 the fiat-crypto authors (see the AUTHORS file) +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// 1. Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// THIS SOFTWARE IS PROVIDED BY the fiat-crypto authors "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Berkeley Software Design, +// Inc. BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +package field_scalarp256r1 + +// The file provides arithmetic on the field Z/(2^256 - 2^224 + 2^192 - +// 89188191075325690597107910205041859247) using a 64-bit Montgomery form +// internal representation. It is derived primarily from the machine +// generated Golang output from the fiat-crypto project. +// +// While the base implementation is provably correct, this implementation +// makes no such claims as the port and optimizations were done by hand. +// +// WARNING: While big-endian is the common representation used for this +// curve, the fiat output uses least-significant-limb first. + +import fiat "core:crypto/_fiat" +import "core:math/bits" + +// ELL is the saturated representation of the field order, least-significant +// limb first. +ELL :: [4]u64{0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000} + +Montgomery_Domain_Field_Element :: distinct [4]u64 +Non_Montgomery_Domain_Field_Element :: distinct [4]u64 + +fe_mul :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[0] + x6, x5 := bits.mul_u64(x4, arg2[3]) + x8, x7 := bits.mul_u64(x4, arg2[2]) + x10, x9 := bits.mul_u64(x4, arg2[1]) + x12, x11 := bits.mul_u64(x4, arg2[0]) + x13, x14 := bits.add_u64(x12, x9, u64(0x0)) + x15, x16 := bits.add_u64(x10, x7, u64(fiat.u1(x14))) + x17, x18 := bits.add_u64(x8, x5, u64(fiat.u1(x16))) + x19 := (u64(fiat.u1(x18)) + x6) + _, x20 := bits.mul_u64(x11, 0xccd1c8aaee00bc4f) + x23, x22 := bits.mul_u64(x20, 0xffffffff00000000) + x25, x24 := bits.mul_u64(x20, 0xffffffffffffffff) + x27, x26 := bits.mul_u64(x20, 0xbce6faada7179e84) + x29, x28 := bits.mul_u64(x20, 0xf3b9cac2fc632551) + x30, x31 := bits.add_u64(x29, x26, u64(0x0)) + x32, x33 := bits.add_u64(x27, x24, u64(fiat.u1(x31))) + x34, x35 := bits.add_u64(x25, x22, u64(fiat.u1(x33))) + x36 := (u64(fiat.u1(x35)) + x23) + _, x38 := bits.add_u64(x11, x28, u64(0x0)) + x39, x40 := bits.add_u64(x13, x30, u64(fiat.u1(x38))) + x41, x42 := bits.add_u64(x15, x32, u64(fiat.u1(x40))) + x43, x44 := bits.add_u64(x17, x34, u64(fiat.u1(x42))) + x45, x46 := bits.add_u64(x19, x36, u64(fiat.u1(x44))) + x48, x47 := bits.mul_u64(x1, arg2[3]) + x50, x49 := bits.mul_u64(x1, arg2[2]) + x52, x51 := bits.mul_u64(x1, arg2[1]) + x54, x53 := bits.mul_u64(x1, arg2[0]) + x55, x56 := bits.add_u64(x54, x51, u64(0x0)) + x57, x58 := bits.add_u64(x52, x49, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x50, x47, u64(fiat.u1(x58))) + x61 := (u64(fiat.u1(x60)) + x48) + x62, x63 := bits.add_u64(x39, x53, u64(0x0)) + x64, x65 := bits.add_u64(x41, x55, u64(fiat.u1(x63))) + x66, x67 := bits.add_u64(x43, x57, u64(fiat.u1(x65))) + x68, x69 := bits.add_u64(x45, x59, u64(fiat.u1(x67))) + x70, x71 := bits.add_u64(u64(fiat.u1(x46)), x61, u64(fiat.u1(x69))) + _, x72 := bits.mul_u64(x62, 0xccd1c8aaee00bc4f) + x75, x74 := bits.mul_u64(x72, 0xffffffff00000000) + x77, x76 := bits.mul_u64(x72, 0xffffffffffffffff) + x79, x78 := bits.mul_u64(x72, 0xbce6faada7179e84) + x81, x80 := bits.mul_u64(x72, 0xf3b9cac2fc632551) + x82, x83 := bits.add_u64(x81, x78, u64(0x0)) + x84, x85 := bits.add_u64(x79, x76, u64(fiat.u1(x83))) + x86, x87 := bits.add_u64(x77, x74, u64(fiat.u1(x85))) + x88 := (u64(fiat.u1(x87)) + x75) + _, x90 := bits.add_u64(x62, x80, u64(0x0)) + x91, x92 := bits.add_u64(x64, x82, u64(fiat.u1(x90))) + x93, x94 := bits.add_u64(x66, x84, u64(fiat.u1(x92))) + x95, x96 := bits.add_u64(x68, x86, u64(fiat.u1(x94))) + x97, x98 := bits.add_u64(x70, x88, u64(fiat.u1(x96))) + x99 := (u64(fiat.u1(x98)) + u64(fiat.u1(x71))) + x101, x100 := bits.mul_u64(x2, arg2[3]) + x103, x102 := bits.mul_u64(x2, arg2[2]) + x105, x104 := bits.mul_u64(x2, arg2[1]) + x107, x106 := bits.mul_u64(x2, arg2[0]) + x108, x109 := bits.add_u64(x107, x104, u64(0x0)) + x110, x111 := bits.add_u64(x105, x102, u64(fiat.u1(x109))) + x112, x113 := bits.add_u64(x103, x100, u64(fiat.u1(x111))) + x114 := (u64(fiat.u1(x113)) + x101) + x115, x116 := bits.add_u64(x91, x106, u64(0x0)) + x117, x118 := bits.add_u64(x93, x108, u64(fiat.u1(x116))) + x119, x120 := bits.add_u64(x95, x110, u64(fiat.u1(x118))) + x121, x122 := bits.add_u64(x97, x112, u64(fiat.u1(x120))) + x123, x124 := bits.add_u64(x99, x114, u64(fiat.u1(x122))) + _, x125 := bits.mul_u64(x115, 0xccd1c8aaee00bc4f) + x128, x127 := bits.mul_u64(x125, 0xffffffff00000000) + x130, x129 := bits.mul_u64(x125, 0xffffffffffffffff) + x132, x131 := bits.mul_u64(x125, 0xbce6faada7179e84) + x134, x133 := bits.mul_u64(x125, 0xf3b9cac2fc632551) + x135, x136 := bits.add_u64(x134, x131, u64(0x0)) + x137, x138 := bits.add_u64(x132, x129, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x130, x127, u64(fiat.u1(x138))) + x141 := (u64(fiat.u1(x140)) + x128) + _, x143 := bits.add_u64(x115, x133, u64(0x0)) + x144, x145 := bits.add_u64(x117, x135, u64(fiat.u1(x143))) + x146, x147 := bits.add_u64(x119, x137, u64(fiat.u1(x145))) + x148, x149 := bits.add_u64(x121, x139, u64(fiat.u1(x147))) + x150, x151 := bits.add_u64(x123, x141, u64(fiat.u1(x149))) + x152 := (u64(fiat.u1(x151)) + u64(fiat.u1(x124))) + x154, x153 := bits.mul_u64(x3, arg2[3]) + x156, x155 := bits.mul_u64(x3, arg2[2]) + x158, x157 := bits.mul_u64(x3, arg2[1]) + x160, x159 := bits.mul_u64(x3, arg2[0]) + x161, x162 := bits.add_u64(x160, x157, u64(0x0)) + x163, x164 := bits.add_u64(x158, x155, u64(fiat.u1(x162))) + x165, x166 := bits.add_u64(x156, x153, u64(fiat.u1(x164))) + x167 := (u64(fiat.u1(x166)) + x154) + x168, x169 := bits.add_u64(x144, x159, u64(0x0)) + x170, x171 := bits.add_u64(x146, x161, u64(fiat.u1(x169))) + x172, x173 := bits.add_u64(x148, x163, u64(fiat.u1(x171))) + x174, x175 := bits.add_u64(x150, x165, u64(fiat.u1(x173))) + x176, x177 := bits.add_u64(x152, x167, u64(fiat.u1(x175))) + _, x178 := bits.mul_u64(x168, 0xccd1c8aaee00bc4f) + x181, x180 := bits.mul_u64(x178, 0xffffffff00000000) + x183, x182 := bits.mul_u64(x178, 0xffffffffffffffff) + x185, x184 := bits.mul_u64(x178, 0xbce6faada7179e84) + x187, x186 := bits.mul_u64(x178, 0xf3b9cac2fc632551) + x188, x189 := bits.add_u64(x187, x184, u64(0x0)) + x190, x191 := bits.add_u64(x185, x182, u64(fiat.u1(x189))) + x192, x193 := bits.add_u64(x183, x180, u64(fiat.u1(x191))) + x194 := (u64(fiat.u1(x193)) + x181) + _, x196 := bits.add_u64(x168, x186, u64(0x0)) + x197, x198 := bits.add_u64(x170, x188, u64(fiat.u1(x196))) + x199, x200 := bits.add_u64(x172, x190, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x174, x192, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x176, x194, u64(fiat.u1(x202))) + x205 := (u64(fiat.u1(x204)) + u64(fiat.u1(x177))) + x206, x207 := bits.sub_u64(x197, 0xf3b9cac2fc632551, u64(0x0)) + x208, x209 := bits.sub_u64(x199, 0xbce6faada7179e84, u64(fiat.u1(x207))) + x210, x211 := bits.sub_u64(x201, 0xffffffffffffffff, u64(fiat.u1(x209))) + x212, x213 := bits.sub_u64(x203, 0xffffffff00000000, u64(fiat.u1(x211))) + _, x215 := bits.sub_u64(x205, u64(0x0), u64(fiat.u1(x213))) + x216 := fiat.cmovznz_u64(fiat.u1(x215), x206, x197) + x217 := fiat.cmovznz_u64(fiat.u1(x215), x208, x199) + x218 := fiat.cmovznz_u64(fiat.u1(x215), x210, x201) + x219 := fiat.cmovznz_u64(fiat.u1(x215), x212, x203) + out1[0] = x216 + out1[1] = x217 + out1[2] = x218 + out1[3] = x219 +} + +fe_square :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[0] + x6, x5 := bits.mul_u64(x4, arg1[3]) + x8, x7 := bits.mul_u64(x4, arg1[2]) + x10, x9 := bits.mul_u64(x4, arg1[1]) + x12, x11 := bits.mul_u64(x4, arg1[0]) + x13, x14 := bits.add_u64(x12, x9, u64(0x0)) + x15, x16 := bits.add_u64(x10, x7, u64(fiat.u1(x14))) + x17, x18 := bits.add_u64(x8, x5, u64(fiat.u1(x16))) + x19 := (u64(fiat.u1(x18)) + x6) + _, x20 := bits.mul_u64(x11, 0xccd1c8aaee00bc4f) + x23, x22 := bits.mul_u64(x20, 0xffffffff00000000) + x25, x24 := bits.mul_u64(x20, 0xffffffffffffffff) + x27, x26 := bits.mul_u64(x20, 0xbce6faada7179e84) + x29, x28 := bits.mul_u64(x20, 0xf3b9cac2fc632551) + x30, x31 := bits.add_u64(x29, x26, u64(0x0)) + x32, x33 := bits.add_u64(x27, x24, u64(fiat.u1(x31))) + x34, x35 := bits.add_u64(x25, x22, u64(fiat.u1(x33))) + x36 := (u64(fiat.u1(x35)) + x23) + _, x38 := bits.add_u64(x11, x28, u64(0x0)) + x39, x40 := bits.add_u64(x13, x30, u64(fiat.u1(x38))) + x41, x42 := bits.add_u64(x15, x32, u64(fiat.u1(x40))) + x43, x44 := bits.add_u64(x17, x34, u64(fiat.u1(x42))) + x45, x46 := bits.add_u64(x19, x36, u64(fiat.u1(x44))) + x48, x47 := bits.mul_u64(x1, arg1[3]) + x50, x49 := bits.mul_u64(x1, arg1[2]) + x52, x51 := bits.mul_u64(x1, arg1[1]) + x54, x53 := bits.mul_u64(x1, arg1[0]) + x55, x56 := bits.add_u64(x54, x51, u64(0x0)) + x57, x58 := bits.add_u64(x52, x49, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x50, x47, u64(fiat.u1(x58))) + x61 := (u64(fiat.u1(x60)) + x48) + x62, x63 := bits.add_u64(x39, x53, u64(0x0)) + x64, x65 := bits.add_u64(x41, x55, u64(fiat.u1(x63))) + x66, x67 := bits.add_u64(x43, x57, u64(fiat.u1(x65))) + x68, x69 := bits.add_u64(x45, x59, u64(fiat.u1(x67))) + x70, x71 := bits.add_u64(u64(fiat.u1(x46)), x61, u64(fiat.u1(x69))) + _, x72 := bits.mul_u64(x62, 0xccd1c8aaee00bc4f) + x75, x74 := bits.mul_u64(x72, 0xffffffff00000000) + x77, x76 := bits.mul_u64(x72, 0xffffffffffffffff) + x79, x78 := bits.mul_u64(x72, 0xbce6faada7179e84) + x81, x80 := bits.mul_u64(x72, 0xf3b9cac2fc632551) + x82, x83 := bits.add_u64(x81, x78, u64(0x0)) + x84, x85 := bits.add_u64(x79, x76, u64(fiat.u1(x83))) + x86, x87 := bits.add_u64(x77, x74, u64(fiat.u1(x85))) + x88 := (u64(fiat.u1(x87)) + x75) + _, x90 := bits.add_u64(x62, x80, u64(0x0)) + x91, x92 := bits.add_u64(x64, x82, u64(fiat.u1(x90))) + x93, x94 := bits.add_u64(x66, x84, u64(fiat.u1(x92))) + x95, x96 := bits.add_u64(x68, x86, u64(fiat.u1(x94))) + x97, x98 := bits.add_u64(x70, x88, u64(fiat.u1(x96))) + x99 := (u64(fiat.u1(x98)) + u64(fiat.u1(x71))) + x101, x100 := bits.mul_u64(x2, arg1[3]) + x103, x102 := bits.mul_u64(x2, arg1[2]) + x105, x104 := bits.mul_u64(x2, arg1[1]) + x107, x106 := bits.mul_u64(x2, arg1[0]) + x108, x109 := bits.add_u64(x107, x104, u64(0x0)) + x110, x111 := bits.add_u64(x105, x102, u64(fiat.u1(x109))) + x112, x113 := bits.add_u64(x103, x100, u64(fiat.u1(x111))) + x114 := (u64(fiat.u1(x113)) + x101) + x115, x116 := bits.add_u64(x91, x106, u64(0x0)) + x117, x118 := bits.add_u64(x93, x108, u64(fiat.u1(x116))) + x119, x120 := bits.add_u64(x95, x110, u64(fiat.u1(x118))) + x121, x122 := bits.add_u64(x97, x112, u64(fiat.u1(x120))) + x123, x124 := bits.add_u64(x99, x114, u64(fiat.u1(x122))) + _, x125 := bits.mul_u64(x115, 0xccd1c8aaee00bc4f) + x128, x127 := bits.mul_u64(x125, 0xffffffff00000000) + x130, x129 := bits.mul_u64(x125, 0xffffffffffffffff) + x132, x131 := bits.mul_u64(x125, 0xbce6faada7179e84) + x134, x133 := bits.mul_u64(x125, 0xf3b9cac2fc632551) + x135, x136 := bits.add_u64(x134, x131, u64(0x0)) + x137, x138 := bits.add_u64(x132, x129, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(x130, x127, u64(fiat.u1(x138))) + x141 := (u64(fiat.u1(x140)) + x128) + _, x143 := bits.add_u64(x115, x133, u64(0x0)) + x144, x145 := bits.add_u64(x117, x135, u64(fiat.u1(x143))) + x146, x147 := bits.add_u64(x119, x137, u64(fiat.u1(x145))) + x148, x149 := bits.add_u64(x121, x139, u64(fiat.u1(x147))) + x150, x151 := bits.add_u64(x123, x141, u64(fiat.u1(x149))) + x152 := (u64(fiat.u1(x151)) + u64(fiat.u1(x124))) + x154, x153 := bits.mul_u64(x3, arg1[3]) + x156, x155 := bits.mul_u64(x3, arg1[2]) + x158, x157 := bits.mul_u64(x3, arg1[1]) + x160, x159 := bits.mul_u64(x3, arg1[0]) + x161, x162 := bits.add_u64(x160, x157, u64(0x0)) + x163, x164 := bits.add_u64(x158, x155, u64(fiat.u1(x162))) + x165, x166 := bits.add_u64(x156, x153, u64(fiat.u1(x164))) + x167 := (u64(fiat.u1(x166)) + x154) + x168, x169 := bits.add_u64(x144, x159, u64(0x0)) + x170, x171 := bits.add_u64(x146, x161, u64(fiat.u1(x169))) + x172, x173 := bits.add_u64(x148, x163, u64(fiat.u1(x171))) + x174, x175 := bits.add_u64(x150, x165, u64(fiat.u1(x173))) + x176, x177 := bits.add_u64(x152, x167, u64(fiat.u1(x175))) + _, x178 := bits.mul_u64(x168, 0xccd1c8aaee00bc4f) + x181, x180 := bits.mul_u64(x178, 0xffffffff00000000) + x183, x182 := bits.mul_u64(x178, 0xffffffffffffffff) + x185, x184 := bits.mul_u64(x178, 0xbce6faada7179e84) + x187, x186 := bits.mul_u64(x178, 0xf3b9cac2fc632551) + x188, x189 := bits.add_u64(x187, x184, u64(0x0)) + x190, x191 := bits.add_u64(x185, x182, u64(fiat.u1(x189))) + x192, x193 := bits.add_u64(x183, x180, u64(fiat.u1(x191))) + x194 := (u64(fiat.u1(x193)) + x181) + _, x196 := bits.add_u64(x168, x186, u64(0x0)) + x197, x198 := bits.add_u64(x170, x188, u64(fiat.u1(x196))) + x199, x200 := bits.add_u64(x172, x190, u64(fiat.u1(x198))) + x201, x202 := bits.add_u64(x174, x192, u64(fiat.u1(x200))) + x203, x204 := bits.add_u64(x176, x194, u64(fiat.u1(x202))) + x205 := (u64(fiat.u1(x204)) + u64(fiat.u1(x177))) + x206, x207 := bits.sub_u64(x197, 0xf3b9cac2fc632551, u64(0x0)) + x208, x209 := bits.sub_u64(x199, 0xbce6faada7179e84, u64(fiat.u1(x207))) + x210, x211 := bits.sub_u64(x201, 0xffffffffffffffff, u64(fiat.u1(x209))) + x212, x213 := bits.sub_u64(x203, 0xffffffff00000000, u64(fiat.u1(x211))) + _, x215 := bits.sub_u64(x205, u64(0x0), u64(fiat.u1(x213))) + x216 := fiat.cmovznz_u64(fiat.u1(x215), x206, x197) + x217 := fiat.cmovznz_u64(fiat.u1(x215), x208, x199) + x218 := fiat.cmovznz_u64(fiat.u1(x215), x210, x201) + x219 := fiat.cmovznz_u64(fiat.u1(x215), x212, x203) + out1[0] = x216 + out1[1] = x217 + out1[2] = x218 + out1[3] = x219 +} + +fe_add :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.add_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.add_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.add_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.add_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9, x10 := bits.sub_u64(x1, 0xf3b9cac2fc632551, u64(0x0)) + x11, x12 := bits.sub_u64(x3, 0xbce6faada7179e84, u64(fiat.u1(x10))) + x13, x14 := bits.sub_u64(x5, 0xffffffffffffffff, u64(fiat.u1(x12))) + x15, x16 := bits.sub_u64(x7, 0xffffffff00000000, u64(fiat.u1(x14))) + _, x18 := bits.sub_u64(u64(fiat.u1(x8)), u64(0x0), u64(fiat.u1(x16))) + x19 := fiat.cmovznz_u64(fiat.u1(x18), x9, x1) + x20 := fiat.cmovznz_u64(fiat.u1(x18), x11, x3) + x21 := fiat.cmovznz_u64(fiat.u1(x18), x13, x5) + x22 := fiat.cmovznz_u64(fiat.u1(x18), x15, x7) + out1[0] = x19 + out1[1] = x20 + out1[2] = x21 + out1[3] = x22 +} + +fe_sub :: proc "contextless" (out1, arg1, arg2: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(arg1[0], arg2[0], u64(0x0)) + x3, x4 := bits.sub_u64(arg1[1], arg2[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(arg1[2], arg2[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(arg1[3], arg2[3], u64(fiat.u1(x6))) + x9 := fiat.cmovznz_u64(fiat.u1(x8), u64(0x0), 0xffffffffffffffff) + x10, x11 := bits.add_u64(x1, (x9 & 0xf3b9cac2fc632551), u64(0x0)) + x12, x13 := bits.add_u64(x3, (x9 & 0xbce6faada7179e84), u64(fiat.u1(x11))) + x14, x15 := bits.add_u64(x5, x9, u64(fiat.u1(x13))) + x16, _ := bits.add_u64(x7, (x9 & 0xffffffff00000000), u64(fiat.u1(x15))) + out1[0] = x10 + out1[1] = x12 + out1[2] = x14 + out1[3] = x16 +} + +fe_opp :: proc "contextless" (out1, arg1: ^Montgomery_Domain_Field_Element) { + x1, x2 := bits.sub_u64(u64(0x0), arg1[0], u64(0x0)) + x3, x4 := bits.sub_u64(u64(0x0), arg1[1], u64(fiat.u1(x2))) + x5, x6 := bits.sub_u64(u64(0x0), arg1[2], u64(fiat.u1(x4))) + x7, x8 := bits.sub_u64(u64(0x0), arg1[3], u64(fiat.u1(x6))) + x9 := fiat.cmovznz_u64(fiat.u1(x8), u64(0x0), 0xffffffffffffffff) + x10, x11 := bits.add_u64(x1, (x9 & 0xf3b9cac2fc632551), u64(0x0)) + x12, x13 := bits.add_u64(x3, (x9 & 0xbce6faada7179e84), u64(fiat.u1(x11))) + x14, x15 := bits.add_u64(x5, x9, u64(fiat.u1(x13))) + x16, _ := bits.add_u64(x7, (x9 & 0xffffffff00000000), u64(fiat.u1(x15))) + out1[0] = x10 + out1[1] = x12 + out1[2] = x14 + out1[3] = x16 +} + +fe_one :: proc "contextless" (out1: ^Montgomery_Domain_Field_Element) { + out1[0] = 0xc46353d039cdaaf + out1[1] = 0x4319055258e8617b + out1[2] = u64(0x0) + out1[3] = 0xffffffff +} + +fe_non_zero :: proc "contextless" (arg1: ^Montgomery_Domain_Field_Element) -> u64 { + return arg1[0] | (arg1[1] | (arg1[2] | arg1[3])) +} + +@(optimization_mode = "none") +fe_cond_assign :: #force_no_inline proc "contextless" ( + out1, arg1: ^Montgomery_Domain_Field_Element, + arg2: int, +) { + x1 := fiat.cmovznz_u64(fiat.u1(arg2), out1[0], arg1[0]) + x2 := fiat.cmovznz_u64(fiat.u1(arg2), out1[1], arg1[1]) + x3 := fiat.cmovznz_u64(fiat.u1(arg2), out1[2], arg1[2]) + x4 := fiat.cmovznz_u64(fiat.u1(arg2), out1[3], arg1[3]) + out1[0] = x1 + out1[1] = x2 + out1[2] = x3 + out1[3] = x4 +} + +fe_from_montgomery :: proc "contextless" ( + out1: ^Non_Montgomery_Domain_Field_Element, + arg1: ^Montgomery_Domain_Field_Element, +) { + x1 := arg1[0] + _, x2 := bits.mul_u64(x1, 0xccd1c8aaee00bc4f) + x5, x4 := bits.mul_u64(x2, 0xffffffff00000000) + x7, x6 := bits.mul_u64(x2, 0xffffffffffffffff) + x9, x8 := bits.mul_u64(x2, 0xbce6faada7179e84) + x11, x10 := bits.mul_u64(x2, 0xf3b9cac2fc632551) + x12, x13 := bits.add_u64(x11, x8, u64(0x0)) + x14, x15 := bits.add_u64(x9, x6, u64(fiat.u1(x13))) + x16, x17 := bits.add_u64(x7, x4, u64(fiat.u1(x15))) + _, x19 := bits.add_u64(x1, x10, u64(0x0)) + x20, x21 := bits.add_u64(u64(0x0), x12, u64(fiat.u1(x19))) + x22, x23 := bits.add_u64(u64(0x0), x14, u64(fiat.u1(x21))) + x24, x25 := bits.add_u64(u64(0x0), x16, u64(fiat.u1(x23))) + x26, x27 := bits.add_u64(x20, arg1[1], u64(0x0)) + x28, x29 := bits.add_u64(x22, u64(0x0), u64(fiat.u1(x27))) + x30, x31 := bits.add_u64(x24, u64(0x0), u64(fiat.u1(x29))) + _, x32 := bits.mul_u64(x26, 0xccd1c8aaee00bc4f) + x35, x34 := bits.mul_u64(x32, 0xffffffff00000000) + x37, x36 := bits.mul_u64(x32, 0xffffffffffffffff) + x39, x38 := bits.mul_u64(x32, 0xbce6faada7179e84) + x41, x40 := bits.mul_u64(x32, 0xf3b9cac2fc632551) + x42, x43 := bits.add_u64(x41, x38, u64(0x0)) + x44, x45 := bits.add_u64(x39, x36, u64(fiat.u1(x43))) + x46, x47 := bits.add_u64(x37, x34, u64(fiat.u1(x45))) + _, x49 := bits.add_u64(x26, x40, u64(0x0)) + x50, x51 := bits.add_u64(x28, x42, u64(fiat.u1(x49))) + x52, x53 := bits.add_u64(x30, x44, u64(fiat.u1(x51))) + x54, x55 := bits.add_u64((u64(fiat.u1(x31)) + (u64(fiat.u1(x25)) + (u64(fiat.u1(x17)) + x5))), x46, u64(fiat.u1(x53))) + x56, x57 := bits.add_u64(x50, arg1[2], u64(0x0)) + x58, x59 := bits.add_u64(x52, u64(0x0), u64(fiat.u1(x57))) + x60, x61 := bits.add_u64(x54, u64(0x0), u64(fiat.u1(x59))) + _, x62 := bits.mul_u64(x56, 0xccd1c8aaee00bc4f) + x65, x64 := bits.mul_u64(x62, 0xffffffff00000000) + x67, x66 := bits.mul_u64(x62, 0xffffffffffffffff) + x69, x68 := bits.mul_u64(x62, 0xbce6faada7179e84) + x71, x70 := bits.mul_u64(x62, 0xf3b9cac2fc632551) + x72, x73 := bits.add_u64(x71, x68, u64(0x0)) + x74, x75 := bits.add_u64(x69, x66, u64(fiat.u1(x73))) + x76, x77 := bits.add_u64(x67, x64, u64(fiat.u1(x75))) + _, x79 := bits.add_u64(x56, x70, u64(0x0)) + x80, x81 := bits.add_u64(x58, x72, u64(fiat.u1(x79))) + x82, x83 := bits.add_u64(x60, x74, u64(fiat.u1(x81))) + x84, x85 := bits.add_u64((u64(fiat.u1(x61)) + (u64(fiat.u1(x55)) + (u64(fiat.u1(x47)) + x35))), x76, u64(fiat.u1(x83))) + x86, x87 := bits.add_u64(x80, arg1[3], u64(0x0)) + x88, x89 := bits.add_u64(x82, u64(0x0), u64(fiat.u1(x87))) + x90, x91 := bits.add_u64(x84, u64(0x0), u64(fiat.u1(x89))) + _, x92 := bits.mul_u64(x86, 0xccd1c8aaee00bc4f) + x95, x94 := bits.mul_u64(x92, 0xffffffff00000000) + x97, x96 := bits.mul_u64(x92, 0xffffffffffffffff) + x99, x98 := bits.mul_u64(x92, 0xbce6faada7179e84) + x101, x100 := bits.mul_u64(x92, 0xf3b9cac2fc632551) + x102, x103 := bits.add_u64(x101, x98, u64(0x0)) + x104, x105 := bits.add_u64(x99, x96, u64(fiat.u1(x103))) + x106, x107 := bits.add_u64(x97, x94, u64(fiat.u1(x105))) + _, x109 := bits.add_u64(x86, x100, u64(0x0)) + x110, x111 := bits.add_u64(x88, x102, u64(fiat.u1(x109))) + x112, x113 := bits.add_u64(x90, x104, u64(fiat.u1(x111))) + x114, x115 := bits.add_u64((u64(fiat.u1(x91)) + (u64(fiat.u1(x85)) + (u64(fiat.u1(x77)) + x65))), x106, u64(fiat.u1(x113))) + x116 := (u64(fiat.u1(x115)) + (u64(fiat.u1(x107)) + x95)) + x117, x118 := bits.sub_u64(x110, 0xf3b9cac2fc632551, u64(0x0)) + x119, x120 := bits.sub_u64(x112, 0xbce6faada7179e84, u64(fiat.u1(x118))) + x121, x122 := bits.sub_u64(x114, 0xffffffffffffffff, u64(fiat.u1(x120))) + x123, x124 := bits.sub_u64(x116, 0xffffffff00000000, u64(fiat.u1(x122))) + _, x126 := bits.sub_u64(u64(0x0), u64(0x0), u64(fiat.u1(x124))) + x127 := fiat.cmovznz_u64(fiat.u1(x126), x117, x110) + x128 := fiat.cmovznz_u64(fiat.u1(x126), x119, x112) + x129 := fiat.cmovznz_u64(fiat.u1(x126), x121, x114) + x130 := fiat.cmovznz_u64(fiat.u1(x126), x123, x116) + out1[0] = x127 + out1[1] = x128 + out1[2] = x129 + out1[3] = x130 +} + +fe_to_montgomery :: proc "contextless" ( + out1: ^Montgomery_Domain_Field_Element, + arg1: ^Non_Montgomery_Domain_Field_Element, +) { + x1 := arg1[1] + x2 := arg1[2] + x3 := arg1[3] + x4 := arg1[0] + x6, x5 := bits.mul_u64(x4, 0x66e12d94f3d95620) + x8, x7 := bits.mul_u64(x4, 0x2845b2392b6bec59) + x10, x9 := bits.mul_u64(x4, 0x4699799c49bd6fa6) + x12, x11 := bits.mul_u64(x4, 0x83244c95be79eea2) + x13, x14 := bits.add_u64(x12, x9, u64(0x0)) + x15, x16 := bits.add_u64(x10, x7, u64(fiat.u1(x14))) + x17, x18 := bits.add_u64(x8, x5, u64(fiat.u1(x16))) + _, x19 := bits.mul_u64(x11, 0xccd1c8aaee00bc4f) + x22, x21 := bits.mul_u64(x19, 0xffffffff00000000) + x24, x23 := bits.mul_u64(x19, 0xffffffffffffffff) + x26, x25 := bits.mul_u64(x19, 0xbce6faada7179e84) + x28, x27 := bits.mul_u64(x19, 0xf3b9cac2fc632551) + x29, x30 := bits.add_u64(x28, x25, u64(0x0)) + x31, x32 := bits.add_u64(x26, x23, u64(fiat.u1(x30))) + x33, x34 := bits.add_u64(x24, x21, u64(fiat.u1(x32))) + _, x36 := bits.add_u64(x11, x27, u64(0x0)) + x37, x38 := bits.add_u64(x13, x29, u64(fiat.u1(x36))) + x39, x40 := bits.add_u64(x15, x31, u64(fiat.u1(x38))) + x41, x42 := bits.add_u64(x17, x33, u64(fiat.u1(x40))) + x43, x44 := bits.add_u64((u64(fiat.u1(x18)) + x6), (u64(fiat.u1(x34)) + x22), u64(fiat.u1(x42))) + x46, x45 := bits.mul_u64(x1, 0x66e12d94f3d95620) + x48, x47 := bits.mul_u64(x1, 0x2845b2392b6bec59) + x50, x49 := bits.mul_u64(x1, 0x4699799c49bd6fa6) + x52, x51 := bits.mul_u64(x1, 0x83244c95be79eea2) + x53, x54 := bits.add_u64(x52, x49, u64(0x0)) + x55, x56 := bits.add_u64(x50, x47, u64(fiat.u1(x54))) + x57, x58 := bits.add_u64(x48, x45, u64(fiat.u1(x56))) + x59, x60 := bits.add_u64(x37, x51, u64(0x0)) + x61, x62 := bits.add_u64(x39, x53, u64(fiat.u1(x60))) + x63, x64 := bits.add_u64(x41, x55, u64(fiat.u1(x62))) + x65, x66 := bits.add_u64(x43, x57, u64(fiat.u1(x64))) + _, x67 := bits.mul_u64(x59, 0xccd1c8aaee00bc4f) + x70, x69 := bits.mul_u64(x67, 0xffffffff00000000) + x72, x71 := bits.mul_u64(x67, 0xffffffffffffffff) + x74, x73 := bits.mul_u64(x67, 0xbce6faada7179e84) + x76, x75 := bits.mul_u64(x67, 0xf3b9cac2fc632551) + x77, x78 := bits.add_u64(x76, x73, u64(0x0)) + x79, x80 := bits.add_u64(x74, x71, u64(fiat.u1(x78))) + x81, x82 := bits.add_u64(x72, x69, u64(fiat.u1(x80))) + _, x84 := bits.add_u64(x59, x75, u64(0x0)) + x85, x86 := bits.add_u64(x61, x77, u64(fiat.u1(x84))) + x87, x88 := bits.add_u64(x63, x79, u64(fiat.u1(x86))) + x89, x90 := bits.add_u64(x65, x81, u64(fiat.u1(x88))) + x91, x92 := bits.add_u64(((u64(fiat.u1(x66)) + u64(fiat.u1(x44))) + (u64(fiat.u1(x58)) + x46)), (u64(fiat.u1(x82)) + x70), u64(fiat.u1(x90))) + x94, x93 := bits.mul_u64(x2, 0x66e12d94f3d95620) + x96, x95 := bits.mul_u64(x2, 0x2845b2392b6bec59) + x98, x97 := bits.mul_u64(x2, 0x4699799c49bd6fa6) + x100, x99 := bits.mul_u64(x2, 0x83244c95be79eea2) + x101, x102 := bits.add_u64(x100, x97, u64(0x0)) + x103, x104 := bits.add_u64(x98, x95, u64(fiat.u1(x102))) + x105, x106 := bits.add_u64(x96, x93, u64(fiat.u1(x104))) + x107, x108 := bits.add_u64(x85, x99, u64(0x0)) + x109, x110 := bits.add_u64(x87, x101, u64(fiat.u1(x108))) + x111, x112 := bits.add_u64(x89, x103, u64(fiat.u1(x110))) + x113, x114 := bits.add_u64(x91, x105, u64(fiat.u1(x112))) + _, x115 := bits.mul_u64(x107, 0xccd1c8aaee00bc4f) + x118, x117 := bits.mul_u64(x115, 0xffffffff00000000) + x120, x119 := bits.mul_u64(x115, 0xffffffffffffffff) + x122, x121 := bits.mul_u64(x115, 0xbce6faada7179e84) + x124, x123 := bits.mul_u64(x115, 0xf3b9cac2fc632551) + x125, x126 := bits.add_u64(x124, x121, u64(0x0)) + x127, x128 := bits.add_u64(x122, x119, u64(fiat.u1(x126))) + x129, x130 := bits.add_u64(x120, x117, u64(fiat.u1(x128))) + _, x132 := bits.add_u64(x107, x123, u64(0x0)) + x133, x134 := bits.add_u64(x109, x125, u64(fiat.u1(x132))) + x135, x136 := bits.add_u64(x111, x127, u64(fiat.u1(x134))) + x137, x138 := bits.add_u64(x113, x129, u64(fiat.u1(x136))) + x139, x140 := bits.add_u64(((u64(fiat.u1(x114)) + u64(fiat.u1(x92))) + (u64(fiat.u1(x106)) + x94)), (u64(fiat.u1(x130)) + x118), u64(fiat.u1(x138))) + x142, x141 := bits.mul_u64(x3, 0x66e12d94f3d95620) + x144, x143 := bits.mul_u64(x3, 0x2845b2392b6bec59) + x146, x145 := bits.mul_u64(x3, 0x4699799c49bd6fa6) + x148, x147 := bits.mul_u64(x3, 0x83244c95be79eea2) + x149, x150 := bits.add_u64(x148, x145, u64(0x0)) + x151, x152 := bits.add_u64(x146, x143, u64(fiat.u1(x150))) + x153, x154 := bits.add_u64(x144, x141, u64(fiat.u1(x152))) + x155, x156 := bits.add_u64(x133, x147, u64(0x0)) + x157, x158 := bits.add_u64(x135, x149, u64(fiat.u1(x156))) + x159, x160 := bits.add_u64(x137, x151, u64(fiat.u1(x158))) + x161, x162 := bits.add_u64(x139, x153, u64(fiat.u1(x160))) + _, x163 := bits.mul_u64(x155, 0xccd1c8aaee00bc4f) + x166, x165 := bits.mul_u64(x163, 0xffffffff00000000) + x168, x167 := bits.mul_u64(x163, 0xffffffffffffffff) + x170, x169 := bits.mul_u64(x163, 0xbce6faada7179e84) + x172, x171 := bits.mul_u64(x163, 0xf3b9cac2fc632551) + x173, x174 := bits.add_u64(x172, x169, u64(0x0)) + x175, x176 := bits.add_u64(x170, x167, u64(fiat.u1(x174))) + x177, x178 := bits.add_u64(x168, x165, u64(fiat.u1(x176))) + _, x180 := bits.add_u64(x155, x171, u64(0x0)) + x181, x182 := bits.add_u64(x157, x173, u64(fiat.u1(x180))) + x183, x184 := bits.add_u64(x159, x175, u64(fiat.u1(x182))) + x185, x186 := bits.add_u64(x161, x177, u64(fiat.u1(x184))) + x187, x188 := bits.add_u64(((u64(fiat.u1(x162)) + u64(fiat.u1(x140))) + (u64(fiat.u1(x154)) + x142)), (u64(fiat.u1(x178)) + x166), u64(fiat.u1(x186))) + x189, x190 := bits.sub_u64(x181, 0xf3b9cac2fc632551, u64(0x0)) + x191, x192 := bits.sub_u64(x183, 0xbce6faada7179e84, u64(fiat.u1(x190))) + x193, x194 := bits.sub_u64(x185, 0xffffffffffffffff, u64(fiat.u1(x192))) + x195, x196 := bits.sub_u64(x187, 0xffffffff00000000, u64(fiat.u1(x194))) + _, x198 := bits.sub_u64(u64(fiat.u1(x188)), u64(0x0), u64(fiat.u1(x196))) + x199 := fiat.cmovznz_u64(fiat.u1(x198), x189, x181) + x200 := fiat.cmovznz_u64(fiat.u1(x198), x191, x183) + x201 := fiat.cmovznz_u64(fiat.u1(x198), x193, x185) + x202 := fiat.cmovznz_u64(fiat.u1(x198), x195, x187) + out1[0] = x199 + out1[1] = x200 + out1[2] = x201 + out1[3] = x202 +} diff --git a/core/crypto/_weierstrass/fe.odin b/core/crypto/_weierstrass/fe.odin new file mode 100644 index 000000000..1a160a03c --- /dev/null +++ b/core/crypto/_weierstrass/fe.odin @@ -0,0 +1,135 @@ +package _weierstrass + +import p256r1 "core:crypto/_fiat/field_p256r1" +import "core:math/bits" + +Field_Element_p256r1 :: p256r1.Montgomery_Domain_Field_Element + +FE_SIZE_P256R1 :: 32 + +fe_clear :: proc { + p256r1.fe_clear, +} + +fe_clear_vec :: proc { + p256r1.fe_clear_vec, +} + +fe_set_bytes :: proc { + p256r1.fe_from_bytes, +} +fe_bytes :: proc { + p256r1.fe_to_bytes, +} + +fe_set :: proc { + p256r1.fe_set, +} + +fe_zero :: proc { + p256r1.fe_zero, +} + +fe_a :: proc { + fe_a_p256r1, +} + +fe_b :: proc { + fe_b_p256r1, +} + +fe_gen_x :: proc { + fe_gen_x_p256r1, +} + +fe_gen_y :: proc { + fe_gen_y_p256r1, +} + +fe_one :: proc { + p256r1.fe_one, +} + +fe_add :: proc { + p256r1.fe_add, +} + +fe_sub :: proc { + p256r1.fe_sub, +} + +fe_negate :: proc { + p256r1.fe_opp, +} + +fe_mul :: proc { + p256r1.fe_mul, +} + +fe_square :: proc { + p256r1.fe_square, +} + +fe_inv :: proc { + p256r1.fe_inv, +} + +fe_sqrt :: proc { + p256r1.fe_sqrt, +} + +fe_equal :: proc { + p256r1.fe_equal, +} + +fe_is_odd :: proc { + p256r1.fe_is_odd, +} + +fe_is_zero :: proc { + fe_is_zero_p256r1, +} + +fe_cond_select :: proc { + p256r1.fe_cond_select, +} + +fe_a_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) { + // a = 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc + // = -3 mod p + fe[0] = 18446744073709551612 + fe[1] = 17179869183 + fe[2] = 0 + fe[3] = 18446744056529682436 +} + +fe_b_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) { + // b = 0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b + fe[0] = 15608596021259845087 + fe[1] = 12461466548982526096 + fe[2] = 16546823903870267094 + fe[3] = 15866188208926050356 +} + +fe_gen_x_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) { + // G_x = 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296 + fe[0] = 8784043285714375740 + fe[1] = 8483257759279461889 + fe[2] = 8789745728267363600 + fe[3] = 1770019616739251654 +} + +fe_gen_y_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) { + // G_y = 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5 + fe[0] = 15992936863339206154 + fe[1] = 10037038012062884956 + fe[2] = 15197544864945402661 + fe[3] = 9615747158586711429 +} + +@(require_results) +fe_is_zero_p256r1 :: proc "contextless" (fe: ^Field_Element_p256r1) -> int { + ctrl := p256r1.fe_non_zero(fe) + _, borrow := bits.sub_u64(ctrl, 1, 0) + return int(borrow) +} diff --git a/core/crypto/_weierstrass/point.odin b/core/crypto/_weierstrass/point.odin new file mode 100644 index 000000000..cde82ebb2 --- /dev/null +++ b/core/crypto/_weierstrass/point.odin @@ -0,0 +1,548 @@ +package _weierstrass + +/* +This implements prime order short Weierstrass curves defined over a field +k with char(k) != 2, 3 (`y^2 = x^3 + ax + b`). for the purpose of +implementing ECDH and ECDSA. Use of this package for other purposes is +NOT RECOMMENDED. + +As an explicit simplicity/performance tradeoff, projective representation +was chosen so that it is possible to use the complete addition +formulas. + +See: +- https://eprint.iacr.org/2015/1060.pdf +- https://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html + +WARNING: The point addition and doubling formulas are specialized for +`a = -3`, which covers secp256r1, secp384r1, secp521r1, FRP256v1, SM2, +and GOST 34.10. The brainpool curves and secp256k1 are NOT SUPPORTED +and would require slightly different formulas. +*/ + +Point_p256r1 :: struct { + x: Field_Element_p256r1, + y: Field_Element_p256r1, + z: Field_Element_p256r1, +} + +@(require_results) +pt_set_xy_bytes :: proc "contextless" (p: ^$T, x_raw, y_raw: []byte) -> bool { + when T == Point_p256r1 { + FE_SZ :: FE_SIZE_P256R1 + x, y: Field_Element_p256r1 + defer fe_clear_vec([]^Field_Element_p256r1{&x, &y}) + } else { + #panic("weierstrass: invalid curve") + } + + if len(x_raw) != FE_SZ || len(y_raw) != FE_SZ { + return false + } + + if !fe_set_bytes(&x, x_raw) { + return false + } + if !fe_set_bytes(&y, y_raw) { + return false + } + if !is_on_curve(&x, &y) { + return false + } + + fe_set(&p.x, &x) + fe_set(&p.y, &y) + fe_one(&p.z) + + return true +} + +@(require_results) +pt_set_x_bytes :: proc "contextless" (p: ^$T, x_raw: []byte, y_is_odd: int) -> bool { + when T == Point_p256r1 { + FE_SZ :: FE_SIZE_P256R1 + x, y, yy, y_neg: Field_Element_p256r1 + defer fe_clear_vec([]^Field_Element_p256r1{&x, &y, &yy, &y_neg}) + } else { + #panic("weierstrass: invalid curve") + } + + if len(x_raw) != FE_SZ { + return false + } + + if !fe_set_bytes(&x, x_raw) { + return false + } + set_yy_candidate(&yy, &x) + if fe_sqrt(&y, &yy) != 1 { + return false + } + + // Pick the correct y-coordinate. + fe_negate(&y_neg, &y) + parity_neq := (y_is_odd ~ fe_is_odd(&y)) & 1 + + fe_set(&p.x, &x) + fe_cond_select(&p.y, &y, &y_neg, parity_neq) + fe_one(&p.z) + + return true +} + +@(require_results) +pt_bytes :: proc "contextless" (x, y: []byte, p: ^$T) -> bool { + when T == Point_p256r1 { + FE_SZ :: FE_SIZE_P256R1 + } else { + #panic("weierstrass: invalid curve") + } + + if pt_is_identity(p) == 1 { + return false + } + + // Convert to affine coordinates. + pt_rescale(p, p) + + switch len(x) { + case 0: + case FE_SZ: + fe_bytes(x, &p.x) + case: + panic_contextless("weierstrass: invalid x buffer") + } + switch len(y) { + case 0: + case FE_SZ: + fe_bytes(y, &p.y) + case: + panic_contextless("weierstrass: invalid y buffer") + } + + return true +} + +pt_set :: proc "contextless" (p, q: ^$T) { + fe_set(&p.x, &q.x) + fe_set(&p.y, &q.y) + fe_set(&p.z, &q.z) +} + +pt_identity :: proc "contextless" (p: ^$T) { + fe_zero(&p.x) + fe_one(&p.y) + fe_zero(&p.z) +} + +pt_generator :: proc "contextless" (p: ^$T) { + fe_gen_x(&p.x) + fe_gen_y(&p.y) + fe_one(&p.z) +} + +pt_clear :: proc "contextless" (p: ^$T) { + fe_clear(&p.x) + fe_clear(&p.y) + fe_clear(&p.z) +} + +pt_clear_vec :: proc "contextless" (arg: []^$T) { + for p in arg { + pt_clear(p) + } +} + +pt_add :: proc "contextless" (p, a, b: ^$T) { + // Algorithm 4 from "Complete addition formulas for prime + // order elliptic curves" by Renes, Costello, and Batina. + // + // The formula is complete in that it is valid for all a and b, + // without exceptions or extra assumptions about the inputs. + // + // The operation costs are `12M + 2mb + 29a`. + + when T == Point_p256r1 { + t0, t1, t2, t3, t4, b_fe: Field_Element_p256r1 + x3, y3, z3: Field_Element_p256r1 + defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3}) + } else { + #panic("weierstrass: invalid curve") + } + + x1, y1, z1 := &a.x, &a.y, &a.z + x2, y2, z2 := &b.x, &b.y, &b.z + + fe_b(&b_fe) + + // t0 := X1 * X2 ; t1 := Y1 * Y2 ; t2 := Z1 * Z2 ; + fe_mul(&t0, x1, x2) + fe_mul(&t1, y1, y2) + fe_mul(&t2, z1, z2) + + // t3 := X1 + Y1 ; t4 := X2 + Y2 ; t3 := t3 * t4 ; + fe_add(&t3, x1, y1) + fe_add(&t4, x2, y2) + fe_mul(&t3, &t3, &t4) + + // t4 := t0 + t1 ; t3 := t3 - t4 ; t4 := Y1 + Z1 ; + fe_add(&t4, &t0, &t1) + fe_sub(&t3, &t3, &t4) + fe_add(&t4, y1, z1) + + // X3 := Y2 + Z2 ; t4 := t4 * X3 ; X3 := t1 + t2 ; + fe_add(&x3, y2, z2) + fe_mul(&t4, &t4, &x3) + fe_add(&x3, &t1, &t2) + + // t4 := t4 - X3 ; X3 := X1 + Z1 ; Y3 := X2 + Z2 ; + fe_sub(&t4, &t4, &x3) + fe_add(&x3, x1, z1) + fe_add(&y3, x2, z2) + + // X3 := X3 * Y3 ; Y3 := t0 + t2 ; Y3 := X3 - Y3 ; + fe_mul(&x3, &x3, &y3) + fe_add(&y3, &t0, &t2) + fe_sub(&y3, &x3, &y3) + + // Z3 := b * t2 ; X3 := Y3 - Z3 ; Z3 := X3 + X3 ; + fe_mul(&z3, &b_fe, &t2) + fe_sub(&x3, &y3, &z3) + fe_add(&z3, &x3, &x3) + + // X3 := X3 + Z3 ; Z3 := t1 - X3 ; X3 := t1 + X3 ; + fe_add(&x3, &x3, &z3) + fe_sub(&z3, &t1, &x3) + fe_add(&x3, &t1, &x3) + + // Y3 := b * Y3 ; t1 := t2 + t2 ; t2 := t1 + t2 ; + fe_mul(&y3, &b_fe, &y3) + fe_add(&t1, &t2, &t2) + fe_add(&t2, &t1, &t2) + + // Y3 := Y3 - t2 ; Y3 := Y3 - t0 ; t1 := Y3 + Y3 ; + fe_sub(&y3, &y3, &t2) + fe_sub(&y3, &y3, &t0) + fe_add(&t1, &y3, &y3) + + // Y3 := t1 + Y3 ; t1 := t0 + t0 ; t0 := t1 + t0 ; + fe_add(&y3, &t1, &y3) + fe_add(&t1, &t0, &t0) + fe_add(&t0, &t1, &t0) + + // t0 := t0 - t2 ; t1 := t4 * Y3 ; t2 := t0 * Y3 ; + fe_sub(&t0, &t0, &t2) + fe_mul(&t1, &t4, &y3) + fe_mul(&t2, &t0, &y3) + + // Y3 := X3 * Z3 ; Y3 := Y3 + t2 ; X3 := t3 * X3 ; + fe_mul(&y3, &x3, &z3) + fe_add(&y3, &y3, &t2) + fe_mul(&x3, &t3, &x3) + + // X3 := X3 - t1 ; Z3 := t4 * Z3 ; t1 := t3 * t0 ; + fe_sub(&x3, &x3, &t1) + fe_mul(&z3, &t4, &z3) + fe_mul(&t1, &t3, &t0) + + // Z3 := Z3 + t1 ; + fe_add(&z3, &z3, &t1) + + // return X3 , Y3 , Z3 ; + fe_set(&p.x, &x3) + fe_set(&p.y, &y3) + fe_set(&p.z, &z3) +} + +@(private) +pt_add_mixed :: proc "contextless" (p, a: ^$T, x2, y2: ^$U) { + // Algorithm 5 from "Complete addition formulas for prime + // order elliptic curves" by Renes, Costello, and Batina. + // + // The formula is mixed in that it assumes the z-coordinate + // of the addend (`Z2`) is `1`, meaning that it CAN NOT + // handle the addend being the point at infinity. + // + // The operation costs are `11M + 2mb + 23a` saving + // `1M + 6a` over `pt_add`. + + when T == Point_p256r1 && U == Field_Element_p256r1 { + t0, t1, t2, t3, t4, b_fe: Field_Element_p256r1 + x3, y3, z3: Field_Element_p256r1 + defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &t4, &x3, &y3, &z3}) + } else { + #panic("weierstrass: invalid curve") + } + + x1, y1, z1 := &a.x, &a.y, &a.z + + fe_b(&b_fe) + + // t0 := X1 * X2 ; t1 := Y1 * Y2 ; t3 := X2 + Y2 ; + fe_mul(&t0, x1, x2) + fe_mul(&t1, y1, y2) + fe_add(&t3, x2, y2) + + // t4 := X1 + Y1 ; t3 := t3 * t4 ; t4 := t0 + t1 ; + fe_add(&t4, x1, y1) + fe_mul(&t3, &t3, &t4) + fe_add(&t4, &t0, &t1) + + // t3 := t3 − t4 ; t4 := Y2 * Z1 ; t4 := t4 + Y1 ; + fe_sub(&t3, &t3, &t4) + fe_mul(&t4, y2, z1) + fe_add(&t4, &t4, y1) + + // Y3 := X2 * Z1 ; Y3 := Y3 + X1 ; Z3 := b * Z1 ; + fe_mul(&y3, x2, z1) + fe_add(&y3, &y3, x1) + fe_mul(&z3, &b_fe, z1) + + // X3 := Y3 − Z3 ; Z3 := X3 + X3 ; X3 := X3 + Z3 ; + fe_sub(&x3, &y3, &z3) + fe_add(&z3, &x3, &x3) + fe_add(&x3, &x3, &z3) + + // Z3 := t1 − X3 ; X3 := t1 + X3 ;. Y3 := b * Y3 ; + fe_sub(&z3, &t1, &x3) + fe_add(&x3, &t1, &x3) + fe_mul(&y3, &b_fe, &y3) + + // t1 := Z1 + Z1 ; t2 := t1 + Z1 ; Y3 := Y3 − t2 ; + fe_add(&t1, z1, z1) + fe_add(&t2, &t1, z1) + fe_sub(&y3, &y3, &t2) + + // Y3 := Y3 − t0 ; t1 := Y3 + Y3 ; Y3 := t1 + Y3 ; + fe_sub(&y3, &y3, &t0) + fe_add(&t1, &y3, &y3) + fe_add(&y3, &t1, &y3) + + // t1 := t0 + t0 ; t0 := t1 + t0 ; t0 := t0 − t2 ; + fe_add(&t1, &t0, &t0) + fe_add(&t0, &t1, &t0) + fe_sub(&t0, &t0, &t2) + + // t1 := t4 * Y3 ; t2 := t0 * Y3 ; Y3 := X3 * Z3 ; + fe_mul(&t1, &t4, &y3) + fe_mul(&t2, &t0, &y3) + fe_mul(&y3, &x3, &z3) + + // Y3 := Y3 + t2 ; X3 := t3 * X3 ; X3 := X3 − t1 ; + fe_add(&y3, &y3, &t2) + fe_mul(&x3, &t3, &x3) + fe_sub(&x3, &x3, &t1) + + // Z3 := t4 * Z3 ; t1 := t3 * t0 ; Z3 := Z3 + t1 ; + fe_mul(&z3, &t4, &z3) + fe_mul(&t1, &t3, &t0) + fe_add(&z3, &z3, &t1) + + // return X3 , Y3 , Z3 ; + fe_set(&p.x, &x3) + fe_set(&p.y, &y3) + fe_set(&p.z, &z3) +} + +pt_double :: proc "contextless" (p, a: ^$T) { + // Algorithm 6 from "Complete addition formulas for prime + // order elliptic curves" by Renes, Costello, and Batina. + // + // The formula is complete in that it is valid for all a, + // without exceptions or extra assumptions about the inputs. + // + // The operation costs are `8M + 3S + 2mb + 21a`. + + when T == Point_p256r1 { + t0, t1, t2, t3, b_fe: Field_Element_p256r1 + x3, y3, z3: Field_Element_p256r1 + defer fe_clear_vec([]^Field_Element_p256r1{&t0, &t1, &t2, &t3, &x3, &y3, &z3}) + } else { + #panic("weierstrass: invalid curve") + } + + x, y, z := &a.x, &a.y, &a.z + + fe_b(&b_fe) + + // t0 := X ^2; t1 := Y ^2; t2 := Z ^2; + fe_square(&t0, x) + fe_square(&t1, y) + fe_square(&t2, z) + + // t3 := X * Y ; t3 := t3 + t3 ; Z3 := X * Z ; + fe_mul(&t3, x, y) + fe_add(&t3, &t3, &t3) + fe_mul(&z3, x, z) + + // Z3 := Z3 + Z3 ; Y3 := b * t2 ; Y3 := Y3 - Z3 ; + fe_add(&z3, &z3, &z3) + fe_mul(&y3, &b_fe, &t2) + fe_sub(&y3, &y3, &z3) + + // X3 := Y3 + Y3 ; Y3 := X3 + Y3 ; X3 := t1 - Y3 ; + fe_add(&x3, &y3, &y3) + fe_add(&y3, &x3, &y3) + fe_sub(&x3, &t1, &y3) + + // Y3 := t1 + Y3 ; Y3 := X3 * Y3 ; X3 := X3 * t3 ; + fe_add(&y3, &t1, &y3) + fe_mul(&y3, &x3, &y3) + fe_mul(&x3, &x3, &t3) + + // t3 := t2 + t2 ; t2 := t2 + t3 ; Z3 := b * Z3 ; + fe_add(&t3, &t2, &t2) + fe_add(&t2, &t2, &t3) + fe_mul(&z3, &b_fe, &z3) + + // Z3 := Z3 - t2 ; Z3 := Z3 - t0 ; t3 := Z3 + Z3 ; + fe_sub(&z3, &z3, &t2) + fe_sub(&z3, &z3, &t0) + fe_add(&t3, &z3, &z3) + + // Z3 := Z3 + t3 ; t3 := t0 + t0 ; t0 := t3 + t0 ; + fe_add(&z3, &z3, &t3) + fe_add(&t3, &t0, &t0) + fe_add(&t0, &t3, &t0) + + // t0 := t0 - t2 ; t0 := t0 * Z3 ; Y3 := Y3 + t0 ; + fe_sub(&t0, &t0, &t2) + fe_mul(&t0, &t0, &z3) + fe_add(&y3, &y3, &t0) + + // t0 := Y * Z ; t0 := t0 + t0 ; Z3 := t0 * Z3 ; + fe_mul(&t0, y, z) + fe_add(&t0, &t0, &t0) + fe_mul(&z3, &t0, &z3) + + // X3 := X3 - Z3 ; Z3 := t0 * t1 ; Z3 := Z3 + Z3 ; + fe_sub(&x3, &x3, &z3) + fe_mul(&z3, &t0, &t1) + fe_add(&z3, &z3, &z3) + + // Z3 := Z3 + Z3 ; + fe_add(&z3, &z3, &z3) + + // return X3 , Y3 , Z3 ; + fe_set(&p.x, &x3) + fe_set(&p.y, &y3) + fe_set(&p.z, &z3) +} + +pt_sub :: proc "contextless" (p, a, b: ^$T) { + b_neg: T + pt_negate(&b_neg, b) + pt_add(p, a, &b_neg) + + fe_clear(&b_neg) +} + +pt_negate :: proc "contextless" (p, a: ^$T) { + fe_set(&p.x, &a.x) + fe_negate(&p.y, &a.y) + fe_set(&p.z, &a.z) +} + +pt_rescale :: proc "contextless" (p, a: ^$T) { + // A = 1/Z1 + // X3 = A*X1 + // Y3 = A*Y1 + // Z3 = 1 + // + // As per "From A to Z: Projective coordinates leakage in the wild" + // leaking the Z-coordinate is bad. The modular inversion algorithm + // used in this library is based on Fermat's Little Theorem. + // + // See: https://eprint.iacr.org/2020/432.pdf + + was_identity := pt_is_identity(a) + + when T == Point_p256r1 { + z_inv: Field_Element_p256r1 + } else { + #panic("weierstrass: invalid curve") + } + + ident: T + fe_inv(&z_inv, &a.z) + fe_mul(&p.x, &a.x, &z_inv) + fe_mul(&p.y, &a.y, &z_inv) + fe_one(&p.z) + + pt_identity(&ident) + pt_cond_select(p, p, &ident, was_identity) + + fe_clear(&z_inv) +} + +pt_cond_select :: proc "contextless" (p, a, b: ^$T, ctrl: int) { + fe_cond_select(&p.x, &a.x, &b.x, ctrl) + fe_cond_select(&p.y, &a.y, &b.y, ctrl) + fe_cond_select(&p.z, &a.z, &b.z, ctrl) +} + +@(require_results) +pt_equal :: proc "contextless" (a, b: ^$T) -> int { + when T == Point_p256r1 { + x1z2, x2z1, y1z2, y2z1: Field_Element_p256r1 + } else { + #panic("weierstrass: invalid curve") + } + + // Check X1Z2 == X2Z1 && Y1Z2 == Y2Z1 + fe_mul(&x1z2, &a.x, &b.z) + fe_mul(&x2z1, &b.x, &a.z) + + fe_mul(&y1z2, &a.y, &b.z) + fe_mul(&y2z1, &b.y, &a.z) + + return fe_equal(&x1z2, &x2z1) & fe_equal(&y1z2, &y2z1) +} + +@(require_results) +pt_is_identity :: proc "contextless" (p: ^$T) -> int { + return fe_is_zero(&p.z) +} + +@(require_results) +pt_is_y_odd :: proc "contextless" (p: ^$T) -> int { + tmp: T + defer pt_clear(&tmp) + + fe_set(&tmp, p) + pt_rescale(&tmp) + + return fe_is_odd(&tmp.y) +} + +@(private) +is_on_curve :: proc "contextless" (x, y: ^$T) -> bool { + maybe_yy, yy: T + defer fe_clear_vec([]^T{&maybe_yy, &yy}) + + // RHS: x^3 + ax + b + set_yy_candidate(&maybe_yy, x) + + // LHS: y^2 + fe_square(&yy, y) + + return fe_equal(&maybe_yy, &yy) == 1 +} + +@(private) +set_yy_candidate :: proc "contextless" (maybe_yy, x: ^$T) { + // RHS: x^3 + ax + b + rhs, tmp: T + + fe_square(&tmp, x) + fe_mul(&rhs, &tmp, x) + + fe_a(&tmp) + fe_mul(&tmp, &tmp, x) + fe_add(&rhs, &rhs, &tmp) + + fe_b(&tmp) + fe_add(maybe_yy, &rhs, &tmp) + + fe_clear(&rhs) +} diff --git a/core/crypto/_weierstrass/point_s11n_sec.odin b/core/crypto/_weierstrass/point_s11n_sec.odin new file mode 100644 index 000000000..ae009edb0 --- /dev/null +++ b/core/crypto/_weierstrass/point_s11n_sec.odin @@ -0,0 +1,95 @@ +package _weierstrass + +@(require) import "core:mem" + +@(private) +SEC_PREFIX_IDENTITY :: 0x00 +@(private) +SEC_PREFIX_COMPRESSED_EVEN :: 0x02 +@(private) +SEC_PREFIX_COMPRESSED_ODD :: 0x03 +SEC_PREFIX_UNCOMPRESSED :: 0x04 + +@(require_results) +pt_set_sec_bytes :: proc "contextless" (p: ^$T, b: []byte) -> bool { + when T == Point_p256r1 { + FE_SZ :: FE_SIZE_P256R1 + } else { + #panic("weierstrass: invalid curve") + } + + b_len := len(b) + if b_len < 1 { + return false + } + + switch b[0] { + case SEC_PREFIX_IDENTITY: + if b_len != 1 { + return false + } + pt_identity(p) + return true + case SEC_PREFIX_COMPRESSED_EVEN, SEC_PREFIX_COMPRESSED_ODD: + if b_len != 1 + FE_SZ { + return false + } + y_is_odd := b[0] - SEC_PREFIX_COMPRESSED_EVEN + return pt_set_x_bytes(p, b[1:], int(y_is_odd)) + case SEC_PREFIX_UNCOMPRESSED: + if b_len != 1 + 2 * FE_SZ { + return false + } + x, y := b[1:1+FE_SZ], b[1+FE_SZ:] + return pt_set_xy_bytes(p, x, y) + case: + return false + } +} + +@(require_results) +pt_sec_bytes :: proc "contextless" (b: []byte, p: ^$T, compressed: bool) -> bool { + when T == Point_p256r1 { + FE_SZ :: FE_SIZE_P256R1 + } else { + #panic("weierstrass: invalid curve") + } + + b_len := len(b) + if pt_is_identity(p) == 1 { + if b_len != 1 { + return false + } + b[0] = SEC_PREFIX_IDENTITY + return true + } + + x, y: []byte + y_: [FE_SZ]byte + switch compressed { + case true: + if b_len != 1 + FE_SZ { + return false + } + x, y = b[1:], y_[:] + case false: + if b_len != 1 + 2 * FE_SZ { + return false + } + b[0]= SEC_PREFIX_UNCOMPRESSED + x, y = b[1:1+FE_SZ], b[1+FE_SZ:] + } + if !pt_bytes(x, y, p) { + return false + } + if compressed { + // Instead of calling pt_is_y_odd, just serializing + // y into a temp buffer and checking the parity saves + // 1 redundant rescale call. + y_is_odd := byte(y[FE_SZ-1] & 1) + b[0] = SEC_PREFIX_COMPRESSED_EVEN + y_is_odd + mem.zero_explicit(&y_, size_of(y_)) + } + + return true +} diff --git a/core/crypto/_weierstrass/sc.odin b/core/crypto/_weierstrass/sc.odin new file mode 100644 index 000000000..2ed9459bc --- /dev/null +++ b/core/crypto/_weierstrass/sc.odin @@ -0,0 +1,76 @@ +package _weierstrass + +import p256r1 "core:crypto/_fiat/field_scalarp256r1" +import subtle "core:crypto/_subtle" + +Scalar_p256r1 :: p256r1.Montgomery_Domain_Field_Element + +SC_SIZE_P256R1 :: 32 + +sc_clear :: proc { + p256r1.fe_clear, +} + +sc_clear_vec :: proc { + p256r1.fe_clear_vec, +} + +sc_set_bytes :: proc { + p256r1.fe_from_bytes, +} +sc_bytes :: proc { + p256r1.fe_to_bytes, +} + +sc_set :: proc { + p256r1.fe_set, +} + +sc_zero :: proc { + p256r1.fe_zero, +} + +sc_one_p256r1 :: proc { + p256r1.fe_one, +} + +sc_add :: proc { + p256r1.fe_add, +} + +sc_sub :: proc { + p256r1.fe_sub, +} + +sc_negate :: proc { + p256r1.fe_opp, +} + +sc_mul :: proc { + p256r1.fe_mul, +} + +sc_square :: proc { + p256r1.fe_square, +} + +sc_cond_assign :: proc { + p256r1.fe_cond_assign, +} + +sc_equal :: proc { + p256r1.fe_equal, +} + +sc_is_odd :: proc { + p256r1.fe_is_odd, +} + +sc_is_zero :: proc { + sc_is_zero_p256r1, +} + +@(require_results) +sc_is_zero_p256r1 :: proc "contextless" (fe: ^Scalar_p256r1) -> int { + return int(subtle.u64_is_zero(p256r1.fe_non_zero(fe))) +} diff --git a/core/crypto/_weierstrass/scalar_mul.odin b/core/crypto/_weierstrass/scalar_mul.odin new file mode 100644 index 000000000..1781ac3b6 --- /dev/null +++ b/core/crypto/_weierstrass/scalar_mul.odin @@ -0,0 +1,204 @@ +package _weierstrass + +import "core:crypto" +import subtle "core:crypto/_subtle" +import "core:mem" + +pt_scalar_mul :: proc "contextless" ( + p, a: ^$T, + sc: ^$S, + unsafe_is_vartime: bool = false, +) { + when T == Point_p256r1 && S == Scalar_p256r1 { + SC_SZ :: SC_SIZE_P256R1 + } else { + #panic("weierstrass: invalid curve") + } + + b: [SC_SZ]byte = --- + sc_bytes(b[:], sc) + + pt_scalar_mul_bytes(p, a, b[:], unsafe_is_vartime) + + if !unsafe_is_vartime { + mem.zero_explicit(&b, size_of(b)) + } +} + +pt_scalar_mul_bytes :: proc "contextless" ( + p, a: ^$T, + sc: []byte, + unsafe_is_vartime: bool = false, +) { + when T == Point_p256r1 { + p_tbl: Multiply_Table_p256r1 = --- + q, tmp: Point_p256r1 = ---, --- + SC_SZ :: SC_SIZE_P256R1 + } else { + #panic("weierstrass: invalid curve") + } + + assert_contextless(len(sc) == SC_SZ, "weierstrass: invalid scalar size") + mul_tbl_set(&p_tbl, a, unsafe_is_vartime) + + pt_identity(&q) + for limb_byte, i in sc { + hi, lo := (limb_byte >> 4) & 0x0f, limb_byte & 0x0f + + if i != 0 { + pt_double(&q, &q) + pt_double(&q, &q) + pt_double(&q, &q) + pt_double(&q, &q) + } + mul_tbl_lookup_add(&q, &tmp, &p_tbl, u64(hi), unsafe_is_vartime) + + pt_double(&q, &q) + pt_double(&q, &q) + pt_double(&q, &q) + pt_double(&q, &q) + mul_tbl_lookup_add(&q, &tmp, &p_tbl, u64(lo), unsafe_is_vartime) + } + + pt_set(p, &q) + + if !unsafe_is_vartime { + mem.zero_explicit(&p_tbl, size_of(p_tbl)) + pt_clear_vec([]^T{&q, &tmp}) + } +} + +when crypto.COMPACT_IMPLS == true { + pt_scalar_mul_generator :: proc "contextless" ( + p: ^$T, + sc: ^$S, + unsafe_is_vartime: bool = false, + ) { + g: T + pt_generator(&g) + + pt_scalar_mul(p, &g, sc, unsafe_is_vartime) + } +} else { + pt_scalar_mul_generator :: proc "contextless" ( + p: ^$T, + sc: ^$S, + unsafe_is_vartime: bool = false, + ) { + when T == Point_p256r1 && S == Scalar_p256r1 { + p_tbl_hi := &Gen_Multiply_Table_p256r1_hi + p_tbl_lo := &Gen_Multiply_Table_p256r1_lo + tmp: Point_p256r1 = --- + SC_SZ :: SC_SIZE_P256R1 + } else { + #panic("weierstrass: invalid curve") + } + + b: [SC_SZ]byte + sc_bytes(b[:], sc) + + pt_identity(p) + for limb_byte, i in b { + hi, lo := (limb_byte >> 4) & 0x0f, limb_byte & 0x0f + mul_affine_tbl_lookup_add(p, &tmp, &p_tbl_hi[i], u64(hi), unsafe_is_vartime) + mul_affine_tbl_lookup_add(p, &tmp, &p_tbl_lo[i], u64(lo), unsafe_is_vartime) + } + + if !unsafe_is_vartime { + mem.zero_explicit(&b, size_of(b)) + pt_clear(&tmp) + } + } +} + +@(private="file") +Multiply_Table_p256r1 :: [15]Point_p256r1 + +@(private="file") +mul_tbl_set :: proc "contextless"( + tbl: ^$T, + point: ^$U, + unsafe_is_vartime: bool, +) { + when T == Multiply_Table_p256r1 && U == Point_p256r1{ + tmp: Point_p256r1 + pt_set(&tmp, point) + } else { + #panic("weierstrass: invalid curve") + } + + pt_set(&tbl[0], &tmp) + for i in 1 ..<15 { + pt_add(&tmp, &tmp, point) + pt_set(&tbl[i], &tmp) + } + + if !unsafe_is_vartime { + pt_clear(&tmp) + } +} + +@(private="file") +mul_tbl_lookup_add :: proc "contextless" ( + point, tmp: ^$T, + tbl: ^$U, + idx: u64, + unsafe_is_vartime: bool, + ) { + if unsafe_is_vartime { + switch idx { + case 0: + case: + pt_add(point, point, &tbl[idx - 1]) + } + return + } + + pt_identity(tmp) + for i in u64(1)..<16 { + ctrl := subtle.eq(i, idx) + pt_cond_select(tmp, tmp, &tbl[i - 1], int(ctrl)) + } + + pt_add(point, point, tmp) +} + +when crypto.COMPACT_IMPLS == false { + @(private) + Affine_Point_p256r1 :: struct { + x: Field_Element_p256r1, + y: Field_Element_p256r1, + } + + @(private="file") + mul_affine_tbl_lookup_add :: proc "contextless" ( + point, tmp: ^$T, + tbl: ^$U, + idx: u64, + unsafe_is_vartime: bool, + ) { + if unsafe_is_vartime { + switch idx { + case 0: + case: + pt_add_mixed(point, point, &tbl[idx - 1].x, &tbl[idx - 1].y) + } + return + } + + pt_identity(tmp) + for i in u64(1)..<16 { + ctrl := int(subtle.eq(i, idx)) + fe_cond_select(&tmp.x, &tmp.x, &tbl[i - 1].x, ctrl) + fe_cond_select(&tmp.y, &tmp.y, &tbl[i - 1].y, ctrl) + } + + // The mixed addition formula assumes that the addend is not + // the neutral element. Do the addition regardless, and then + // conditionally select the right result. + pt_add_mixed(tmp, point, &tmp.x, &tmp.y) + + ctrl := subtle.u64_is_non_zero(idx) + pt_cond_select(point, point, tmp, int(ctrl)) + } +} diff --git a/core/crypto/_weierstrass/secp256r1_table.odin b/core/crypto/_weierstrass/secp256r1_table.odin new file mode 100644 index 000000000..1a6bc3ef6 --- /dev/null +++ b/core/crypto/_weierstrass/secp256r1_table.odin @@ -0,0 +1,3985 @@ +package _weierstrass + +/* + ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ +*/ + +import "core:crypto" + +when crypto.COMPACT_IMPLS == false { + @(private,rodata) + Gen_Multiply_Table_p256r1_hi := [32][15]Affine_Point_p256r1 { + { + { + {9259451175701532574, 15597985540941612547, 4541553034987877619, 8927802479718285609}, + {14672230714928802576, 14284617950605306700, 13339970812390782046, 787078889494395850}, + }, + { + {18165439414433063919, 14693282888419586094, 14992616289789993230, 13232208150801553912}, + {16850347485914337693, 223364064845089224, 7302899015436300563, 4391216311540396088}, + }, + { + {12558388403188680537, 10687978569513354810, 9373570856564649772, 4079327722512691465}, + {5372437374337150740, 3297421622932790851, 9326853593823854687, 8305371884938201251}, + }, + { + {13121472331750731303, 323745485980480220, 15110308702528119977, 4696302365805118372}, + {9859094500834571602, 5315656270700787939, 4187063204400651801, 1695695129564818327}, + }, + { + {12817586844019849804, 15425488216915741929, 15293562913126043054, 11770898970765978555}, + {6806103820345670787, 17789094149138630459, 3807781571713999192, 5823254011289457198}, + }, + { + {10112524230916015604, 13571143908656270599, 6031089010487808103, 5774558171390644848}, + {1808959243244841573, 14071312530426692155, 9241399242704553402, 9836150050655369231}, + }, + { + {14083007972403535491, 16009534514129505275, 12481249112231139039, 10309390659262581143}, + {5782517315325366794, 16717384553294759530, 4578392002424884134, 239005024949492645}, + }, + { + {1836857790164349346, 11263074778654917115, 4786985732596838094, 10525445084936097674}, + {1484357665966453236, 3110871407036679558, 1668700683093601768, 2736269131339849752}, + }, + { + {9249362594190920246, 8088172462140746331, 4080107866285682736, 16205599538438551353}, + {18312943145606312277, 9100632964181080418, 3969991115337154345, 5340098959750368315}, + }, + { + {12122448407048035645, 2891250339380982359, 12794212052932523400, 7166035112141500392}, + {15777441312724841162, 4552528682229856831, 2210391301762911476, 16410254680957321386}, + }, + { + {6910044784455706429, 11951245774670922855, 207795885948948810, 3884359690300962405}, + {4578772752480772344, 2948797025787714138, 16774444535658202808, 1388183483009000463}, + }, + { + {16561979129019905420, 1881862411760441386, 15441950514711322010, 12933020223458438856}, + {5570341451312029630, 18172638959728259059, 9074261777549091198, 6171200053222754816}, + }, + { + {10126435102176037237, 1545112930055760251, 11563139991870561593, 10766754172364938834}, + {5116781688621052838, 14471715119500781375, 4724882615229687192, 10031687030722046325}, + }, + { + {15016829467434780812, 6777508689306592732, 3811682306063049290, 11475361222871876387}, + {6080948654298953274, 11612742274762615033, 5268311600240325047, 9147351973710519861}, + }, + { + {12130203770930472759, 3880998309361490881, 8807462332494735511, 9291388074337055133}, + {18165312304248982432, 12733144434841535979, 18090195697688236271, 5825342884125782172}, + }, + }, + { + { + {194633990068625151, 1028128699653523895, 7436102537486268753, 1855520454959348468}, + {5098690958966904466, 3342676718901330604, 6942212660412942406, 16510188838209674083}, + }, + { + {7963995066277321795, 14986230345162551366, 10616366460602472778, 16186943329215681149}, + {9522855644164647723, 9858336437877021178, 16344942402271072884, 18027353494090590022}, + }, + { + {13392726161043192788, 7606793939450765773, 9543984695709321129, 6135912406103198328}, + {10903991926178685177, 529801710637680784, 8207012095420105234, 4590962949922268360}, + }, + { + {13175608910844763921, 11168387468381338510, 5555873864224342205, 17780559602571640345}, + {1582669533588472814, 8145133762789622706, 1625372887980692455, 4576809104068554285}, + }, + { + {17616803153811079355, 17809794753465712025, 10788493879428408032, 1263026253532745742}, + {331896291298606534, 13299145463579793142, 8951131463540898010, 11121758705853021600}, + }, + { + {17015522374255846157, 7155392284047197223, 1248775493117789546, 9199472299655737207}, + {13126885324657282947, 12092989376083683289, 2035698983314262432, 835441512024005104}, + }, + { + {12481871371020004325, 15786477648044981224, 2586272424816191689, 4208704695692543659}, + {16940467964964992440, 11207566805119564978, 2858987625603639630, 9561510646236248154}, + }, + { + {2900978533555060931, 1749946807863203576, 11705734511931072459, 4446980691693419424}, + {14437524160594907241, 12795912566640000773, 10400036254697939154, 8356113088668925361}, + }, + { + {3770654812111500682, 7723332701546321657, 12057007323752084660, 11871339027463593983}, + {8927366002257844381, 331175455338905356, 6085376066711046662, 195998713859126244}, + }, + { + {15888580251537997623, 14253909833728698978, 14445538492667230716, 4028538972354525849}, + {7720263170150940477, 1190890222876864097, 8657188516818851005, 1987613286973742753}, + }, + { + {1556082539082087499, 9191446579576007527, 16923484407567577707, 4662661048159090855}, + {12760778972220173745, 3942937056545553996, 12952479961991875179, 8914103212381870290}, + }, + { + {8900726473285671992, 890209742292473781, 16059468388719373167, 16577940938542233221}, + {17381766864962227733, 231915274132518769, 16477817024012878700, 15646021286310268545}, + }, + { + {10104554368814337641, 170400126349943750, 16051269335758964391, 7842493858299913771}, + {9246756702190574744, 110682656515867335, 11402798562961521905, 17325237240525801251}, + }, + { + {15837018286366797690, 18114413810565810328, 9441874034567150801, 14075941137889189393}, + {12786763055047269260, 9121030808281463204, 1713778999270814105, 17015261864438490667}, + }, + { + {12997570542605430113, 5500897611058123544, 4160129407772614089, 13768264346635084004}, + {6638654171187871203, 6080635069726153281, 2255431148803290413, 3789670411999607189}, + }, + }, + { + { + {1830819081327272165, 11951292080860646547, 18002500803418629938, 13317986695217403840}, + {5005574200470766330, 10138179785738652504, 1610518863105278224, 13309443265578956954}, + }, + { + {14192194428653714479, 11578618567931657764, 6032668189933768881, 15981535562386193924}, + {8925792218631314923, 9408714146004183681, 8859017894477140398, 1675606340537058506}, + }, + { + {3265119697568866078, 13753322853248061974, 15435163376825672274, 13646180516491714938}, + {15620545622955090250, 18241486585498394565, 459566729126467878, 9728217493753855944}, + }, + { + {9883406233903270985, 17184231210468300584, 5498903678702785900, 6903833261382863389}, + {11489138095102981636, 9021901931786177471, 3227433089132150317, 16639455550797627042}, + }, + { + {839045372102318861, 2032615141683118500, 1921816835840256924, 504869150737570005}, + {15932184001422473505, 7849475855313305697, 1189994394722618598, 9874798350548229684}, + }, + { + {4636201671610663345, 16662311204732135584, 12398897461787695675, 1355753199357412657}, + {14695655628527768564, 1692838776852698754, 7346906782826540912, 14869028424564984700}, + }, + { + {14240080119980315297, 4751983902385717684, 7941412103662252178, 4796803816695225123}, + {9327986654018000413, 15111345676387005726, 3582558555283734415, 11913156735178831102}, + }, + { + {12915868875134296756, 3071143582305760275, 10848717856747030010, 10973183887638314967}, + {5983269487036236823, 9885184706933333413, 14509493669845681951, 9669608065801379977}, + }, + { + {7848634325810890057, 4356492357483949442, 8777700982672429871, 447737364627887590}, + {2892466086138453900, 12013259293340538023, 3423275627272380730, 11171074631447548946}, + }, + { + {14593553227914306527, 7393098159726367793, 959457858782426605, 12924066827318848802}, + {14790800265003508462, 13805969419986022239, 4408523909823076864, 16722715416825698787}, + }, + { + {8554182115079118694, 17233907570567075631, 12336560627384786590, 5123566378696582545}, + {96401035522143140, 10138155491929979850, 17651328686428132420, 3453390145222258032}, + }, + { + {16197242500758474188, 3349369240724295499, 9422940308750670637, 16888844525585804807}, + {14045424784406071799, 13180603138700207746, 2683581192503868543, 3842875784859878}, + }, + { + {17498073686183419231, 6922314891526280784, 16083733402282932920, 15425477806093217459}, + {12425976625898608391, 16458101989314253841, 10013521940061058050, 10858868879196007236}, + }, + { + {123600201037598181, 6690762836954208162, 17157040810691942664, 15263405971805161132}, + {8685477170453562173, 10331174323986544033, 5789045082422148337, 3007978469441468974}, + }, + { + {2402095889286816125, 18054120920831753009, 11753130221915918396, 10341553510464463050}, + {280903370426929900, 14994955837151914025, 13551362401871479612, 14711789630561753093}, + }, + }, + { + { + {14086745261650819748, 17953107869776717888, 1777725846494438428, 2765314406831814212}, + {2603997194371852991, 2223517025105045134, 15579901335531749634, 6571733615332171148}, + }, + { + {5478465698516556930, 287443454357750768, 12201204663663129285, 782849770204658255}, + {11270045035009204251, 18152683972363144337, 10463300037926642739, 14363641589598863851}, + }, + { + {3790592075869665284, 5120320091554329756, 15361581282394028709, 14360464660911164915}, + {15249656958991931940, 2563751872827049233, 13745792006936646733, 14572943674933168173}, + }, + { + {3167679014977537749, 3417445004776702290, 1709246158507866266, 5861367897285174360}, + {8437429877561342262, 17231607446243478748, 16047596399306766948, 17656438585829685897}, + }, + { + {12977336347094692192, 13723871955002954132, 17399919575273038847, 16163973860244779675}, + {14997921584659740746, 6543247361992425067, 4675926398794487109, 17580512382853194054}, + }, + { + {10778828023580771765, 9812611440536367405, 14168149065325522570, 6692229110872358750}, + {11010962724400581057, 13055203605065073902, 11396463140731730116, 16969789651736772232}, + }, + { + {3285258013801327520, 14114268241282882888, 5367399533198476395, 17277410244918727028}, + {2751895479568588421, 751309667192066167, 13038472116718581917, 16013586354334596135}, + }, + { + {12364168614988940500, 13194367252463423118, 12223406606527741280, 5014139294736037086}, + {11244699482831816093, 5336498572491451990, 14268404582568856142, 14502318820969599316}, + }, + { + {13295673091232554814, 313981772853781347, 11829785736449464030, 13341198421333360997}, + {16787450350663111566, 6525407229623764159, 2012189087039636323, 2110887590404698758}, + }, + { + {16984895766311549717, 1057465499230843916, 13565444352859773343, 1019268943988786852}, + {2190009140530404855, 10045598732295352970, 4789803496780829836, 10700158388954091321}, + }, + { + {14840255112988420500, 10066628133368048408, 6527354835873855384, 16106607076894419125}, + {3989024604987083046, 10713316697020150694, 16811389107269552264, 11294596059797019619}, + }, + { + {622403023838932676, 11423409007234191765, 17086830255702454786, 1213655124481948199}, + {3976593910085142945, 6315875935390432543, 17947502153968859628, 18031540937011531543}, + }, + { + {342675887578148289, 18366454547938469828, 3853530442390999217, 7499455395579634652}, + {768597405171336502, 1636271570683567151, 16786205337983572309, 13056241332863199715}, + }, + { + {15991153618414855143, 803325462494472241, 5709347424437559249, 10138502962472290727}, + {4675124205115228106, 9599016746550345197, 2769443894695609085, 12311020551315051087}, + }, + { + {11470964304318784059, 17313372553735202469, 10686997186364536871, 9228453594798060121}, + {57933324335302024, 8931389936300346353, 17823596478938529898, 1126996688113949835}, + }, + }, + { + { + {15804957839814547154, 7924193945337173678, 1080401129055171214, 10816444561878528576}, + {13171610473229361771, 8099842733764406841, 9284741070210451667, 9245195215372025289}, + }, + { + {7185947197544988797, 13306809398790059447, 11440959253278285287, 15084384140482244570}, + {5059824327869316332, 7585354587200615362, 6801884469610571467, 6427162399794357267}, + }, + { + {1505501490785526604, 6062033360335279190, 13214531355927393851, 8869230490276248430}, + {11596558698255017116, 6698268011950867978, 15445165013361223076, 4910055064120213146}, + }, + { + {1453348772281274490, 13028088570940491471, 16100623112750251840, 5210244400259879874}, + {9443916155735416174, 16869520919318450506, 7479400208826706574, 14374970913352602458}, + }, + { + {13057495656815142976, 1743194961605203063, 15733599697884179267, 3501754291485677593}, + {7405256272105757266, 12344297842308545819, 3389605493339498760, 3092252531918600248}, + }, + { + {5038191990715247960, 2723916483244871576, 4891019526710760134, 11094632341133260369}, + {6274429941353136467, 1408871421293516065, 12455625869488488781, 3401549469990652817}, + }, + { + {4716563932720198201, 1584625214845878997, 13213357619008940082, 13122950207230795185}, + {12303370001794463898, 6725033180592084698, 12302152314224424594, 6139100303374835750}, + }, + { + {10149597276931117465, 5778043705364022356, 13888443605241209218, 6889225091714429810}, + {16209363638493043975, 8516350006446457646, 9214830076046105138, 8894115046323798175}, + }, + { + {161027176918876103, 2287100732338401479, 16561946444121779293, 9805329436091376243}, + {11473978632757961256, 1245289731366992705, 7338435771556366282, 15749864527919116005}, + }, + { + {2753237807828198865, 11508305846735597339, 9058745440380813449, 3960739040735759442}, + {17921955885187582871, 10231929062430218022, 18115018235326517243, 17854413167898372208}, + }, + { + {638684488109167329, 14596365931372343092, 1917271942976854297, 12291978018935761003}, + {5076527739384635812, 7833625460571766680, 17060902137821849350, 17134703695475138982}, + }, + { + {13026208197163596446, 1935567165776196957, 17296090833026336866, 8461284827078097590}, + {14545382879887213077, 3302103559307506085, 16026840048628844803, 4599071908983273604}, + }, + { + {9156540407095300222, 7598243263658987831, 1996711254516517688, 13013193687414837552}, + {116495354444693499, 12803585308662671588, 8278106437192580735, 3374263264867687146}, + }, + { + {4318910866113560561, 8122780372606489166, 11952351993471767425, 9581759925599323445}, + {12268585667545114307, 7286163136539353394, 12697490728074784421, 7270019569202782882}, + }, + { + {16247467139569457576, 14043942371464607677, 6338399572126720647, 9528527345786650933}, + {16344656963096275115, 13804658662065732334, 2991248997774547140, 12174436388699549119}, + }, + }, + { + { + {1169887957113173798, 4936710663791789838, 8029349457377894665, 3317691225106441967}, + {3622769674498678594, 1954144360900150482, 1432045977341997899, 934737636789214593}, + }, + { + {9646181593082190523, 16068017411165381498, 13319927590045936565, 6113055520205251774}, + {5576373032696512038, 13880344501714804196, 12022206929479211261, 7387979357081975315}, + }, + { + {13553890993911526641, 1237937561304731611, 11053651340854998814, 8737874920379363783}, + {15414508226001886918, 9311523317130687807, 12080742822716708234, 4715194040021784977}, + }, + { + {17182132836049601530, 1486820395924546410, 14089047182364760490, 5375431386740917568}, + {2352352269256972682, 6220398075470064021, 11444733678216077372, 8173002234516562536}, + }, + { + {7896339057146013415, 17613745684396593735, 4238258305077796259, 15438639564771394288}, + {1482402451684594916, 3104492350488980260, 5195487229736262641, 1361150797580203482}, + }, + { + {15949855327936545010, 15892613064802301412, 7776232754624386979, 2193423430757249310}, + {10751855334513902678, 13772090376350944100, 5644047706587449960, 370992037484721524}, + }, + { + {16329953561108738383, 14553061366216182492, 5112198484879130320, 1893048255589705004}, + {11469678860036344015, 8992526488267920066, 18208245559304821518, 8980963391041920447}, + }, + { + {5783711159088718530, 3503029393593618754, 10736192136662142256, 15443859608128978668}, + {271805305647187927, 8244170003029416464, 17017071503038388446, 2536084345379259313}, + }, + { + {9850291665987916519, 6499970366121170030, 7001995026899086280, 9961826319039756858}, + {7497823327397141096, 6975352931548332265, 4068344268340314997, 15888973419716629698}, + }, + { + {3982898776583485812, 10403233710814076420, 8681461491810344216, 4116685619183896910}, + {18192868132325233114, 17377077437999490605, 17997716263755054576, 10376686656480866118}, + }, + { + {3479412946560984795, 5044366097675527819, 13707564929638264911, 5666779920208401261}, + {10137470376683230183, 2075467328249870088, 11457126564907274413, 13701087332649256159}, + }, + { + {12574253652565934836, 8388159655344384255, 16127953452716629313, 1877819316325313228}, + {8945746653921217760, 4616678606113198065, 1336330019150074567, 11910289150769410280}, + }, + { + {9565592090082898867, 1968790057506790036, 4797721149040405609, 13125809848505545280}, + {14122665390767023537, 17271175538744290850, 16007653062195668190, 16371835205840876479}, + }, + { + {10409691258933377688, 13736467137095186370, 2757793467881882435, 12443439690522935631}, + {17601924849565694404, 988048065500720515, 7554063443268400107, 4274248596892038508}, + }, + { + {8972162505776549196, 16209364130421564220, 13018196697272262431, 418388148277092169}, + {11645493996879973039, 5024734975063482607, 3708889997144620499, 11208942121415360714}, + }, + }, + { + { + {17596113920958619489, 11920824479658301378, 3786905428099710821, 11112764289322906111}, + {8817260450068629272, 6518847791514184438, 14593687325057339783, 18018581321332807475}, + }, + { + {2056254186648603335, 12143016575009965669, 3290271983033386616, 4338404082685850854}, + {12660444972475266123, 6345409453044955404, 13278869140778657354, 10063005167581762786}, + }, + { + {5303950317664091150, 17409642188139937758, 12135894348302287058, 16444741243419918751}, + {13935885817311324323, 8496908197501732703, 12163317723288843510, 16891353436915314685}, + }, + { + {4168420842704770545, 338440394515115377, 2102734009665481092, 9772725684473416465}, + {1247616337419130000, 4222072446972129729, 4836898447189504007, 9154346000276664999}, + }, + { + {14649401370738987318, 10044081678892811795, 1306517740393103656, 16586067283450489622}, + {8211832777731897494, 12849393859171286949, 17327526552807783018, 14171704619529498238}, + }, + { + {12849053390245557890, 12693731077061619694, 5891211584023409476, 1008960642219209210}, + {15593393872187214387, 7381248773473326001, 16559656086795428559, 2106025108820858934}, + }, + { + {4347667984894353308, 2129883711661222690, 1076488804494872856, 15059968377755299195}, + {12380937310378496242, 16425480883270944108, 4769192332535557551, 10388305045430499744}, + }, + { + {8553482596123775980, 12627020622203381515, 10774788686070344669, 6271789114731522097}, + {6270586844349642345, 5584690155569770537, 9478526526319537174, 3405597782572827563}, + }, + { + {10255408065071335198, 2384996481315588922, 10679447117297819075, 3734157461055440416}, + {1635042286365643780, 11321809677772938996, 2373960964139986040, 4869129159740273704}, + }, + { + {16681657814739017038, 2045405432090866328, 9473434018957974472, 5549808619751464269}, + {3650191693776946828, 15805634549736708741, 16764187297356548667, 6849534466635874363}, + }, + { + {15295973549776084894, 8150873746601283651, 8017271980921908229, 4899654767305073834}, + {15257501950484641691, 17365331272978440066, 14582514748324426172, 14727798284858071666}, + }, + { + {3180828552573045472, 17698570278585440462, 8986722854533057232, 4518665117523514004}, + {1718699978312382231, 16973074530347269964, 5684175730451960274, 17228649521631238473}, + }, + { + {2897180423141326703, 13691273076814343144, 2967066815351306232, 1032540647518716635}, + {16365716239989474776, 9503666134295232767, 4599017511227366879, 14475021161770955579}, + }, + { + {4512626226592149712, 13575110216387069176, 13488662643497927183, 9673147324484250604}, + {143936220816719815, 2307325398241477161, 468315224038772027, 17743582630124600591}, + }, + { + {1476494936296433813, 3408612621327299295, 11632756669813257564, 14296719897220703576}, + {2241234207239321749, 12237974399755684219, 16253635131573079566, 11892871179872526079}, + }, + }, + { + { + {9440495138081785154, 17328162383695942099, 1870751290505230781, 17987066187778049275}, + {9952223038481207705, 10126409487298126876, 1181369784146909444, 8158422380540037915}, + }, + { + {10892870009313407934, 5709686117526627488, 16343828906887149047, 16063790174205876315}, + {9076070192754075075, 4639156357669822592, 4904064385440242264, 5942264027390072320}, + }, + { + {14586043427955633062, 1886633882927769308, 12786104261802569226, 17414735423561048102}, + {3869682486341171982, 17146691898427698057, 9886217016173201579, 17515773620461053745}, + }, + { + {17271984572727555145, 2097715321690717305, 5328035183708920909, 13206781766168781008}, + {5915693606819932446, 3870849056297265622, 18070792155150730518, 7786839743829304936}, + }, + { + {14091274565690260814, 5039742420071412611, 2322945829654574283, 7678395717670225646}, + {17396071770599775867, 4747582460834310767, 13387178106758137047, 7224458787360678986}, + }, + { + {2020583809775623843, 3803516109208330416, 10492323079463714031, 18244921722581618682}, + {6400055933742731191, 18370212581946723247, 11415812944884122048, 5987324147127294665}, + }, + { + {3106709870210381627, 3437108621064387068, 3265644153772373951, 14353255805499610949}, + {11329727508866046420, 5461257448868659690, 8139681370942905079, 8439558396411914298}, + }, + { + {7939886940063870939, 3597929036186322512, 12732772396498766041, 13300425267730247515}, + {2345112231224079293, 12327614629296314761, 17106102937162407683, 1702694317559034053}, + }, + { + {4276582831142955483, 1304336253044853784, 18317056640605949326, 11200473213973297420}, + {3937030502759894542, 2315314353886242360, 2673827662906962132, 9781744582918546067}, + }, + { + {17837268310687096164, 10122495457633601623, 11985150009870152981, 11282144500794610389}, + {13999168735732598559, 9030771445951876212, 6423904381826094276, 6148980837201061250}, + }, + { + {14621142736654260750, 1806201536162806753, 12562675185535659971, 5326177198980139868}, + {8675433132905478434, 10796034085894917871, 7562073626744691385, 1491977564717017512}, + }, + { + {8821632341545057929, 16708916351043551467, 9171560460858577216, 5711973041149612575}, + {15808302665077457285, 8412173943543358851, 12602476370021215716, 4778674887660148537}, + }, + { + {7524796586818405222, 5468491023058834244, 7965536127579551161, 9575670558568595724}, + {4020611179055350793, 186082735900253826, 11198349470461895384, 2693853052562145978}, + }, + { + {7977371007734934919, 1442746893361509157, 15080044066626816201, 9179319344686817504}, + {17927184654813605164, 16541635384799094673, 1663389722548868092, 9157422724003022421}, + }, + { + {4167146676307544690, 12042136744739037957, 6606952994938338836, 7554398412699794678}, + {11844277247778765775, 8165791089025933303, 14954338535964037723, 16693854111477654477}, + }, + }, + { + { + {5841260956815214452, 9461234662498869948, 4761949640006529525, 18229823346336752572}, + {16055957459773168413, 4272222475092786627, 18249888117586812770, 4531982814021269346}, + }, + { + {7270238601276019194, 7318279377964882079, 5226788506940171017, 16838449902078450273}, + {3375184937745100689, 16320655850583231520, 2173229791272659780, 9816381971766204380}, + }, + { + {17113448198982970082, 8879656883528014268, 15215762680430094206, 15232212751792759071}, + {13699137317730183483, 11815206710130297569, 12298409691055054593, 2192455093917691024}, + }, + { + {9742819322069712752, 8779224519997661749, 2591205872359340025, 9144644967919881415}, + {10495832103710459914, 4557264342687723360, 935865282128150338, 7120324256648044882}, + }, + { + {4683169301229531061, 14940390399739549639, 13128742567354398401, 15222231511210090535}, + {7352694898928671332, 1221555526903686446, 8697118143614336514, 14515400523185205597}, + }, + { + {10239864229747754958, 12477284975467600510, 14054830413782031834, 17752968481181892755}, + {16082713391521411762, 17191329716867535304, 11245514405315337909, 15159733745232554536}, + }, + { + {15444441705629456398, 12030687282161152512, 16500102437404896225, 11467410246278043769}, + {14031300093087427598, 14458597378298191386, 9434445586505481169, 18221119130471329822}, + }, + { + {12694666558858009121, 10992313774737315187, 6046508760845509477, 16818819584649823054}, + {10464090160691032219, 1221502600750419478, 8658907655588546849, 16110628890984509877}, + }, + { + {14304143349839262251, 13048055876309896774, 8676204847923624352, 8365498293767636038}, + {13565995665971214654, 10895028049457785231, 5911971723937387023, 8436244239466286317}, + }, + { + {11501032393232899227, 3895174794911924947, 3230698222875450976, 7264134402609589101}, + {18091100044992147344, 13252184705645692134, 8424205723200969631, 5731735154358029264}, + }, + { + {12163905774765001813, 3911227235818691672, 9833792088244333742, 6413344327541478453}, + {15325942369130325853, 12629318625161567307, 8784755949357111975, 9462269284575183222}, + }, + { + {2157617452419341992, 3753997642171159286, 6553292364671628995, 4814048166016850277}, + {6152139240994642263, 14066819599579263267, 7377541740373798192, 17830582976167057789}, + }, + { + {6906089045659836134, 17967958089618664024, 13353206790928340833, 14671934547763383296}, + {12187232481950713594, 8718528695481423527, 18137604428804898613, 17758096361511845106}, + }, + { + {17646581888040948752, 8252837592394234071, 2508742924483223473, 5332070238932154531}, + {13165985796861395246, 4409584176627274781, 9230253121183107430, 8784052955551358471}, + }, + { + {5394535031187713437, 5279515585052353937, 14159976884067043134, 10130852155763718010}, + {13777927158878861230, 14015445621678244733, 3350717438960860318, 7071836838770144750}, + }, + }, + { + { + {10708602749843635238, 8046488591192123621, 11391158257016334553, 2512908912806916201}, + {14760224624269838038, 2631910198880826809, 2387247811669872033, 2048193899742148806}, + }, + { + {17392983665205025720, 12603331233691760840, 3752711326309791976, 8281544857330094164}, + {17004651346561270106, 10399322540256775923, 9721299450284863176, 3725182263994944884}, + }, + { + {13643198694788276032, 8127425924819487897, 14165945065582850538, 16520977003164405917}, + {1941948502806705647, 12390949208067741787, 17112117376594486408, 10232906951259490042}, + }, + { + {74190110112564319, 11227229657066745164, 10151080599595091944, 16591051376074591375}, + {8256332495682655293, 7127985739945537626, 5708687346183367016, 18310921046455023281}, + }, + { + {10040565835468209502, 3986586816478505371, 7957179672896506016, 13347112914739722590}, + {14099734293320932556, 13921950344400895005, 17478414833301838037, 961445463330402797}, + }, + { + {10553899634420153414, 4215979268474142438, 3643081140297634139, 11620906704125380460}, + {17733628678553828301, 137473878710304143, 6211837577294956591, 13926110616399428016}, + }, + { + {15203257341351417031, 11597829209697937782, 17317571979811895272, 15929491640570317745}, + {5731227916276913121, 17093153916149088230, 3908757069480556294, 18211818355208735794}, + }, + { + {6887629766078662088, 15330755394432598442, 14144608177273202986, 13258654996547018856}, + {8975611270007504091, 16869834856279102361, 12707970875852047823, 8520055680055874514}, + }, + { + {1643407997152867899, 5400650551136488814, 14663391437159245064, 4743209938058826866}, + {1728998201888511561, 11238331920657195520, 11617984741897247805, 13858029141809651878}, + }, + { + {14003691155137683825, 14641672309228817657, 4031783205073356111, 7414359968614421153}, + {8166814052414482491, 5209260157266028169, 17555696996149558694, 9780166780476833956}, + }, + { + {16029688335186691281, 4244772808651443261, 6450459413414527821, 695875191412722741}, + {11104054226249884864, 146461617619843327, 17480214580411209436, 11285418463967817315}, + }, + { + {4922928863857449168, 7226901725606965824, 7568276305032368752, 6253457805758596797}, + {14345040877576203078, 1718759302498746946, 3544444746772280646, 17880302727399449566}, + }, + { + {10693864548794383214, 736148233485985101, 5241869061152863453, 7166954323782542739}, + {16861482585847848251, 11483636939866570861, 5950529069765100144, 700887039653157350}, + }, + { + {3906969739692830848, 5546431121705298614, 10491799900914853406, 5871175286230239238}, + {2851574662174517162, 5511397532379144624, 17409985391224790540, 319012646822749823}, + }, + { + {15269778527761027251, 16471737837294177924, 8830398856035267114, 8206807757132984992}, + {1421214226977370752, 14233751335943482739, 9668238787333455452, 8700964319357541954}, + }, + }, + { + { + {16477698187919702699, 2757160833848759781, 5976267476122243443, 7375951277779829055}, + {6525111513935493528, 9969722922172879681, 12582700753056539952, 3861958159147836631}, + }, + { + {6001837395299394988, 7545846298204709215, 6662102781970969966, 12696054550672669874}, + {7436995610194789060, 9042605089262227561, 11621508125069628605, 7289479057360149973}, + }, + { + {9447061002880879247, 14620964119546151815, 12310553083192998735, 15923694411935453454}, + {7392925129127637753, 14135139889986895975, 12760571438361221130, 17000514617803354735}, + }, + { + {15555649500689005370, 7857014165815014600, 4664069234996337119, 8058230521837307501}, + {18090421626009183450, 9278179697462444898, 17138879353097908770, 18285223269807746171}, + }, + { + {6099842409325199202, 2732701612070195412, 18229871238556385053, 10275023622778520796}, + {5986266691884320152, 9796109565274465130, 8132405984970989382, 4521405733027618902}, + }, + { + {7427469853953577123, 9581104712231034671, 1702722776800247878, 12656779221313783543}, + {17977155285174544822, 7208039998659519604, 16978428797146101290, 4487821481774245164}, + }, + { + {8040999562333134211, 6854344540855006667, 2481534773419348751, 15571316619985340537}, + {10089854957334316687, 4775911690791701632, 15619815835608539594, 336338508421162031}, + }, + { + {12741225973381753432, 5461579923265799106, 4348015554411389960, 14970536173310927872}, + {11568371199139699619, 11748662751675667230, 15495664823061891700, 670495577617908409}, + }, + { + {6065163107315563308, 10179715614080542168, 15046885616273736618, 3965401047645186422}, + {7013093813183571821, 6087826007582017410, 14469686436525543908, 9620661780899615891}, + }, + { + {4469547109588409455, 11124190799085603197, 7471495874998642156, 14754586999614006506}, + {88849924092797594, 3031352551776027825, 15701321561580429717, 783416358537121491}, + }, + { + {16899538363784443428, 1224176808212436099, 8044883358999763192, 8119246882922976226}, + {1602185320898819533, 7795133078900055750, 15379182653822915088, 11717676755990779936}, + }, + { + {9865772269601493999, 7325690007062740244, 18437964667185475354, 9546360111100619473}, + {6266116854923135821, 295905071295541234, 16037468634731642095, 16602609756229843150}, + }, + { + {9871952371310035629, 16929106233175362415, 3445554197529258762, 1598752868683659684}, + {10123732080482057842, 2393692486932623922, 2380673894473467164, 14578017559552626408}, + }, + { + {16688239163561330036, 11170579336923472003, 3699145675255553709, 3266133724446548264}, + {13646430870088709566, 9802235972068927845, 4016187574117121322, 8646347483626678378}, + }, + { + {3473609455134319994, 8666646689587058890, 10588670228528079578, 1636194164122827747}, + {10443498896203771168, 1711092164750178258, 3641509682909832777, 11037852869436666140}, + }, + }, + { + { + {15254713655124736464, 6283719686609422435, 5417864180357938798, 14010638809605797246}, + {10873690600705871523, 15014239467130590294, 15765460219545280655, 6048061577845125750}, + }, + { + {12012729503226546642, 4811951115754240681, 2652621264600062520, 1108958391967017223}, + {2508980100759035797, 9023233544151778447, 11183557587641545146, 10726727280840759519}, + }, + { + {396296174223428093, 16763788748988621834, 10606803701784640909, 2399987183687936561}, + {3641562114746393614, 8536687357022564742, 14532545286961725758, 14658331097531946901}, + }, + { + {2386026063595321071, 9144724461940169335, 13121187420621518554, 17351696676224980491}, + {143495028693925520, 4590642171152119027, 8655406817079059692, 10005507077955932112}, + }, + { + {2047964090310465728, 14133690277069748515, 8287749071957055844, 16821270580974431218}, + {10324684883587585565, 9652498187344172497, 2461802306013063247, 15048850312040680643}, + }, + { + {105705035058376953, 7541598459498134635, 6627685529861836787, 5724525771392188178}, + {13865897118300842617, 627652561624109853, 167084371112939132, 14192831153344015422}, + }, + { + {12837696619944805389, 13470316523008526719, 3074966674353053986, 2630814767089382743}, + {13353767941686870870, 11405513520090968568, 3071969598389884693, 8212421686942839224}, + }, + { + {3464453985305889088, 7486900500389940957, 8944303108517222303, 18319933556403836918}, + {6782476025105836770, 12822840946923377510, 2799592944286097404, 8737598030273298051}, + }, + { + {170025682710985810, 13049055489275530431, 1714038719952287416, 8470425667049459662}, + {15692449588624337561, 6306908925988159475, 7292362624201217567, 10084542069209889549}, + }, + { + {5788423445465760069, 7489854375947810149, 2512436350424132958, 18422682564857699600}, + {5177251288327577128, 13879051611542381588, 12430182880452441435, 16367520376757404605}, + }, + { + {1828702178325893477, 504110179554648546, 13285173922848349127, 15811513724231368560}, + {5009291056218383875, 12726125712718222937, 2511326207435121241, 4878070763721166868}, + }, + { + {3151967592390934907, 8745573685636820318, 6591530195811780291, 2269684725432150574}, + {7575618284647930930, 14430170051221190457, 17370623489799706048, 17190167628015666439}, + }, + { + {13971505255871035961, 14447456703883945351, 7749508685925819836, 12281701633335081378}, + {4638096293890044597, 16388439049639616700, 2805317369196495081, 5611057071508020450}, + }, + { + {3416635149605340108, 10996030428276056653, 14121021550848949146, 17748729969482499931}, + {12079053778595035959, 7473419378019222577, 1862205264236631673, 13655366704192015583}, + }, + { + {4817911180954611512, 14468615228783100826, 5900448495927012352, 2522071476550218088}, + {15649024877429766334, 3445298745493942789, 2295617386899137580, 18376023059372246253}, + }, + }, + { + { + {5228416958727036186, 12534300056259911378, 6859045937063682340, 16561718753727911412}, + {9427589074776024847, 4167904055656501509, 10156691045253563236, 17557096561606923049}, + }, + { + {12847261474293104380, 15935635664155479706, 11956861064550631146, 11743590506948225647}, + {15973092866215748716, 8269726904881958353, 15639962392523441528, 15171417818360069012}, + }, + { + {2605212343977737441, 18393471024186189813, 2302707671753008158, 8606549841034095192}, + {3842822953634987820, 3094721493917442423, 6408313759447502937, 13486364200254727287}, + }, + { + {2191808101092881088, 128992526124656216, 738676021426139131, 10157323147642681558}, + {11221959943853120586, 18255489816550713347, 10885231659068427649, 12104397395119665023}, + }, + { + {7707807226411417919, 16609863548699265350, 17639371636697428128, 8755472387723764172}, + {164779854477783265, 9714199241756765614, 3491355372893948450, 17683742455036967163}, + }, + { + {13595758632462338296, 14515163666150177917, 6720823780841221770, 15071435664343609336}, + {9016075014492765983, 16881277609836316886, 6969993988115170067, 15419704786434737070}, + }, + { + {14933348768149415725, 8499210770493553168, 6778840616148281272, 13282837866452012488}, + {12007326272174861053, 11172739862019218274, 15202495365302649711, 8797477675597086120}, + }, + { + {17862558746132168231, 4941846130090682869, 17131557654945008226, 5312800819142473968}, + {5818269467205924209, 13458582047859447022, 2683428091382447153, 12956887954464730664}, + }, + { + {11820752998821943867, 5623379642132478491, 11666807493120740820, 7241997274572162616}, + {17165010508995490690, 1769225877906480182, 3814296306467163522, 1913823003062817434}, + }, + { + {11936813336110488997, 3878433838529606580, 6540053284493149566, 10610279324743393563}, + {14079852809920102066, 9176732841330794388, 14287311909822853963, 7146204303626670196}, + }, + { + {1222343790928490335, 2199405396044383670, 14080919887213592148, 7341303626667347624}, + {11784881532696657518, 17307742911086150556, 6036132721599132043, 12167106497065306941}, + }, + { + {13817073203406999359, 7220729284169210756, 14908407498603601482, 13536224989620701632}, + {1615171540711527931, 2063856048260214664, 10622581435417474559, 16378505765730768032}, + }, + { + {6855676470217754770, 9517149712286624325, 11080380031068971680, 667425509348698033}, + {6136243307299269825, 5326577850303193160, 16120190278345757447, 1982981965726975383}, + }, + { + {15399454106099176868, 3988744407816581672, 3596277710300384050, 15129113714633923498}, + {1554582462382333698, 3164553872715651710, 12729140363982748426, 16366728035709811784}, + }, + { + {11647936211409428873, 14704462653811533865, 10005129575282387925, 1526194796943187368}, + {10906326807488904308, 18256878690674435807, 13093574545395154003, 12352810226542367406}, + }, + }, + { + { + {17055119974261943875, 6266720893662254540, 13102139953381148874, 5249314164321788611}, + {7157525732140787612, 15381277459195914226, 17265025258266710353, 17573500432599548120}, + }, + { + {940679263188661008, 14653357165718140350, 15439920797347843673, 9415587255510557494}, + {18115037054677722678, 8165849408798239027, 17369387099667572407, 17619066457126678815}, + }, + { + {8649149223282317557, 7756351751136698462, 18239772072009739451, 9817506578949224559}, + {18378033667730800420, 16794121140066562876, 5288247581483071333, 12402303517382928119}, + }, + { + {11047138821675365077, 8918121441180891972, 26692501222219426, 15248413052700323978}, + {7305399157133896461, 7065644238942265367, 3949166834387057064, 14178248206708015607}, + }, + { + {2031270890855333638, 16982096442429440651, 16686304398848635900, 5829842366016448839}, + {14111080098472974183, 12565301877743332219, 1685254887702201709, 10638099573980009130}, + }, + { + {9618597135962048429, 4323708363301758294, 1934098864729515110, 12038442338797726450}, + {8373847126955513333, 3300151407444969023, 15888126952439796914, 1426880256839266097}, + }, + { + {6428576619669681259, 7657770350257045071, 17839413659396163406, 4702043961312931605}, + {8200928556018997183, 13282376860743810804, 13005614455417667639, 17419029631791664639}, + }, + { + {69860179712677448, 15464996655458230480, 15095351218136595554, 3792171085643513009}, + {3187131848664503636, 12713332789590787064, 6278731049699775392, 1597379696359884724}, + }, + { + {15673011075664376010, 15519225812231888543, 1336371877669824820, 4354970830277120843}, + {8744720488959125220, 17541792919601146935, 14299260104084112815, 16082554294713598652}, + }, + { + {13540612390708052286, 10213354985487483900, 11366371415587713866, 10334937577432263044}, + {13368390835254255145, 13453645319717588760, 6303196127329783110, 1204334422768264234}, + }, + { + {18221540219239501535, 8536815826205784644, 17328509446048600304, 13923028809228258331}, + {13984621134784540482, 10254983270679630247, 17457131706329229663, 927850905006752032}, + }, + { + {3952205381894147962, 11371446109407143937, 7231851263356642380, 11612512368538303138}, + {5227214975837085115, 10737565048439707166, 6333629542995218640, 12386725921557807638}, + }, + { + {3772067962000745672, 4436468403847408320, 10612599615182677580, 13738755391074136269}, + {13665557786177426407, 14568219921857752, 2691062926825113708, 14666515738377567975}, + }, + { + {5392936538333570234, 10526292103645946001, 14132494129869423619, 7207059073717065545}, + {283545293669631007, 15845011600683983526, 5081287846871250008, 17931854980704528162}, + }, + { + {8364400939527235175, 7959571573625351093, 15849019287994534535, 6982609389731776566}, + {6287382484291579264, 16496145344132275167, 12062306229709713775, 312030175316686885}, + }, + }, + { + { + {17224650011872599657, 11430188086182976152, 12892063618843720029, 5912993124689510433}, + {7069617917494051681, 1298012103142698333, 7943359430865057535, 9329776843721719539}, + }, + { + {9464085603669036454, 7848014338005901108, 2368914226155404065, 11578416111848517850}, + {6323647866244499941, 14399589996703947996, 2824522520842155768, 391310842153371124}, + }, + { + {9948650801233133770, 5836115460383443197, 11404170696974449207, 4791020823967734476}, + {423024247809958592, 11251668387880260801, 5562546584223492723, 578572156618131794}, + }, + { + {13988854693674964723, 10817154032069031941, 3171651998645961547, 5518712225783687705}, + {14706905091132091970, 13960758460934966876, 12141035142079693145, 3149939820435101269}, + }, + { + {2505301881938098126, 9962323478923652140, 9312199523950444342, 12957822502673689705}, + {8060810607849163143, 737408553843844193, 8143568733429881786, 18003168270780769476}, + }, + { + {4460927228453411137, 16058422703785787527, 8016770980039986075, 11450941100964860520}, + {2742597710491507274, 16940752978671801273, 5897441526901650840, 5926672707007682446}, + }, + { + {5772778048593061508, 15424756817708323928, 11842041259277183807, 17669952685051160523}, + {5405007811515938363, 4415223809135251038, 2223192286456742546, 15742105795795272774}, + }, + { + {11809342655313500273, 16822704101813284237, 13097372075606737923, 5463281428453250615}, + {11967866991673525562, 6828790575157689223, 12568831962097805646, 8385980093725157349}, + }, + { + {8090324765778815982, 15997433100218204643, 7771766025433829989, 914551143312324786}, + {4640358803642182649, 17428148208737756210, 12144967737399770998, 15075125743380741412}, + }, + { + {5954807828598238451, 3186352433639831389, 333598278340882889, 8647732331490039308}, + {3706589107409903019, 7338319463305947507, 3829684452513478938, 8551967121356509963}, + }, + { + {16753777599759754869, 12028154198579512953, 7911616552276519044, 789841268294170739}, + {8228995103825761982, 14293958931719060336, 2778055819582565008, 1399082948378499882}, + }, + { + {12492565198527218900, 17337285577296730202, 15088344513573802417, 4272568906387671217}, + {2365541522321646412, 678395397666822608, 437334842774934301, 13443327606166079837}, + }, + { + {1266313952277763194, 11470850617813390661, 10426389264474337810, 2996447663006153747}, + {15218295359022152122, 14634539952819815592, 1775270187047190460, 2942637199921677956}, + }, + { + {4952377176677649521, 7473631065005310719, 7363684030854414233, 12556891399998587233}, + {2190850394642244911, 5458637782288631421, 270926994697866523, 5528436328062366401}, + }, + { + {9497175173535366966, 25345745857275253, 5047829133239508177, 5340238103822773099}, + {3133339556064328840, 666970525709876149, 15575505473500291502, 12769675806855640654}, + }, + }, + { + { + {7669790431656261769, 2776517632462593286, 11694025667665633506, 9533794089008895277}, + {2895611631120558023, 11551410655448788956, 10026541900772270925, 6243136875017000843}, + }, + { + {9434484992529186384, 16435748047660609525, 16190660694150989986, 7083965852434071085}, + {4216306437741910756, 2698742177539497614, 5199793642504009017, 17298424769819019160}, + }, + { + {4041169394784902550, 5699517344009382913, 5306272267462320559, 15846674482556330025}, + {2606351264228884283, 4162585980422107281, 3715151019132039005, 6607223447043258693}, + }, + { + {8168579295855409503, 16727569921530031841, 6182114460261837773, 8940603165471931374}, + {6081572078077526926, 5890840443923124563, 11215305828294759727, 2875117534361804712}, + }, + { + {9045974983664041829, 905036705033699463, 6962033946652121779, 3027264198782618401}, + {13786415307358010100, 3643342525745067473, 13641958783381681886, 15675065537779359584}, + }, + { + {7507377696839752642, 1061259379811757443, 10276590160392917813, 6889137095037822679}, + {16373913505782725550, 12287733095803524526, 5695917172259210496, 6360958736925918808}, + }, + { + {7459854586357006968, 702429387211615855, 8231296036461604410, 628323703857882004}, + {1059802628602873385, 12517208225099517507, 2368172548334856593, 4792344750094708709}, + }, + { + {18352334786472886037, 7096021570596476676, 17045407505128867173, 2467670847537319400}, + {2225663888244226889, 1876713214939672742, 5329943993157142620, 12168650975912182188}, + }, + { + {6639850268372381409, 2284514769224558945, 15390110317831975716, 13933785559694229008}, + {12787641603764341997, 793886210532292741, 3222136169196008839, 11104892506868626444}, + }, + { + {12660547967989039787, 2109392063597767300, 9889743271997754037, 11803327596624324036}, + {6940409327849314286, 1466399127363116843, 2572333022681966275, 4216097356402537802}, + }, + { + {16858757460581672909, 5838407119753001493, 4453405435911954669, 2828665451507432751}, + {13657966632733241760, 6875986784381874300, 2390233934255482553, 17386653779125555159}, + }, + { + {2976756344404126744, 17032556609402836559, 16348907464011574182, 2196781021202618892}, + {8270822867494340805, 4738372358350764889, 6088256422707334932, 17121369334507507505}, + }, + { + {2081729301541563384, 5577186154173396778, 1865152567701500436, 1422284589642218069}, + {2489023909725140903, 276494395149046869, 17420927169263487236, 8292343688801608074}, + }, + { + {7819174654675104600, 12778055482430336726, 14615848543490171611, 17498415175263742825}, + {4785899184222234034, 5227136636239697699, 1570704808469050246, 2858953380860123257}, + }, + { + {4323577007857413306, 10524228743339400397, 5418808897687027557, 5939367271366264075}, + {3569359126353670574, 12961495213964770607, 8906990808988099905, 261084295374207271}, + }, + }, + { + { + {14408045416865494124, 2442199381796557002, 10475326303775862953, 13637445125954159957}, + {3778313603630758744, 9247460369874272772, 17572237597883145087, 11338350096360776602}, + }, + { + {4336697789732072031, 16054848662858822197, 17934449813415035557, 14518380622432694666}, + {14100582434152190048, 6262866632984449325, 18069160441815400774, 9798342103009260692}, + }, + { + {17244020587062193870, 7625407515295016845, 12692919397126044801, 739129074276464779}, + {977900962655641355, 1516169712468716336, 16875961107875019625, 1582931498538195018}, + }, + { + {687104890149081183, 1938816743979859301, 11342071981175913904, 4270322127259097184}, + {4964776270155503160, 17849333582861534767, 15814479527332819692, 8083943565773123408}, + }, + { + {7977186743666958490, 3126199553548085949, 16879636338977836444, 16647578924708995556}, + {5526017172393528596, 11328754652335568585, 8095074058116436597, 14648690727521713743}, + }, + { + {18335678403814425235, 13764304056086998207, 18139296224460762074, 17620705673387523052}, + {16059975647897396183, 14392541906869470064, 13641721532745636092, 6122032872822720831}, + }, + { + {13983401929934353021, 13860725962778449344, 11760533704789481157, 12566657951327299627}, + {14697122142882732522, 1606632877136342124, 7872716135734366961, 18220536079227927821}, + }, + { + {3986890035154628803, 15316660330065019741, 11560940574529263780, 12576851520091035878}, + {10883944418224886092, 9908329441525486205, 11238684990962507809, 12900626758810151662}, + }, + { + {2629393050548942288, 6363222898077806203, 18404650886731368903, 2691451856029551156}, + {5104932743043229112, 1302939624985069019, 11820239270922660661, 16228045717328023331}, + }, + { + {778457530134061801, 4290661013056586404, 12033745869654330486, 17833837257536520292}, + {950548111600899172, 16026254932420015523, 14620989142158250051, 8236598933984161995}, + }, + { + {8828068000936861634, 10901971915827198521, 15635295283164640480, 352740455954411610}, + {4853015383138960329, 2945696874639059776, 7204307993540375148, 11980890732241054979}, + }, + { + {4077800412543228484, 7173833470188867493, 4604439809988262876, 8090706047559948234}, + {6117166546062912279, 15748537214854486946, 16719594636199001564, 563850925691991999}, + }, + { + {4802884399593912281, 13437020732272033050, 12197788481695720547, 2162699662292229581}, + {4193517889478995518, 8610646873096992408, 9485787089338760040, 12392145097158647056}, + }, + { + {18079795516810465755, 15723042000668265475, 12488322519570427659, 14012836221417650412}, + {6534900133691249330, 8115921632235353076, 4093907116172233459, 16784728000548766561}, + }, + { + {6262200118048820167, 12719453838344002789, 5526427573572313315, 8520226123932607126}, + {3618116539863181413, 14020033065434801713, 15675496263723836857, 11987954535452978647}, + }, + }, + { + { + {10847249691051757241, 13332329214721571156, 12457628412284474075, 17044657510482764070}, + {5218221397478351943, 6922630493693541156, 6207927102810766143, 5644846665334649748}, + }, + { + {6506371904134856034, 9541373683805144018, 3149037850125132851, 7111810601994573897}, + {16732445693192247884, 4994069681898274622, 7223719243730104348, 5649174084086150712}, + }, + { + {16562962997045986629, 1977585352264948582, 15588655103333244279, 253344970359156714}, + {12939363813291366775, 12548224526376199974, 14450582788883748364, 5869541533939881460}, + }, + { + {13970586842647892965, 3680317572634289692, 3416494470839852757, 8341497967750607131}, + {5522860734580749818, 6847292760525096386, 9317394708872196559, 8522252330730808934}, + }, + { + {6838341670149165895, 12326189699069923388, 9258908232339348843, 17297038041466207989}, + {5242182985453021593, 9648294165629935142, 9715128265517308395, 2662662536493743894}, + }, + { + {6790869670806738567, 4499989093713728199, 17496748050437205626, 7194829324969293638}, + {18432532588985091708, 12041300075343806904, 7788543067151959941, 13703334460383638224}, + }, + { + {5996381448168274884, 8108757135223610234, 8067369725584584297, 7184925262427750366}, + {8199341143188441284, 13031376443169557016, 16036606349050125404, 11958720833222295864}, + }, + { + {9293668142017263584, 17134656749295164870, 5879480323258506465, 4788695233340705697}, + {17809277710857366810, 15157733645094688870, 14143869691462709080, 3162286338158090229}, + }, + { + {16056959590901591813, 1082823161154599460, 10221040439441372421, 18283403891485112294}, + {17582486701671091218, 6489397700174053547, 3952499348250646760, 4381145145005361247}, + }, + { + {464321249842430028, 11444362575253049653, 2734975360475017776, 4746579078625212558}, + {11326126526565916100, 7840007639237722362, 7545779893877671555, 8952053274372957788}, + }, + { + {9171324502111757965, 11245577625425383295, 15294815109909975990, 12306264653913762086}, + {5906268309303228662, 2685370982867857233, 5470203265560800284, 1354105134944127233}, + }, + { + {10610818607308010986, 1017341076592473937, 13259969743043862138, 1850907007366751943}, + {7689302552902672401, 15375957693502270090, 13877050204486881614, 16441247744335371320}, + }, + { + {18161720198110725057, 14887135440336057963, 6790952723850964648, 15120775513153544155}, + {11797493458812299470, 9090758778610315656, 605835259544633945, 14755333155432393992}, + }, + { + {14967102006962978091, 4301508725220174920, 11299977101982031802, 14410789725331022027}, + {17005709003661351591, 9843840931527318478, 11917612896070173894, 12007179364072802553}, + }, + { + {15913542135925395264, 2830138374220921671, 6395020779026969444, 1239443258852925290}, + {4519359001030231260, 9606729174209623750, 14291346135557028396, 16179513817501558495}, + }, + }, + { + { + {10223936123327786454, 2321887803300626936, 13607747528117965743, 10456421630388400123}, + {3266519591187534953, 1053691207967834494, 7151443045753788549, 18124688636664828399}, + }, + { + {6946488664257064464, 9775328903143754150, 58700362449753229, 7901817271072273406}, + {5074738678159003249, 18397239731906005785, 15911102965988125888, 9277654580204145348}, + }, + { + {1874700306906525099, 7337351570334852732, 7954195906114335343, 17230226427261850070}, + {5181329498860909261, 107167242193237170, 4364856176182710332, 14611171841443342914}, + }, + { + {10990327814895720476, 16588412771027628390, 2850177278998422188, 11569813740328484871}, + {3922148781422941186, 3581659216490446242, 3646872304052351376, 10887870617200051198}, + }, + { + {8175121141368087217, 15079393830876652065, 16766987879267543828, 10582796406546815217}, + {16832256009371376870, 10042650470778064892, 17867163453935683780, 7123418345572641116}, + }, + { + {1782651072016504775, 11033882508408412333, 11105300284232190625, 3276372405089292929}, + {6399472468041061588, 15319690780388315076, 4928530863063375966, 11596222198340277418}, + }, + { + {5452424185619067445, 12050433097586021281, 15018766900844679217, 273234254926088220}, + {15426383635547379531, 5213762666043737626, 2829185842069118470, 3230799283770935127}, + }, + { + {280030342772428106, 17354882606189694746, 17455445295460080284, 18076709382926018941}, + {9895982528034548913, 13681172423928175330, 1656433131309057012, 11935757350437721114}, + }, + { + {14437472586336929440, 17387041914242263390, 14861577074379746687, 5146556788377906297}, + {13036814755814090195, 15108836859245573802, 1667563994642521213, 14722845469958372258}, + }, + { + {7781061995240980266, 2066078418484154391, 4089376589847114892, 2434843609506038666}, + {18376509832460312721, 7187709121160627756, 2455436656049651823, 14419116837518875372}, + }, + { + {1270185079976403265, 9214436628411717184, 15450450827683432913, 2880014804806096082}, + {15448799931519826757, 10080240282127928735, 10673974088219619287, 12998944469117087518}, + }, + { + {18028691745165748687, 8931519595829275195, 18379893031942930865, 12120980098075498008}, + {9596371470855895261, 4133427878071274570, 13159312399982591699, 1639865074052258019}, + }, + { + {1661696187746428348, 2656198437014978712, 13769477291975851694, 12512848714492869444}, + {5980926616932344693, 15821983893144953005, 5816015630031200526, 15887565799959254415}, + }, + { + {16463929919291729278, 14920112063826664828, 10056471508435050704, 10696267144984026763}, + {12049530292963090991, 11926086636123189182, 9464890378472966538, 9719194510330239601}, + }, + { + {18110249193861022779, 5612784685592189906, 11360454032996393150, 6795401682138043705}, + {1961398978248902107, 8999847457729547905, 8941741619641401180, 6086938661427918241}, + }, + }, + { + { + {1119490156854665483, 16772836556735128526, 8607715508817325509, 9931017263385440911}, + {8799481055779587022, 11740562709785257943, 1956849872282864970, 595288629437737005}, + }, + { + {11601570184515356415, 11247678357869162156, 8415095559389686315, 9625816053586466047}, + {11807876143163335372, 15690209134241397733, 8684637224468015605, 15974968144193406020}, + }, + { + {6498861108824484382, 4670555282769381189, 6606014320886832914, 17078765892830617318}, + {546267528591230105, 17808649363082080722, 3219358059129920687, 9180845247506322192}, + }, + { + {11275984449259340674, 14922638629881602958, 17186426309348732477, 2094500549052461127}, + {1245672419927595636, 7529921141299797945, 3181089597449057707, 7749529014968942143}, + }, + { + {11277133910568934671, 4278895672933635880, 5062049475469993812, 2827897582327968966}, + {2992831031801695571, 13244636528396736375, 11509629662092358067, 9385849226639579800}, + }, + { + {8454236707620433029, 10192313737667573051, 18232259474515025711, 6196538652828521245}, + {6326999652188467228, 7611130140249634596, 5729331023083628955, 9386297316005425714}, + }, + { + {7621274909358193632, 3619625095597194913, 18038386254997645285, 17262892689028255302}, + {17953989125460428814, 4571031913557658215, 12218524221515562809, 12016327352942264220}, + }, + { + {12842581296013847382, 7845624487558348664, 8747439372999364825, 849305823897878133}, + {2217292264321907974, 8173534404179332054, 3588643190593022889, 12047811416592660080}, + }, + { + {8121746263843271081, 10363835147942471345, 312023379108980148, 17191823034761670562}, + {315776409136454719, 8322002171533871918, 659256727451485128, 6073539214057006838}, + }, + { + {5999134638957620752, 14196265207258829507, 5400793612736232063, 16259338359738368573}, + {11179852704740695306, 3486799782309774463, 3060529319750906379, 3540275797284687957}, + }, + { + {5485176043812882513, 10727553589889164848, 5617457077214333092, 15937493816713568462}, + {6287330459840726949, 5451240171054977850, 3524414944972920777, 8740440597273129486}, + }, + { + {6959527445237219799, 17170778245769606301, 807762173031474321, 9151445233487017286}, + {15103411489939446333, 7976669669591851659, 14824323986579638641, 1535817133122800221}, + }, + { + {13993486080187419934, 14882121651768660644, 7947881871819932407, 1364312030151957949}, + {10673187305202558690, 15038997055055408315, 9268330880459316485, 4319340556575124142}, + }, + { + {12846922591360496097, 15518450931549829779, 3843880753372237176, 11741559986398913430}, + {16974382348775305594, 7085384294841794242, 10278478682851578175, 16997904984485898637}, + }, + { + {13670930062027115328, 9912297966339314023, 17061419147322177635, 6220676237879734303}, + {12723388668517709225, 14967294924815531226, 7286002704046609276, 2105494380036834916}, + }, + }, + { + { + {17955247196574331290, 285928599571507431, 11902987704297070981, 2841167725097799100}, + {9281167410796848363, 16444340476026142274, 3423202423051178709, 9101021305726472246}, + }, + { + {8869273893561412239, 10349812081309865197, 8913824872487209090, 3148808685596180274}, + {530908416884501807, 10284103744075805979, 13606889938905754722, 2418062398586758364}, + }, + { + {2298603653884322501, 601221199968240092, 1285112712738261659, 13882709760355308533}, + {13563254433762438170, 13447718334658435053, 13493687958886238103, 11032778298151679283}, + }, + { + {8626760324117733843, 16403951745962159364, 5837394731212322914, 6847167719031297053}, + {2888142337636247281, 3409818743436360750, 1677113113408664401, 1222157560539217476}, + }, + { + {2294668553308381923, 17165287249067859297, 9897724011823072967, 17409851874231284314}, + {13888575318617508639, 12092766090379658603, 8412268183255186961, 8046572777745318483}, + }, + { + {13178439025428734594, 16388038968589028071, 16165750006742628176, 17903639397633243161}, + {9560319088110737392, 7888974492854359310, 16116323630343158496, 10177829649622711030}, + }, + { + {2378363646789710539, 494954399989334038, 6915496914984330558, 757197055392642378}, + {9097171378505823650, 12104288338329241488, 1905673690814481722, 13011078677095066032}, + }, + { + {12712274459771886808, 15748114764509451764, 1994630377849062253, 564390855806287868}, + {135493276425567450, 4305883520257541088, 4842008929542073044, 7035106970720249617}, + }, + { + {4772079965696324995, 15925041062593990538, 2818172089014580505, 11304215074611546986}, + {10130691823118346040, 11796228810049908587, 9262801389703476249, 6629344122525229781}, + }, + { + {11045983914861167112, 14106148195606833916, 4442596873181225087, 15627975325288846806}, + {8173496855557146242, 6061080385918934423, 5233260187121969538, 17554093556474728494}, + }, + { + {12122792368758575262, 810814789452398299, 6387727669765211854, 3304731719391402237}, + {15296845834923103160, 3685348582131767195, 12636335057478947340, 16971253767099552987}, + }, + { + {12345454807632743424, 11546569651702761483, 8873100774001529421, 7001975923028025552}, + {8129283832066039281, 18147888225504425296, 3510907297028745651, 897602195837260824}, + }, + { + {17896345382362222994, 2167374959533815311, 5029128091600127895, 1770543276160593316}, + {17234124146043512942, 5338191548265818047, 15676046602975694398, 1943153641089805200}, + }, + { + {11084819495273800718, 12966507689731825252, 15026437832429189138, 2506312683689776139}, + {7417463323869895004, 9819555221238697390, 1250200244896601539, 1394555910521460172}, + }, + { + {2221512141494043286, 9203854585477888176, 12171379127551511504, 10667358469120985695}, + {3795093165005123272, 6129005969593025264, 8738204659003189419, 5273583671698415302}, + }, + }, + { + { + {16549155412115374305, 75977962737081600, 8870825488941031605, 7403557657089993256}, + {5825394234709429518, 11978746413791918409, 1876293130790608838, 9416631623519692610}, + }, + { + {12346821858361333862, 6352722970730511156, 9920942104315084988, 10492373916708072181}, + {11163323626947992791, 17035282992056675772, 835685192553490421, 12792459312570503983}, + }, + { + {10447922451077327640, 1515090998837129975, 13498807582085718212, 1212623301098019779}, + {11573518650162536086, 4823461685803772444, 7289704908733783271, 13167881392748327839}, + }, + { + {16959954449957105311, 11051594981465026138, 16062472412226411858, 1976004115345602080}, + {3630495248560019222, 12698191555196404138, 10107923614229901155, 1597725222698864118}, + }, + { + {3416019089997140849, 3011417601086561495, 6275242351124667286, 14197557183081060761}, + {5633711018871057458, 9723496411345030748, 13910057756335530832, 7285051335492395815}, + }, + { + {16774605620279328247, 10223834398868957807, 15781733027568799739, 2607095622729296315}, + {16499590296954181006, 7576646116121533069, 16638313875339315529, 14296194207652471696}, + }, + { + {12874411821611501068, 1998417862388106640, 13882642435422318946, 5791129521978463837}, + {7512934139125398199, 6966283273373526248, 5475728301311080129, 13542211842758381589}, + }, + { + {7798993150530415596, 3288770257171840452, 13373286069558329631, 9784279046496345014}, + {15725032660238528813, 16038931923358478835, 6921788930154218900, 6093507035435214187}, + }, + { + {12194839527972802101, 8376199250979271449, 9055995864116790217, 8125030124567662718}, + {1070812422878398727, 3950906148308170707, 10121516919638719072, 813471384549762068}, + }, + { + {7610605259962047827, 14617655900985224117, 16089669078196617440, 10594009761533811214}, + {3425971360520359121, 1245021768718221594, 16690372892586114152, 9933179766195044175}, + }, + { + {15142732720676276463, 17435583143726694663, 6030257647680338377, 243683009289621849}, + {3064238900429394982, 7655019927497549159, 4484400084400458429, 11650860345018651068}, + }, + { + {16203650576183697977, 17614744533772112337, 1119292890050870301, 4574885263986729787}, + {8108207498737924504, 9708434439316056191, 10676823369888368482, 1078311554675991883}, + }, + { + {6876202174636220158, 18057502510666060150, 7821730895845187783, 8882321799602877790}, + {16220624224336230256, 15562800387021280583, 3043825293109091520, 697130162105054983}, + }, + { + {5394549491776704087, 14795348078061113966, 14206080764200897220, 4623073019242398493}, + {5850602047109930316, 13783531993760979209, 14764346975698048641, 8951680172224205890}, + }, + { + {7302725075484262769, 12572584665857403749, 6499691362933905099, 14476353114356185371}, + {7381716148644532401, 1573798302334388880, 8128390307766282880, 14547454176248589604}, + }, + }, + { + { + {4477325369345373420, 299141931133875776, 6787652129916359301, 2498016036564260464}, + {13342319943892943548, 11124287719737492205, 2456333599771808442, 5084719026388755304}, + }, + { + {12246932755942887931, 10842213418139067847, 1827392608284960926, 6961756951208563550}, + {14626966634382828071, 12653808277900379805, 3359368990539585596, 1190255644328095727}, + }, + { + {14845756090430871381, 1260135108359348096, 18373249503604334230, 14931345532671487262}, + {8304897926217252744, 16639705302116302354, 14578633917159176703, 5624357498623418462}, + }, + { + {10836955050615624183, 6228108794259714192, 3769609579318360527, 1481673673659326756}, + {301329772189110029, 3574710782304999603, 3037244905687722509, 14442941761397229485}, + }, + { + {3863379967423475252, 4598414140150397553, 13498347034161095546, 5995458763090398343}, + {8994138995797612256, 1053878477247308872, 16525881906724873538, 16597989933510424042}, + }, + { + {18195618552940791509, 12801347400921689158, 13372055618013067129, 14929951832730936581}, + {2563109394536979589, 3392102243539970867, 2978145866937578695, 15809561751101461921}, + }, + { + {6470844231261685519, 4860920111547376221, 6133864928365904793, 8914566156785557227}, + {8258394874597607714, 4464810914649217913, 120457844518757378, 18209291810039348360}, + }, + { + {7739110373965523311, 11019153332996240080, 7346010155518751797, 14853737521111213548}, + {2542883237207113209, 11015136828834421504, 1998601666328316353, 1540417751495800469}, + }, + { + {3376092179741497360, 12221254335784366861, 5282973200516004163, 11372960528472533628}, + {8188139842572259074, 3946305224334575645, 16643338862665650950, 5859492058050333909}, + }, + { + {14916042081488114271, 3303190861468284762, 14234546272335492538, 5776190344932209905}, + {16339988209459724195, 10022514953301624769, 7878363685856556300, 3127365206552843780}, + }, + { + {8340102858481562978, 5401806343794775245, 12619159636229742566, 16221085737347795155}, + {1241298364136442056, 9142635103215118982, 14403222699038355211, 12145678822325215894}, + }, + { + {599034134015360884, 11263317530774995092, 6667501365379084069, 9844276013103312691}, + {7566306886180438990, 13702768345615509363, 12525031963170717968, 8463786212988210464}, + }, + { + {7279390679700007004, 10579602100702377479, 4366146547587324748, 6962092370680728424}, + {16372420580520124739, 4597019194685908384, 13217149760366044828, 7222487257194391332}, + }, + { + {8454830421421057736, 4100731209937375984, 18348214289895908213, 6778376865226169852}, + {12945227893790929647, 1818657910008686277, 3629900123705314093, 2861658388952811590}, + }, + { + {15882969890737930334, 5849157078791136995, 10068103243390577755, 13131421240079433547}, + {10404642120419399290, 8199866428750316037, 1032443962738597455, 15582122438927179496}, + }, + }, + { + { + {6390361653475754940, 1093882175267357438, 3784079074949811167, 17343872969822169769}, + {3359715652121662979, 16808529787251986583, 5169730697018536870, 52766949850965558}, + }, + { + {13147212495082910072, 5628914243538540648, 439989514095330941, 7620472329041817834}, + {4272251824771633288, 16564977601507013119, 5441117136715882317, 5622571730905974389}, + }, + { + {4207421531032215145, 7924589143024019458, 5496622772676523695, 7061817399179278712}, + {7371689806847905735, 8282663810521090335, 11422487361383982601, 6397294642072086677}, + }, + { + {960381383357168877, 16774709963697143275, 17896181076874992240, 1150415168189819777}, + {5498481130530161530, 6895900060791069290, 2079514944189747822, 3428689507902936354}, + }, + { + {12056920178557394302, 5131253251712581899, 16251877995882633963, 10883064494054484051}, + {9473274815269607947, 8874308005470196739, 4412709653190846630, 16469366225886156991}, + }, + { + {3547198835521135552, 9940690805769919242, 15170549880149605690, 10701681269101530298}, + {5914809102954412895, 15790219349994701461, 13664049285300230863, 5735249081148743651}, + }, + { + {14753645881295168970, 9410794713982813264, 13485977523338061503, 14267793994973767571}, + {15813187206361118954, 16449603969001878152, 17705410933007144731, 10960511750491378082}, + }, + { + {4669722990542640772, 10017368027073540045, 13392819319228640800, 1070815632453829996}, + {7274130058405640448, 4460835865761538026, 15283885107956150892, 5815884817303156137}, + }, + { + {3469614802230980914, 18060080625283048965, 580464295809221798, 3338153928139206412}, + {9845192339392693455, 13250323899168115720, 11058696855422647818, 9665232062806155902}, + }, + { + {14461336556325939926, 16946363864290460645, 17546878353664479567, 17949437676666656135}, + {7932367178689988878, 4806368097560008659, 3460529608269790679, 6065321700046177254}, + }, + { + {16883816924971606835, 5486714189826473375, 15204267662844332028, 17199232837602035696}, + {15958749676770074119, 5540664038667498053, 15914281753951743318, 12225053486711127081}, + }, + { + {15346266095840263783, 14129675453960658911, 1781465630073142581, 12398710533895277470}, + {17697074063253841985, 13826156613321578228, 8855030685964401164, 3749659313217692983}, + }, + { + {14888039192306165275, 11233459160096048886, 709252573146299872, 17614748022803380926}, + {10853790173866038588, 2988411430602910678, 1343284586410250367, 4491892393582674365}, + }, + { + {5653853395031137185, 11847098886335071270, 15046954358935848863, 490763079643421287}, + {3113500211585712650, 15997550469331041114, 5281575885072775975, 2887311255648554506}, + }, + { + {5376335754670737023, 13164671289498247151, 6846569847526260467, 5496656304894178122}, + {2009132493403453913, 17250524577747091030, 2315376314333653245, 142024984008484689}, + }, + }, + { + { + {7237168574323016859, 17908810107504968137, 16225708127838178121, 11127095986977103648}, + {9346291308317410251, 7381283458277047010, 15168602815371846943, 9193719743691734294}, + }, + { + {9607254959726458411, 16837156817186931862, 16178143308706847393, 10970721795101931539}, + {10840376278605273092, 8298765077094727469, 15520543037910966843, 11484620381947762562}, + }, + { + {17395070963094117711, 7608132718922490881, 6531178971071758016, 1302814667007331361}, + {4002629363862769670, 14649492495298089937, 6868174210142585697, 15456170652716048683}, + }, + { + {3688308493559609536, 5123828159813683938, 6245436817220183971, 13062234263274605325}, + {1313395302496832996, 4961840797708687855, 4990192311341859196, 5283131006216350959}, + }, + { + {16952735659396950704, 1249482796824289329, 17859504101404809981, 13260403650830168625}, + {1583343855370236084, 11389120333403185826, 13676599385745755008, 5066667130137739346}, + }, + { + {4799264864906918301, 18347145714884655971, 17034125441088681346, 11828378178487279470}, + {1759038296522081901, 9582407833575609381, 4195817009050503354, 12618256395967210055}, + }, + { + {6486755100213398364, 5270923715575268322, 9268255346880651103, 3147724493117082267}, + {16710318779269985633, 1240462642985509644, 2400811796254219369, 13670743068809614358}, + }, + { + {11437779990773246594, 13609113239383378152, 31268927496646090, 11618772705165035208}, + {3078024460365036167, 12138983306908962712, 4779157919015181380, 11901698850260672002}, + }, + { + {14642787507945832432, 16258081639927585935, 2560321462542164242, 16286882196975458174}, + {4328159372518768969, 14313553865397841147, 13769372656320240568, 8950675126435331579}, + }, + { + {1309709344837422378, 18403288028608342631, 17102350491414677993, 1133523394849437315}, + {12526496222782003755, 5447309058259018864, 17311120581405946631, 3760058661125144368}, + }, + { + {17891474172606596407, 320094264574086461, 93927075222964142, 14355817838636249140}, + {1777882427773785068, 8237021421587560510, 11520559469641852991, 10567910693910023157}, + }, + { + {9164300764173563614, 12322279811717869943, 2768902015676238485, 7761799112151133995}, + {5740162933856370894, 8043946608495226840, 8923704438836381869, 15189322655373943849}, + }, + { + {12046275966378825708, 5909386969214935556, 1201990704907881028, 12128549009950617306}, + {10773478878317625320, 4554854625564648958, 14029736945871573056, 1353247251064221090}, + }, + { + {11909123603272307101, 5517949035179831783, 3295386484950432959, 5605137795524476293}, + {10718654547602473221, 4984952409581272095, 883267724006996723, 17328431094026829348}, + }, + { + {13671210467347025770, 9980617617519781731, 8339868735163579231, 2150724314757661915}, + {8571153021065445899, 9146903697769397191, 9122246102814640373, 7744779513085605450}, + }, + }, + { + { + {9508384588323002196, 4786531415304518048, 2690306308552249535, 12208815515689370850}, + {5145548243685871201, 1536915039528215765, 709289946127949333, 7152734178531880864}, + }, + { + {9627905753364576437, 12776456422166281355, 2851899644189834214, 16998174196920379994}, + {9001602524188761177, 8960294999163663712, 6580949973363012183, 7568306074815116797}, + }, + { + {7686633626025788546, 8110394872630496906, 8482210436161892079, 16882855163559885891}, + {1154081680627148904, 12804224766760790394, 1850455828762691082, 14191115350906359627}, + }, + { + {13345381996769253014, 6278048669175242345, 15990349685835870151, 16358261962292186792}, + {8505261070637963021, 9396725065098564446, 15331953351049782155, 16194796339208321205}, + }, + { + {15505898598362934929, 16825210854979603981, 4697782190623959274, 9370503401456774242}, + {12874840227707962403, 6119547445810629810, 9764164009057494220, 5416853666956021065}, + }, + { + {7699498684510298360, 16542285627069734869, 200751785530104649, 6985944962584804095}, + {7365545959109847649, 14865387755379324112, 4167319688751668987, 12162483513847343974}, + }, + { + {1039980316046001816, 7207503221801597145, 10591680158322288825, 11266400320575557454}, + {10706275395641440317, 9288394947884616208, 10167533985006762418, 1456585988309878747}, + }, + { + {7076257175157660597, 13221730879315432464, 4499548735964119085, 7559253754663705944}, + {10196808438730350168, 2391718471837563931, 914409564589897387, 6649744842278078706}, + }, + { + {10039057354622246685, 7195562849416781100, 17696866082062058984, 3668253949076972503}, + {3291647709604288622, 14581068695089559804, 10104544037456163379, 5446494334499941155}, + }, + { + {11083442423555675697, 16463352501129765262, 8326106600927169880, 14461723217830443766}, + {8960039240507947123, 6112452535158412156, 16298251376476091126, 5185774007776019173}, + }, + { + {5801222283949474418, 13946418525037992779, 2275515160040674505, 3244981365190546382}, + {9460698310301428534, 14807942233170768102, 6180104492182570514, 4695926909096500015}, + }, + { + {5502356275170104522, 12750322860129485966, 9581277511584938955, 3872282844937972630}, + {13668854758739140874, 15020438121087800965, 4581631138384430657, 13296613956093963588}, + }, + { + {7394309355461523862, 5374161350639568117, 2763783634295242959, 10215168014269656712}, + {10862202275249464165, 16813773246956503013, 4644566761082532589, 15300517379307655907}, + }, + { + {10894319502247195436, 16018449015752583379, 7936971022695592164, 8273950599391165937}, + {1130484969598457981, 10652972605389048300, 5964985167476071140, 1178111465674979168}, + }, + { + {3215460690308212256, 13044009109542950831, 1248575312568743704, 5805472854961471970}, + {16935262056111009166, 14323719510498371522, 4137201278518680629, 9262447671880633672}, + }, + }, + { + { + {10228366644420455452, 12084265406352277347, 10265869676493821892, 3560143954870272139}, + {14368775225608592689, 13173522067191372913, 3592475039513249949, 11243554718624931135}, + }, + { + {6543255501112359319, 6063422531520498671, 17228726254778244409, 7570754775709645369}, + {18222396492501523182, 14903937974816691813, 1216646642383641441, 7602781158453005929}, + }, + { + {14568782576170814716, 17582848432122737506, 1079387064102681806, 17278567874821675408}, + {3094302191119669899, 3730448048895347901, 3508894590334961422, 14091660942919228106}, + }, + { + {13329033749048978810, 4765695903433858377, 4452680451529163940, 5638854187414651620}, + {7897503022043776206, 17187635538005569019, 17766753195497526986, 13201529234556380285}, + }, + { + {8934119620399766972, 4226481091885914732, 16000709195004445297, 14687868180928846933}, + {16269913392757896907, 18294005838441325342, 17625669613551023126, 10864307042201644469}, + }, + { + {14722530431277419104, 12333728409662476827, 4162946257347548625, 7052045338975163666}, + {16435875989376103923, 527141841571514699, 8480360258792897962, 4322786951393806781}, + }, + { + {14380803034817149259, 11042134597430846555, 9992762805140200547, 9895143575678511242}, + {3228768306004664915, 16153114680219541243, 12036181641761325912, 491369524302296324}, + }, + { + {12320933424684960076, 8906954611339502145, 16931708732547376267, 6446897311644431583}, + {13749563256713530203, 11522599770043814384, 14455556215959342791, 9022955938835504923}, + }, + { + {8738648866901281761, 4688741093801776285, 17069682640810525423, 7158141773766072053}, + {11460933790638879246, 687134766504463570, 7796313120876518884, 11150451731319135164}, + }, + { + {13652684811535265600, 8494726433844453583, 15999979552047212740, 16433235792902853942}, + {13641303900302396790, 418630713805776951, 13090797093697365883, 6529658430803752768}, + }, + { + {3944614182924380177, 9542495129087581473, 6699683662731923419, 5017219913619823514}, + {17045736494588140273, 3578045824537114332, 15234910011456151711, 4392310298224006475}, + }, + { + {13050963220563520130, 16311879939705207639, 12461297624582251388, 9677731599265769222}, + {5160679975931966230, 3218707041599533629, 17098083534384492023, 2330141721984719029}, + }, + { + {8245975647138927146, 11496799090887525271, 1709462103065191917, 18401529677683893204}, + {13971543411749700717, 15107687167816783802, 7171906080161032790, 2549191081579169610}, + }, + { + {17251496610557148115, 13056982918233222110, 16321077587645226911, 15873643227887663856}, + {7790198561388957118, 9539520576306975575, 15234893276112958324, 12999697377068360422}, + }, + { + {16169560456946825943, 18091964243071526492, 4341876361632902705, 7532668331381251135}, + {15346381760818990405, 18301333564088079147, 6565096728885044125, 2494845330727350075}, + }, + }, + { + { + {16319476863352440541, 10283930715856640343, 17675054544532098447, 11261132162985242084}, + {13712716897981761400, 2681907143459288706, 6930256922080133347, 1445069157579547822}, + }, + { + {16928574868467385886, 166417019993787654, 5882811520342817815, 14106304179344008065}, + {3747123724781081800, 197109533566874475, 14303280595714789450, 15457633026018307066}, + }, + { + {10773597511592584859, 12552868588431074640, 13500771767160426835, 8002499270056378440}, + {13792839099998553174, 12949371255843262119, 1713974340992291550, 16150173130483658061}, + }, + { + {14745984256428057001, 9333707338036985191, 15365925315303462, 11789129028059619744}, + {7873100217437235208, 5289763977161829145, 17731215200358323788, 8876377479309635703}, + }, + { + {265950821974454804, 5047467530470542278, 17523044368516619801, 10054436503372765176}, + {10321185867287373431, 1212061937729015591, 15311258419138633926, 11236518538207084768}, + }, + { + {10904693956407098222, 9013418755007070130, 15510005599846320670, 995378633446250700}, + {12234095025518917836, 6689106237771514188, 2809193993744369126, 548124799387888260}, + }, + { + {267350765778774337, 2853877351938464055, 3677119082593358544, 7685335121077514739}, + {6491980094762370981, 1384870316654548002, 10568872345228996498, 241629538659623878}, + }, + { + {5839400175629113441, 5238299193248381245, 16787876416022887315, 6051613843621920008}, + {9219569873668974552, 5916753090530931032, 13390630214643423749, 3265335490455191268}, + }, + { + {1507475744849985303, 2597075068965622770, 14968669113917266926, 597606442423659891}, + {44293923912414886, 3832651144752540816, 17438860065613195810, 782112340603343331}, + }, + { + {9050896199196733903, 6427608033444590004, 13787696679536621857, 9682087046920409188}, + {4519093754155995429, 13564098392055667371, 10512507082236058799, 5289934424008191746}, + }, + { + {3477191607403300916, 18283244229745029067, 8462159792484018099, 3056576498976014760}, + {7259283167233712785, 12530251965039903998, 10232104933720625111, 14190745998092156987}, + }, + { + {15759362035410895911, 16075598437961371531, 4651513528876405575, 7694151626503869614}, + {14468862724637972284, 1838601521755586245, 4168957446435305706, 8694905613027663664}, + }, + { + {14825552838983151434, 8639609968952840931, 15547914584352392016, 2313507499500708287}, + {6902543375698033684, 9987468886016348918, 9068175779860656258, 6899641689193116297}, + }, + { + {7449110402827616954, 5689206471789540768, 12722069021950813669, 16017131401246233663}, + {2240977975275954837, 4794705713606614946, 5734937900461809607, 118285984764445639}, + }, + { + {13917685647531721740, 2432096911145792817, 17733637484624159521, 3848601825403209903}, + {8192433211051054683, 17388066421914150767, 14336306308847565282, 7501625553608785022}, + }, + }, + { + { + {9194523390605857831, 2335161171394626054, 12290490336543843159, 12464172604156286188}, + {15842196578033029974, 9081285134201585379, 6123406461662038242, 5504260508195082396}, + }, + { + {9599159247384506427, 13011559959971256245, 6331802547989957841, 2642320882309956905}, + {9140255367820630480, 6883541786494880896, 9560822438260750771, 9273862677291701694}, + }, + { + {12578940088863451089, 4698579870843180556, 13634180401794570924, 15763130743395284022}, + {7444441842547931942, 4944622454458561492, 9589156490791486440, 14762328488235724618}, + }, + { + {6185067974942684922, 6452325785873503452, 15247257292915812252, 3689324664200339196}, + {3264129576054154137, 14977721630214750038, 10720913377937894256, 15914487080763816378}, + }, + { + {8926126498606164569, 12956394005759769716, 16902149488499586013, 7841840983349613625}, + {10587053251468526108, 696362153501209498, 9784750880259098186, 1207696323194229080}, + }, + { + {6366297849225708271, 1653728037493780302, 924103820671018926, 2050213326049184692}, + {5527413390519421127, 129805527414320490, 11550889572378802302, 15667992622431666977}, + }, + { + {3759028419971240833, 201899490644698259, 16787882148977818573, 3755266958958128460}, + {16997526157701685291, 6920710029293447897, 14077301651040071328, 10880144992445166875}, + }, + { + {5498621600689515064, 11498885804037952971, 12697073118321478539, 13999008478737234463}, + {4324885099420360642, 14021182496192299466, 10763088992583373843, 12898585157666243299}, + }, + { + {9367059860785010847, 15787147891143727655, 2519720658767337732, 11593809545681651942}, + {11966083811953753216, 12761111316475086277, 5681625861426437827, 15920587591610358813}, + }, + { + {390729441391219522, 16780558466241830343, 1374488446906327562, 10865131913700232628}, + {10115076211715532468, 18184016780675566832, 8365356477197603014, 672096097598251136}, + }, + { + {2393424067712509928, 16879911507754196299, 6441307574161100589, 2818743579517374412}, + {7083174841445248189, 3410683030590349702, 14697584027599531676, 8328975445543175696}, + }, + { + {11622402383521841588, 18271726976204770291, 4805501248621435402, 13483122453682180759}, + {9288143526654965614, 4688427612851085031, 3280806057528512375, 2249349779106893174}, + }, + { + {6807440366000180651, 16399452121226315247, 5098169947999459087, 3558234272787006753}, + {1792969085845015294, 5524357634740353242, 9429244535996516945, 3937357214017147760}, + }, + { + {15504868609044485967, 6752328153557303622, 3778610801922734369, 13830970685441980645}, + {8715733351182855585, 13970559751738714496, 11410776131378170826, 5487441016062951646}, + }, + { + {13162254303511925286, 1500183854026947752, 6344593292969383689, 13968537166293685529}, + {3100593991852309751, 464141462036312207, 5107705843278430088, 1965835506583809167}, + }, + }, + { + { + {12081034000518110752, 2773740877021737013, 6429475399936543899, 6804412599792308979}, + {16082860502313571182, 10013838454082912732, 7176778953927883654, 8065751639278576331}, + }, + { + {17741525051518363144, 1374267330336191942, 4677891169679898540, 9639823611685431337}, + {5482431056894095950, 6629146695374718376, 3884574854221819712, 13266790928096813258}, + }, + { + {17505459029376928465, 14087658194607915364, 12240552390931686885, 1809009366037859941}, + {9468395484396723291, 9446052656478984520, 3720796795453397330, 18035355127900871187}, + }, + { + {18221138344920380175, 16761112742545021198, 14421639991115588619, 9419167563943683547}, + {6237248361283446238, 889754338720059891, 2289880386545166424, 4280148734121099084}, + }, + { + {5259165122317589354, 6306061166879114159, 2622163270351284906, 15212813592118086979}, + {11497359168652342849, 7085380391293263482, 11799059272489792659, 4912160901181298022}, + }, + { + {10512473611770099290, 11735037909076331019, 2922606398008539984, 2599799834378751770}, + {10226702495047936424, 6109026252412854338, 15572556822827169237, 11993701786788749663}, + }, + { + {5106897453764491321, 10540479232768400094, 3938246597140945859, 13156157265138481529}, + {4932443191001849637, 11374218582626530502, 2907557293167002437, 6807344711257391317}, + }, + { + {3993197157612782947, 14810882170056329119, 3476738916713041107, 1512933700383846542}, + {17820889751141311776, 9132720567660500233, 17598924894608972696, 9704537908665702455}, + }, + { + {12121941964759747109, 161674837074510172, 2599887134944602725, 10582301831176576187}, + {17746858667522793487, 10735346620578591475, 90382511151212475, 8756617880518165297}, + }, + { + {13269854730742674802, 16128423099443070808, 3557230428644480193, 9637953317416090984}, + {6295039911768726240, 7019479692290635445, 11667616931857432446, 7159479331923350611}, + }, + { + {14416651741118525418, 10180867452897498870, 5073925566889872021, 17399294023945814271}, + {2042657564518230341, 3364886656428812718, 6324877312192616572, 12778324589036538810}, + }, + { + {10574237360751578123, 5116798422805306054, 14491722292795290218, 10799156134310323684}, + {12689926633011134844, 2658342468671191169, 15293758403109373386, 16248058473163364262}, + }, + { + {17412396133163580666, 6474892296180387693, 3334160446575187305, 12749216946172573968}, + {18160154520597666127, 8818156595950176943, 16077267238396508593, 12651459389529897136}, + }, + { + {7837268594975894598, 3733413917041538879, 9408433334074005916, 9807113299110084489}, + {673053561909802023, 10235823672366472244, 9197803481286702511, 5670973022205283920}, + }, + { + {4435804333677545569, 12530066828083700918, 14652119799285589695, 7610189145859517535}, + {16049951379406478991, 1895939661259683634, 10886955028200106760, 10575752015672416378}, + }, + }, + { + { + {7454214833719424418, 2128900810399984335, 8254953962723841408, 5341529923812819418}, + {11486532916552139238, 4528331821405917357, 5048485034448492541, 4189495710753944825}, + }, + { + {9223539587116638677, 879142711399260546, 2878829560233905572, 13081522393987952773}, + {3067261963348061547, 16008150780594711643, 5466468631453287640, 16659147898971349582}, + }, + { + {8047766502132608624, 8715815570878148809, 9093649079884580138, 3437267783531715968}, + {17562225708466062266, 3512667182749067601, 9223059995161026858, 1366690634827047376}, + }, + { + {17929132376737482163, 5565926714491294456, 5252303555134107501, 8169975563698132305}, + {1829326230943509100, 13780918661853274468, 17736665596871232627, 4246797342334307384}, + }, + { + {5113556452592134569, 7304867793218750141, 6016631926489320290, 16471860203547627727}, + {3444471410714850041, 16571738096215232488, 2003912224952639024, 4203884000388032492}, + }, + { + {16858425223672505353, 3192567884201479579, 1688923188642613263, 4159042130811153987}, + {14900413503869744297, 7521485042788722327, 14038093805562042641, 14713051866364662650}, + }, + { + {3738774192924465076, 14037618828827556145, 12882915396530927286, 10882862194263941815}, + {13115222579444494605, 18244214260845794346, 17217867059738274194, 2458870331386500577}, + }, + { + {8768788172344064509, 2761897497254272960, 1400167175024837359, 2591319596670212133}, + {1499652044223484974, 6820326453941021707, 9701009499879906773, 6897435972338565418}, + }, + { + {8314355711464256163, 8435944020779763783, 1814803522962187872, 1875253356755380905}, + {8214588085484192137, 18062045700553127821, 6649947905482043494, 3119726140944397531}, + }, + { + {11881571666857493523, 6300786026612414187, 4928573492087752294, 18343550313462089203}, + {6770642120472453960, 11296815027803718740, 17312916793783562794, 13028515123652649961}, + }, + { + {583508939637547757, 3195115082527873085, 8497784022800549923, 15135719419829981016}, + {1180291993378114150, 5447281494912347899, 4710517655176242215, 606503081693490000}, + }, + { + {17732293765863716052, 853971165248416821, 2022886284923413326, 7522564752651732633}, + {1417954193520965954, 5046659528429172066, 11426939225844711305, 17687206690616539318}, + }, + { + {6518552374736169438, 7940416740434530770, 15228615103587329007, 10662504584317997513}, + {18370800756791469891, 5564085264882124489, 51043856061444814, 11996026931884728651}, + }, + { + {7009195269496826002, 18330778751427846129, 7903886241001925539, 8198930484643879628}, + {5453546027419466587, 10378692433982210944, 2242412603379120569, 14762161396393277464}, + }, + { + {6146718865488327808, 8559779132928137805, 14001994895150170346, 9915701789711858841}, + {17119408219089522083, 4345363585985782988, 7559492126634131602, 17074565022279033371}, + }, + }, + { + { + {9262509587234749312, 6377906816499461739, 15415592259881792841, 6113140067088447267}, + {17505803833889144731, 3922849788840338823, 6180172597177093790, 7272741317181956640}, + }, + { + {15620168851912893400, 13762314693487747007, 13577625382054330775, 4116976667540664996}, + {712200332640207605, 9098568002202933512, 8905476951567380032, 7075673514150314660}, + }, + { + {7724870937269356050, 12054277107553403808, 1881284905431205309, 14429595888039183277}, + {4176419490283315185, 803567059653412279, 12138878637145159139, 9651152331113389250}, + }, + { + {15811459837282651008, 4038049993244767161, 9054218236388056577, 10807376403937048775}, + {11113869110590438959, 10336442539492421506, 9228056645601479672, 2983388754829658480}, + }, + { + {5272549712777700740, 3890998652469537324, 2338530655383446899, 13889100994494825258}, + {2605827345546331653, 1946537408424111099, 5960128674616374312, 2996461229050766944}, + }, + { + {9235630643187100528, 7874836741106774683, 1509645736063284557, 1291934408179243533}, + {2170879231846765016, 18243888082459973651, 266993053446290594, 4551583084211481457}, + }, + { + {7680050744092380106, 10728235076013009138, 5020205498410121740, 8174117988374987111}, + {15823303896577313648, 6268651341788131847, 16646239256422284672, 7277830349937654337}, + }, + { + {7189376137127712298, 9147574701720272724, 3983921661449444789, 12479790317447783959}, + {13221020976679959405, 13001868979553711359, 17918176319017234744, 18030393246529651080}, + }, + { + {1277346094474678251, 9498303380775859142, 5384923668452161486, 1780647986160100011}, + {8642790494747200341, 9734232043260261391, 5142834828615817260, 13851307413031336094}, + }, + { + {13856162196947802633, 8991033151317963811, 9758143338284799726, 16669930361261935141}, + {2769693485089420097, 14961618614592883242, 6027973048684521312, 339045855685213514}, + }, + { + {4705473345956039571, 17384553086897199761, 4490030246274451948, 1509996255726148943}, + {13542663230247432557, 15148026535112827520, 10014941605271261089, 5488071105468657298}, + }, + { + {13903368497828271814, 8050546449078305498, 6932373216915935575, 16010012759059004304}, + {15451708272653450375, 211711129247219149, 10435723642185827585, 17790507800712341232}, + }, + { + {11196283625212661460, 11223173364796389182, 15927254202510526683, 15939111530538795368}, + {3486548927974609940, 8233744837082586587, 7138041412908951164, 12863368836600604627}, + }, + { + {587498550288996803, 9937849083717302378, 17460580580397185843, 16850270092759302710}, + {8661654791709545973, 2350686583325065432, 14816283856648791595, 13021196930055398267}, + }, + { + {9641099975481205848, 5936405208377074167, 16926315209235053832, 9612898534540818137}, + {17782980290875306043, 4118599702370009503, 5379494204096737612, 10529123509904334042}, + }, + }, + } + + @(private,rodata) + Gen_Multiply_Table_p256r1_lo := [32][15]Affine_Point_p256r1 { + { + { + {17511864284462479051, 4391315454785363822, 16633389246499252566, 4290325975494843430}, + {15912670649662225191, 14172733821603328367, 12709802627494541709, 9648238681838878635}, + }, + { + {12840624483048662115, 13614226123606379619, 15087571995173849344, 1395488309690794621}, + {7173958427217959878, 1198561064176820332, 16821886260165681626, 10019479169661217935}, + }, + { + {9901328250515532535, 12796305315632203942, 10819069447660403847, 12542238242508661240}, + {17077777737462854238, 4364294351375777648, 8335244153165894685, 8863541604979427311}, + }, + { + {11029520456752683158, 2297291237551781454, 7934683676555855479, 1563954733146546128}, + {2252805128528536255, 10523375695822939112, 4598652721256818062, 17493379105069761435}, + }, + { + {2747551692916263132, 3151123035150683281, 13938314333309683791, 11970864255483579560}, + {7894236725861110998, 10515613623232567716, 10445557830757066839, 11155097727742050955}, + }, + { + {9569762631377921701, 10341967309273270300, 4697570564829842013, 16684762125903667303}, + {5281929071085172097, 13027961546412671127, 18398764602992176314, 3872796039504642974}, + }, + { + {5035609627965208105, 6338722048255995169, 11594969687968475335, 5639340633771742838}, + {6928934109570365590, 11589609913085167707, 18353534295019770247, 6879412911232288750}, + }, + { + {10042008593756684008, 6713471518385846030, 10961845838926538977, 855334359173719954}, + {7598642325962297361, 18006511265377032901, 6844179774752820363, 248341098560552116}, + }, + { + {12797853895127133352, 17314687680589848148, 4801569699821499927, 9711604734594547217}, + {8212610645535363590, 17221681508724305642, 11398663136094709935, 14918164175449979798}, + }, + { + {14940688064094792027, 10874356086032303420, 9942334156288812894, 18314945846365913248}, + {2026773265909278528, 13079907189666226787, 2413436844382479762, 17172916412715413729}, + }, + { + {6906211734178583215, 2568977141255648055, 12122130143181371713, 828440041422552532}, + {9361946962651414191, 8982763378443381215, 13842936470438971226, 14726899303190381422}, + }, + { + {15233793159839573220, 7091365221489488397, 7026505041428577564, 7614138360854053029}, + {5906758210005848219, 18266182645583974519, 15465977441750183309, 15365799046100584430}, + }, + { + {5523310814149808824, 11103439607538154330, 10292039577546071548, 1169663949743807030}, + {902203905701917473, 12346725749938989079, 17633270407605278415, 6960688675023695455}, + }, + { + {4505161139988645144, 10689463780805884897, 9379083335142738351, 1333253488693735633}, + {16044931735888519844, 16145584549427855743, 15405407720239538978, 11239573776554839202}, + }, + { + {6975554318981968975, 15982286720404911512, 1685931425716796252, 17715405440768877495}, + {4827607732096558544, 6375626601740689475, 3502039151843227915, 12085565714635174559}, + }, + }, + { + { + {1190044221726873109, 732025666411072563, 7781096808432277694, 13079879637655900365}, + {9048680577986693793, 12528346194104542124, 10575369576322629835, 14068913038053465964}, + }, + { + {3297775431071502652, 7947266993949467566, 6161673381820779563, 10604626734847205996}, + {17669018066064502925, 2386071939136502354, 1076023928806956187, 16075459682742916440}, + }, + { + {12387028018538599950, 5791681577936683396, 7536922194386052138, 15377770247350254336}, + {6564316170002440575, 10629371267149545956, 16125760269901494382, 16051398044897962024}, + }, + { + {6237354803374899565, 1782400080026955610, 16115027077529639342, 17907259814836219524}, + {13179234383592426160, 7302978467158243198, 13607720993463749225, 6693531817169120736}, + }, + { + {9659467198848065929, 13765104107473534739, 820057324758632016, 16604163594878267405}, + {15321524555426147294, 14524167419333362957, 157291234996957911, 3689488130722730671}, + }, + { + {13896531645245568605, 13598412639648980920, 3875086557856143664, 9242105512956135595}, + {17410265178284161091, 14904754836127450463, 2354327747158525902, 3858493849578874654}, + }, + { + {17288438225198818690, 15275190140700748774, 14532856272428522409, 2192294551011758591}, + {4275966798014984695, 13252812474545742114, 8604705074440591847, 504054699541924162}, + }, + { + {3623027910997185067, 15957466839356832933, 3504133700071704955, 4135728439139397021}, + {1160600455691338871, 4431928072859292239, 1542956305318065546, 14109181184369694855}, + }, + { + {9135041378474229537, 15626265487594878380, 2645257479784082878, 8105679948445763432}, + {8579715781576202730, 13437359533149316300, 4344754720520585005, 13326372852934103673}, + }, + { + {11341622086474305983, 17104958945811183278, 8154944722722765678, 6696975609844549775}, + {10895966360082878017, 2277686037575837054, 12236842881540344526, 2086470279064067791}, + }, + { + {2942668817124399651, 11439025398519255779, 17477264434671471242, 9606507094132585461}, + {1771475584689465869, 10791261379080046759, 12901998265727968789, 16423426725595035468}, + }, + { + {555419805011031621, 13715683285513290290, 15526654591995532751, 7023761423093873354}, + {15093366433178982304, 8625749648874372840, 6412297471587129206, 12161114204724955762}, + }, + { + {9362623422820895267, 6491356159483508885, 8543224082493101588, 17290929683278258587}, + {17348088672546490894, 3323350644823701753, 398525379151271104, 17794417664139368677}, + }, + { + {5880914635028486784, 2898124605786107494, 7953506026198179840, 2189477357380899574}, + {11207122442953694293, 9288539232660208671, 13527697625010979453, 448462453367651162}, + }, + { + {11262205719433170585, 7539606872920196479, 492385789142086954, 16036594120332851267}, + {8084547797138041354, 10063336189771527714, 2484395715469739911, 4879298610504146231}, + }, + }, + { + { + {10457697409306668434, 7830477435299250296, 7772379952622394912, 6109610138112185532}, + {4382803614711332911, 286231563340803504, 14408860285425706036, 9445290615796219321}, + }, + { + {8838210194055479741, 16190279688839291456, 16520121358582757556, 16768959728701970634}, + {17279896910204983538, 3582816187015369256, 372137484481226748, 12972230207718993241}, + }, + { + {5372953569411270487, 17808033035436856194, 18122397266105109983, 7100719381161799491}, + {14789750485957107776, 7797117101197801156, 3512936690589352328, 17020065099624467120}, + }, + { + {11480031272463364121, 2525856087688686375, 5875255653057452580, 5606696614467440464}, + {12094715534218447962, 6173479337351577758, 18244015404482482803, 13199349349511499695}, + }, + { + {15137716704658930971, 10986987873306909694, 1939043496821343401, 831824210330752494}, + {1056638569496361761, 1714583153436391847, 5183439003162975519, 1665087783666164342}, + }, + { + {8618628902870211609, 18064648431799903596, 7274877928823092285, 5660734703123876155}, + {17178150811821260605, 5485275535084805985, 12607767610318589165, 2215859519135800862}, + }, + { + {14525253431314563485, 18061438239992695424, 3753059877845742067, 6434164734885086330}, + {7925955539869645215, 5236273722884803492, 17135463959633855728, 1885217581414238490}, + }, + { + {6097225965006328457, 2630336000831717722, 7049638698786526134, 4203465038263485233}, + {4677974565964393904, 16044036678123636261, 7266049959100300634, 11339674070148504929}, + }, + { + {8932509163442546090, 15088719838810504543, 16380598316811388529, 11816509227456545305}, + {16117098651837966507, 6506253137957995237, 7842840841723336777, 14854630695614255489}, + }, + { + {13319400996902371533, 7582870533150862327, 3853021819016824068, 1553148791440569506}, + {1383156799113954152, 15192818247458559870, 16096167687117464686, 6356494963887209448}, + }, + { + {16159738883836847557, 12797888767862801410, 14516904553705186948, 13070086184381080434}, + {916885380224317954, 9486576895096666538, 2320292919516422975, 5019772534786350963}, + }, + { + {1979992348876614621, 7494083465935166973, 16035723662722831744, 6820849908885211777}, + {16740735239901023053, 2017530162004533409, 3087262288875984227, 9072904925376793991}, + }, + { + {11716934526135332476, 433379719600995157, 14981324743710487461, 16580162143428931768}, + {17678216037230646787, 2252837520490636634, 15914299694597684738, 15253999728204986937}, + }, + { + {15673599333229961794, 8862902775863712472, 7565222536246787763, 6724910605061440481}, + {5835390808530098179, 9647776340035782792, 1038074137838521743, 3352456378381259564}, + }, + { + {13166325906224116930, 10408481058915151795, 13583679214409957982, 13238337156927685694}, + {16088785436819834700, 15860660615594092228, 6472158593272826810, 15600310172166391652}, + }, + }, + { + { + {16375505785562641226, 4903074653735993511, 10355787845763031761, 3188849033041803587}, + {3145147452182864049, 13878747873108378466, 2798650520315922121, 2325962694441538199}, + }, + { + {11530583608023224967, 15979155166527001287, 592931868138800645, 5361781029549479856}, + {11246418752830406096, 11882251984248471436, 12026389461944629423, 12289077922798223820}, + }, + { + {1328339467113622233, 13374824154992864223, 12057132015324007824, 8507647484414695512}, + {9286016370798146986, 9083798709648036612, 4312959727577073260, 3732271624824420608}, + }, + { + {14129872794455315922, 16354810591314135702, 3177417010197743958, 16494351130927698692}, + {16557765056328447818, 3139394196704738651, 16891813998271303650, 7374470997276173905}, + }, + { + {1547814412223404746, 14194709348405912167, 15771028929623393801, 10945048172868684389}, + {11234483878611528405, 9542605377580701681, 4555391547268120796, 14916872217451960022}, + }, + { + {15490131882364039637, 5140304620645573547, 9403655757498826823, 9824850954989176893}, + {6366139388903157264, 1981838834216345294, 14659870286877979556, 12091578124492612524}, + }, + { + {6832171775190531128, 7903951882621813138, 13717573220828409267, 15400575122727850054}, + {6101307565293576434, 17226772767105983314, 3485283905347036760, 18439321272895583847}, + }, + { + {6289130721434350290, 16129337673129720846, 6648351866142453445, 7705983837166554199}, + {8120136556582544814, 7924417299222764443, 7821995671300500892, 17697662726179084739}, + }, + { + {6669506511185916061, 7036555931205961476, 15471324228012955656, 1075869467462424743}, + {14834182808856841386, 9481869408708862398, 193651363902981365, 3496053494343565969}, + }, + { + {15198290782478916101, 16205293865829644684, 2104596565474767471, 7783918193658109501}, + {1567469099169331732, 11324634977690198924, 1374141643017900909, 18368642394438425630}, + }, + { + {13389638006727712302, 17518324493263447682, 13178832200681259657, 8955667391164524441}, + {9331759525815425703, 12920722511913101049, 15807602761711044426, 17873219821625976662}, + }, + { + {12103811390374960600, 2801185238127939998, 16289223959107648345, 17243660994858386104}, + {14818957729322960498, 10018491794651971206, 5502065678180783560, 4158378425043433526}, + }, + { + {10278921174996593635, 4630624563386647486, 11179643216044347020, 8701826069861381281}, + {5839989039471676569, 3060138177923841885, 11279648082143612852, 15207786733412131883}, + }, + { + {18277950978951138342, 2577918906618404946, 11684553042740786163, 3082582313241836872}, + {5222056779189126973, 7794579876203167869, 8527673475629739407, 9851790541007784515}, + }, + { + {671618501514350673, 3455246317052893537, 18161533457452722900, 8968434886308785175}, + {8445049055511813064, 16897132794064300993, 14420937999674600470, 11110627336577683437}, + }, + }, + { + { + {11535283160083833975, 15102917952496589829, 12909095696891909745, 4611119212602854744}, + {4195756524232932570, 3754603965149529000, 11539276962358607816, 4401424391553230481}, + }, + { + {6842993463058627120, 2708745114617181146, 3832382691810282630, 10333834458057320812}, + {15028197197004077388, 7681293343255119354, 16227537691626587485, 6703363869832495607}, + }, + { + {17567108285065737529, 8693245930330183070, 4025672038042952121, 3491067119247522844}, + {2100799837993193702, 9579542950705774054, 5091525285265581997, 1806757015709820088}, + }, + { + {7757354840118131559, 16227348978414023262, 5800861674805516343, 16486235803248700961}, + {15646700163023677309, 504258765210816549, 13724147899924699697, 13588899538317277096}, + }, + { + {15895596198730294923, 12513494396374459899, 13552575153453342654, 11312160635199213507}, + {12446618129881485796, 11286186116805515445, 1584191291800429567, 10188741008566636830}, + }, + { + {10157626021970320469, 6580688164585715207, 17158416694471177787, 2873484006255074946}, + {14852216457444863041, 7463041347566136496, 2190030775722958628, 1116223035803602728}, + }, + { + {8598875756176012541, 2146658618778432566, 17575736667490551813, 3602654209723135985}, + {7223347129734689099, 7256921024940026570, 12249118963297692963, 18168532365040819099}, + }, + { + {7585174044375463988, 2491923406404093282, 9355733262044036112, 11484079611349577325}, + {13145030009254943291, 1234932884591406048, 479845670619308618, 87735010308690865}, + }, + { + {17307641427543377277, 5862898330718319545, 485176909118483750, 9845223919324484076}, + {4293549583740204024, 12765124043303931186, 17870894781132657382, 6508172378961793849}, + }, + { + {14234156373312856400, 16210939788814051708, 6478880037923038392, 10435512103812909561}, + {18142844321802359753, 3243996803126554757, 395603619159523019, 10213589535656704607}, + }, + { + {13256075137060741204, 991285459654295161, 7857174835799942102, 16201105040554625727}, + {18398612085349994216, 4512860776717176840, 3521452275695011919, 10622137733045360311}, + }, + { + {14993897771652736376, 3320388672992783302, 18421556740970114213, 7438967127794745135}, + {15048397725789819354, 12721899159423777001, 1135125102123667189, 6637485660805148630}, + }, + { + {205606553319362431, 15484041062449893984, 12896720585684759529, 16675624014916513672}, + {7579112430564108390, 4602460356900251082, 2677787525524280838, 16723483619407414479}, + }, + { + {17981939084373319995, 3989926231875116241, 15342509934701840045, 12999252495311233519}, + {15389919024942778009, 6136335679373143315, 4117381415379544275, 13342256463740646775}, + }, + { + {7622769999043907199, 15227992053145045634, 2719412067263856950, 17811161335980566241}, + {15036003689029442301, 4919601685231030712, 6756893600905532338, 18029567067112075531}, + }, + }, + { + { + {8492025373682814159, 9341562763134230960, 10104358220305514878, 17545404790574939459}, + {15737064134098795026, 3880597485411313924, 388663918823974597, 15032915458906101183}, + }, + { + {9452334891928331309, 15207477416486363718, 8081596400773698461, 7528187414539292243}, + {4773782664413845594, 9435822414884353799, 2722451711480791323, 13642248100035410269}, + }, + { + {14202843175914986568, 9421566354325954710, 8667368258699634314, 8733557788892402517}, + {331451278037425751, 1109013653863287548, 8802742738207038150, 4667769857523050796}, + }, + { + {16570512961992288509, 15784840936011612960, 17797638261217375128, 10589124475671334830}, + {16848440972121709899, 697679021479737566, 1456738239410270672, 7214966028857473701}, + }, + { + {13782421991242364698, 14661156263311647121, 4726455119103158850, 5026680986111581594}, + {15610213195880130268, 13703306863846075517, 1371700218221235399, 16792392307217237043}, + }, + { + {3250188629442787152, 2728518744775098354, 3140694818026767341, 17566141747707001105}, + {9569291890730505101, 4439949820491175035, 13751802166620923317, 6602549032413906269}, + }, + { + {1067242659333881602, 11852011445832610026, 10644339539182752718, 15519552867360295119}, + {8817864336906465495, 8844034637292547409, 8850766994595652906, 5299330403389585218}, + }, + { + {11434157439953722433, 9090860151661100670, 8407869262026581159, 17882547383849407986}, + {5277257988019769029, 11463853580825342183, 13607489835500075467, 16878800997498950751}, + }, + { + {11526703690786988415, 6919770449526881259, 6713486711636442468, 14697284704991333147}, + {5405738839499060129, 4737011393825878948, 8707677918280383477, 16881185094380241198}, + }, + { + {9056014389564242176, 13179419520216397988, 9815298409700670396, 15302091100015307530}, + {12552178314548371153, 3975519917079954227, 17211203317279781814, 17755252427177154090}, + }, + { + {14056502343958951437, 9570378325961888046, 18335930130582329417, 12188057598786655680}, + {605832426765150582, 15265028749599155713, 4881763628803375168, 425422732543303669}, + }, + { + {16059297404709367406, 8426877510924536482, 15269952608796785555, 6256768900860981984}, + {13142655793714702073, 14566340391957173918, 17147065283704191109, 879106195264399}, + }, + { + {14152733561556558931, 6788431167332998309, 2303657738205239031, 12712406085467592411}, + {1740483284496903693, 7206807366776489586, 13420608648010812358, 9180900918550128115}, + }, + { + {7193311017682954852, 7916342489073401148, 7990830552202175554, 15066065171478273830}, + {15601436495559985484, 11056245839590890541, 15963012082312968312, 7270947051909344657}, + }, + { + {5010740583028703301, 15413348048560455978, 2028314374959411194, 16685660750422250777}, + {14284468905357216559, 13715859397068327775, 400943255937053645, 15390787503961331119}, + }, + }, + { + { + {2707032230021934480, 14943945588296447659, 13333962501998857701, 10603744732015256400}, + {3386903941135274495, 8507451908469049716, 9231176235773710950, 995464562185179329}, + }, + { + {1497127512412966214, 11292269970549257426, 13920714718237672232, 1363993524078475237}, + {3687544717271789391, 14097532154250414203, 8367320351336033564, 11089672460564007700}, + }, + { + {16993953276024768829, 12025590727803527383, 2672535181364381995, 2183111709986676538}, + {14822521615475063339, 10618745739454592027, 9957515072444869664, 4797521918890127374}, + }, + { + {18097777493026370528, 398882723487597643, 10462164796529820357, 7704526739683689547}, + {12438059168025171393, 8163001730991802064, 3319372757738711275, 11518015261707325261}, + }, + { + {7809927122217534998, 6003738786706135597, 16541272992243715653, 11352602417510156921}, + {6070703545889058045, 3742828100079104877, 9416263310824977145, 1406892456840131842}, + }, + { + {4005088727670892586, 10215872293486093012, 7634075494800881158, 7707144163086802537}, + {7085702388211248163, 12168208652772836726, 16347414703478252736, 9386623607672009940}, + }, + { + {16530167766100505402, 14672843572926881623, 10752276706209340624, 6888427606311779724}, + {9060900993058482991, 10439396339124215720, 17640982730425880863, 12916411341252677116}, + }, + { + {11776245660806714247, 18129100488268011560, 15389929343761297429, 14544292652959164154}, + {18063319363114104433, 13433144948667100183, 462314076175867487, 1862686058702915115}, + }, + { + {17306422602774323327, 17272002328208118653, 9314885036861009829, 7485631191912561636}, + {1933835651414138452, 15231897024969540970, 507247317572839552, 10741595984991150047}, + }, + { + {18297797979313130180, 16976628082093243813, 13059060093619519046, 6865085966096869228}, + {15021840537243000183, 17843637254308940381, 13122764022765250336, 12556030904692962295}, + }, + { + {11175787671000337381, 17757097628648374409, 13408571223487217321, 2720103532070247452}, + {3237822932023459208, 10155101091021157316, 13910068101949253623, 648579517754264097}, + }, + { + {16597587101652675879, 3941450686064909756, 17635514250964078220, 13107347044039852240}, + {8910347370050088758, 3114023981351548745, 5209360756412143979, 8990623441581200588}, + }, + { + {7692284195082081732, 15977071788000084350, 3594719301791478282, 16545490512039598136}, + {7629535887569375952, 3241949087900065139, 170526822997903747, 3422990592513330514}, + }, + { + {5473399325468482480, 2511351254139828397, 1124856552206019504, 210074180589003934}, + {9693298849967626723, 16185054013081266938, 16070865229793723400, 734500463998096984}, + }, + { + {4895849847827915947, 15252720925614851036, 5944268852782996266, 8171510665067151601}, + {10594809041696466609, 4377920841124876663, 3816206760439007336, 17150624011379500381}, + }, + }, + { + { + {6266830413981331818, 10890859480409122410, 738708598357264321, 9241173142142102299}, + {9152169484987657321, 12122430118903337055, 14270062735458703743, 13877635605034675649}, + }, + { + {4572419849863661964, 16330741525817240677, 5456771007607263420, 8798510164381810403}, + {16547183593064549865, 11355135595370359779, 17581910791451710925, 11684604415749005488}, + }, + { + {2766130068233451740, 15909689412657372214, 3272828023364980896, 12907534005596438003}, + {7065629942275705493, 10609982651084321649, 17330343421617897811, 1746246157222856918}, + }, + { + {13168953859078137190, 9072500190247791267, 11090199374278127099, 3503847851309060744}, + {14395788825673846582, 15073993563711333791, 12879874391706003251, 15417028700542288171}, + }, + { + {2686132933630431595, 334448852204016400, 5636563341880055087, 3897420469445246068}, + {10569177829735084588, 8244586887721364305, 17973493209847502315, 18083956436923498083}, + }, + { + {15514509130323617046, 9833490355170899102, 12028021566105512521, 6349458533674010018}, + {13470024118569549588, 7867188201997717819, 6110792121234766402, 9917858515766574695}, + }, + { + {8273062939911446888, 1936638151089648185, 44602505720759914, 7839132833110815763}, + {13045756168264521992, 5375972549477973022, 16964151563535745964, 2871770426902555432}, + }, + { + {14164643693563803212, 6386904235704679249, 931435629437735510, 4496152555914735639}, + {820099532545743339, 13419988718062417698, 8948965620484833159, 7238410427920554862}, + }, + { + {4387941928212462673, 8023190031094282215, 12322462122895470016, 17311901330042910195}, + {16445894183838823370, 690424095855074674, 12820742226551488738, 227935274674223825}, + }, + { + {17437729542205914525, 8439533239207225162, 2862942422640746698, 7340866642549630610}, + {6770451500989398335, 17262212260581413381, 2156505157624055602, 12195119268846383898}, + }, + { + {13685370053507732180, 8304030489296890211, 7042719123662732989, 12115154796394040286}, + {10496877583013829980, 8909625177349683785, 5268451666475070682, 8910488385056259560}, + }, + { + {8874918984373509240, 6652428549855789281, 14866714872885601270, 12093494664302554643}, + {10149999253136441007, 1611873554177023520, 10271627298853910516, 15171882630355491729}, + }, + { + {17085353800722834618, 3271271583189511718, 9338466116389304614, 4685545953421459012}, + {5059702655119414343, 201476627889215522, 6388612869673101372, 8357217932305360896}, + }, + { + {1836621694151238424, 11438765101326043062, 5537182303007083642, 2657011195641217678}, + {15370176245454161308, 1478361893117141052, 8729368992402422055, 4807782542738120272}, + }, + { + {5084555197036037383, 500829604818691390, 8128181767026348964, 17895639808733462562}, + {4138748420878083709, 267892430674902987, 8954358455330696651, 1946224964877667668}, + }, + }, + { + { + {17561670470565298976, 9524122142014309347, 12619871254022879995, 4098610542031538614}, + {8338691110372464881, 4378598564044777665, 16435680634249352743, 12067828180476756532}, + }, + { + {12574920924242276218, 18146097977073890534, 18281543194137545725, 4432773597060264867}, + {797962164984225968, 13432184750641235201, 12394976215803938078, 3054137600383896411}, + }, + { + {12910897300898239001, 14116919300756610521, 9737100313909655285, 8792063194563201934}, + {924297264228895146, 975866810375743708, 14953819883516375119, 9992561966868201517}, + }, + { + {18270562314314829224, 17574550722906577917, 15522987576586641271, 4200899284963891561}, + {15719788437321868967, 18390235318178988753, 17371818886753265385, 4583380351670429228}, + }, + { + {11290716045321163897, 423611636875887759, 8716385793549629027, 8029377844845093468}, + {16573848460451650185, 15094868140191104543, 14624483608434776103, 9086586764934160662}, + }, + { + {1320522168839874087, 6395673054871725696, 7793960979093413321, 11402054451286901177}, + {17278080290632229040, 3823680337747309837, 7840042035002848151, 17839593774203285281}, + }, + { + {10024545625018137606, 3780616370895328213, 1516632588067435378, 13846630703933575818}, + {14323905768888574358, 16062987352815864444, 13444338098535013457, 13400662018607341910}, + }, + { + {10102001197913431240, 6211688443233768420, 1986665099237206297, 9248907879269017005}, + {3081890249882755206, 7828527646248386813, 12676034092230326487, 14655968027461080131}, + }, + { + {3763532248936424432, 13507960710132312440, 2003243330622949364, 8723351916784911918}, + {17411870179533482591, 495549359712213584, 6958432541445845486, 7674356092204128350}, + }, + { + {11814337248412299972, 9347461245743305200, 15456560932072269534, 9579754357941936175}, + {2098168907840746456, 2063921976437345588, 9267808714920405578, 6482702408130663270}, + }, + { + {3313415711246730386, 4607422129142883607, 278072683866121896, 830840258180061490}, + {16961959739026004139, 7896385585906900106, 7610238284391475173, 7231671772874233939}, + }, + { + {11464797300361906821, 1444449385286554508, 12433005157477847389, 964895564896662942}, + {8457290958728547067, 7044433897330872257, 12292673928275053405, 13679355097865192207}, + }, + { + {15352304695586484723, 1527883079108513336, 5890042963344522083, 13407971103520766077}, + {12385239629152188662, 315706510218287516, 5361117161753711484, 8824676525356150938}, + }, + { + {4555925933619499493, 14889603365479712329, 15898222225673484215, 878884802170861101}, + {430001626591485427, 881428142547721183, 653855015067704092, 11378990354467312809}, + }, + { + {10219225570653005145, 9205374019534090202, 16828986596058027743, 1089575570166892706}, + {3079144130112884386, 4682944567048139400, 7674497449298779575, 14137535283566239898}, + }, + }, + { + { + {13266892287530449189, 2232961926857263527, 5934654989155432442, 5415975493246016158}, + {17117784386882463158, 3875398271691758986, 15755743581177209843, 11380746535012415659}, + }, + { + {10162459499000477259, 7534168794800651527, 6320985751131807192, 9263840233901040421}, + {12178625283764017250, 13143797113231152006, 13089053551699608219, 13480464010111258056}, + }, + { + {11426681347395118622, 17135867298562042628, 10870734720453621112, 13803364322975322217}, + {9740527283062276630, 13765238480893165263, 4792349632705804116, 18359029140065847048}, + }, + { + {1420251412241033168, 6449255753238336368, 7468624722117319576, 5716072259994197219}, + {8165015263320602150, 4757529151848960259, 2040364517493350115, 11069642333484542749}, + }, + { + {9434687670958330812, 4808705744496679962, 13910334628239183613, 2628594509406050235}, + {10055911465166862298, 8069256921143792190, 11886968715847498191, 6351594160398684406}, + }, + { + {5472832021993175857, 6120966193470238758, 13156950075464061259, 14833372202848630444}, + {5760885723102571027, 18022572190906170343, 9870918995920897221, 9546055667466056471}, + }, + { + {17124591880405051324, 3379747334483646957, 2084957978131092947, 2413497199486596627}, + {2867893699156486423, 1357836849049583382, 13607307985344221035, 18039194570940763745}, + }, + { + {13230815692170010235, 10662664037814374845, 10120384214921531334, 8892863196093018212}, + {4443096401408136417, 1896901619181196514, 739574867683694091, 11233952771600927581}, + }, + { + {13885878918475208407, 18415131106660406656, 14362601436612948914, 5740711586144226035}, + {220574937152712384, 16774016249557318959, 4658351269477373440, 7890975779439252404}, + }, + { + {16628715286876183012, 5300385226682547206, 4493053153469218188, 6690552861098862065}, + {9359345201611660030, 17390357193161728482, 9283655448484665614, 13747647357786913441}, + }, + { + {3101241556869117917, 4731590937333975732, 8347709942856514723, 580858462407103829}, + {8937550160715031857, 563888416351720575, 6928865729903641398, 8295908905021542009}, + }, + { + {2219303446125808132, 7766409607764464233, 4492816761527421087, 1687012079818776091}, + {9967512906892097592, 8099397263797608226, 264054732854154094, 14515622825083967497}, + }, + { + {10586626338424063837, 11285305220583812031, 1552873676034063335, 7108571382532772330}, + {12077600502438115659, 4925647731241250576, 887903929602864140, 3575833277214438245}, + }, + { + {14685642695197717757, 4830460343095831969, 1748938116371486214, 3212377924501398108}, + {7575821759023381902, 4416593227203343304, 17810665332121047202, 5387420006905173437}, + }, + { + {8644732068940188724, 17116805484232699355, 6611042643736763845, 12686480611232016266}, + {13422256101258226329, 15901664205323922499, 100273141428472746, 3184681836469139902}, + }, + }, + { + { + {2754563581284692865, 11257360722362829387, 8254261291934606879, 10023569920325096229}, + {7980898855627864603, 17162063449612285703, 9275759455936104363, 15936804738099638644}, + }, + { + {303387668469489035, 7978391052264888020, 15413722057350324494, 508608987485166058}, + {5585753287556892522, 1344134516582665443, 15144279405777509214, 17014353449841567149}, + }, + { + {12518577022215294774, 11347384788122950558, 17122718824958020364, 5431993665805279177}, + {1445831254446028321, 9845654210244803480, 18315778529692612284, 930563922336183289}, + }, + { + {4894710987714215219, 15704993603878996107, 1606204036324478223, 14308635149530198932}, + {5026736228773269251, 2911689442372084137, 9004077539360196849, 7770049130277452000}, + }, + { + {2745120518194234905, 17255944807561408883, 7371907591838942770, 11781525288383871227}, + {7814952754785494862, 15022715213812536212, 4112388658963418656, 13703771908397991335}, + }, + { + {17455440140812341569, 16738670164475421762, 13259904130186215994, 2168106064304872507}, + {1969289843772256992, 9025317999701057831, 5835661391798891929, 3826587698101558069}, + }, + { + {9149648374608464235, 7248346993716635643, 17283919168525322365, 10107681064815728795}, + {12176813938029507719, 15110337574289033068, 2436453685316043712, 5876967059744625564}, + }, + { + {6197919059881189313, 3300993078638782623, 9357667752372201437, 17688129755135009447}, + {5477090746558113696, 12602024521188880300, 15889961935507293355, 7135039746373941272}, + }, + { + {12561063426893244305, 3079971284510744316, 15695857190375815873, 16730673956207425338}, + {12065477821845465116, 13846158368121919228, 2126156187526559500, 3005167441915916768}, + }, + { + {3858987859895327040, 17043903959888117395, 5861237635520080595, 3292646198413575902}, + {14286644557048422360, 14346409530388980974, 12583555046601155161, 4665981927428063991}, + }, + { + {7657686120974201842, 2388299767028319466, 17934808017791217639, 16708640707026372313}, + {14122341266134976486, 9547124998857374491, 11194069918436025923, 14657538980930727877}, + }, + { + {18115789712912297420, 6543740714573413570, 1955886376702349613, 14736853369719086334}, + {3914330395250768396, 7607848156418885173, 18220633528980056514, 11930952850158858930}, + }, + { + {17010681753474701341, 6961088634819162945, 18395881317121515295, 11611411242007267179}, + {7996717433149311639, 2687736005475404867, 15340214362731923149, 7116441414289074727}, + }, + { + {14302198697220662403, 11915041511943922518, 12363437164440173650, 4047410026894059083}, + {11439743031696133447, 8776097395071907030, 6851061783357383945, 16484733576581941012}, + }, + { + {2861660066704264713, 16453202148771053225, 10039035813504063627, 6275446616881871868}, + {7150609984920482782, 11100941755544354363, 6219760433202580646, 2875377482232912143}, + }, + }, + { + { + {15290817014272444879, 8012864091692295774, 7591940515496590516, 9299619125326026848}, + {7297256232167521068, 17861204372399797627, 3100022958796565106, 15313770879200204613}, + }, + { + {9902363248877274636, 15776195244792726061, 1935342462634574355, 16572507349421626602}, + {7503944294807242065, 7454248748618678609, 2837392985175901475, 16494567631149775512}, + }, + { + {7821919851875204434, 3437243050078433703, 16281279739393410040, 3105985403882097775}, + {6392071520880083076, 2042340026857542253, 2492719020444109453, 7325465357665053546}, + }, + { + {12299242278498309265, 117303082144788574, 18382936515565701803, 7941141688858846015}, + {14923823358299367958, 15681089039073030752, 16878721085421212785, 3933697483394042011}, + }, + { + {17669228922922186836, 6423621568318435743, 16298886067880336557, 11009276012664659704}, + {2934438101395245878, 7492928446481808311, 1311515713186855284, 4493146166488261630}, + }, + { + {14009653500169461120, 12982754496644678513, 14586034645437015762, 18126832542767444974}, + {627541781236454235, 3801503508930355635, 14654684147782092084, 4179096323459534629}, + }, + { + {14829342742512426992, 12453047655591346244, 13146459409240287380, 18077963306248855764}, + {17149389409735171474, 13591892902058002302, 13872587256559899629, 15878632005942819501}, + }, + { + {2878536922988449879, 8819365314325664735, 2696760638950720974, 11357179421800829605}, + {14730809809256560583, 16277258726425730599, 13189689275745970592, 13769784951430309444}, + }, + { + {14706229979050107962, 8679247682181027680, 9705538653507374238, 12793525936716723768}, + {10022723640772366793, 2224403391050849804, 11511158380587667232, 3250960576892370870}, + }, + { + {17671892277522139639, 1384260767972381005, 7623504419117295292, 11197930232971575240}, + {14867469242175831789, 897596747715880677, 3892483173599058531, 13453254609965163080}, + }, + { + {2690362926234343281, 12134546410412600166, 15715872358030533545, 18160163251393343275}, + {12233720002415141519, 556081697748597124, 1099809960955937522, 15489604457800724223}, + }, + { + {10292669945637125918, 13595563061674492799, 18301330068714272653, 16981073598172019270}, + {4022713583718555211, 847970754090163894, 12867993617169467387, 10021141621864633865}, + }, + { + {5408393826294570360, 16896935186698126584, 13028972412622343885, 7850626233281656805}, + {962076344521148275, 12332350290936839731, 1774588207039851940, 17877147526933423087}, + }, + { + {11625440764115934244, 17372224561416726989, 13457342366450471135, 1569549943944038472}, + {17753658357081801983, 14093490077993040859, 1282770820260996510, 16402793994329437670}, + }, + { + {13086054618104175873, 11714492854942191582, 1743587223054035136, 5474094059388998723}, + {13150833497051757606, 17129392131927259958, 5739140380294248045, 10239738807213437974}, + }, + }, + { + { + {3631886121917081375, 14286411187847401959, 1546298555066841633, 4790996540037176549}, + {9541492152219486842, 12304868498960755609, 11426775785781090329, 10793898029125361155}, + }, + { + {10932352970046201499, 5875690226460998551, 3699681560657289718, 8665743594825198441}, + {10232089728487302472, 15664572298733091969, 7267222702489958195, 10552093353886118696}, + }, + { + {4008236965647744142, 8547116629188387980, 13874587567755370880, 12696453513706541959}, + {10752386832421030566, 365775083075323708, 14295272684753058141, 11024897725724291722}, + }, + { + {2399232949134869057, 16408469118941953277, 17229778225562184411, 15990256768949242309}, + {10694906341686584836, 2816242351659628719, 10794163145486835660, 15601904974333104002}, + }, + { + {1158521281204350113, 6232098057848694897, 12517518152351190341, 17852831094628421272}, + {11653774695260269881, 4420518556213490728, 13835371272800239099, 12119809446886544909}, + }, + { + {5143546864201185527, 6400878864024957342, 15513803558106064076, 6712861984922181478}, + {15623960351786428150, 3094277713920675576, 6184647748693682810, 7857605928718754519}, + }, + { + {2219152199405421709, 5367881810186787185, 9606063680551349934, 18233690822105957780}, + {9941441403610160291, 14996958158691873775, 4936282940888570414, 16608409936766385729}, + }, + { + {13270099407878039596, 11569032926557804346, 7759575992876193458, 8239088820951102451}, + {9633607727685959064, 9775909232917811341, 12297921731498614906, 14756100221590046549}, + }, + { + {3076166255574886489, 5587891405059542759, 2449830540875545916, 15616237426524550707}, + {17820334717580127167, 11506219580693301288, 15242532286743473103, 3266057695402840388}, + }, + { + {7193168093115966016, 8050992763687139302, 9734357192061785185, 15553552690657851227}, + {4632257996795951659, 1007158456255834509, 17052740163052114844, 15619284827675470063}, + }, + { + {4224824291132201768, 5709863556852834901, 13539485156399791894, 10330250853413634451}, + {2817020820518906625, 14306724568884734914, 10421968182740721623, 6943068506740047695}, + }, + { + {10830476567180688368, 10003074695797360184, 5589380226277136479, 14952961630386717087}, + {6354514974022878533, 3426762794422332369, 17950815054280597743, 14940277403242978595}, + }, + { + {14582622177810553114, 2819236216667324430, 11333005326119114902, 15900677556115860419}, + {12265999577465855236, 14521351376076108710, 3999293994697120555, 2365385934872188434}, + }, + { + {1803647016552158312, 12981833819573589527, 11371133227762071, 8210800033974528109}, + {16927172347295306236, 11674533305143999306, 1514600283696801303, 17036724058500952986}, + }, + { + {15551380071341300893, 1378878534597097794, 16601031904934455368, 14515377519758777108}, + {7039813638645241317, 12524221355672362377, 10483072291636269482, 5711815649533531303}, + }, + }, + { + { + {9246769514475702626, 5788284997389507365, 15857897362850327403, 13864676801095094218}, + {12881526722328523267, 2620841421323221200, 12599981775316397124, 12820989846844560040}, + }, + { + {13066648645100247757, 16727492115601921665, 15749471761440498106, 937594351871983779}, + {8381111811209734349, 10884357918725639691, 781591570669492079, 12778743765298428266}, + }, + { + {1797915488494232282, 17274756142259274463, 14207994319179101777, 9405903752538915237}, + {9001743317941152797, 15048752608061590843, 4925745663463425863, 17143694017177138485}, + }, + { + {11613437975225156304, 8619196433402562266, 11907033287998837424, 5056904365610561965}, + {7637552956459333558, 2827449950719061527, 9998507085256853501, 9238562885525900325}, + }, + { + {13246436769495027717, 5445015753017977819, 16266739009580878036, 15566606095998238977}, + {12196078605380432771, 4854324313875295137, 10974170498288217052, 6425550765546527417}, + }, + { + {14574824159194628650, 16992289415800830701, 3499062703303067574, 11220872042664151226}, + {18135860701984580530, 13630928571014923388, 2913126838766947469, 15869180955632349704}, + }, + { + {10621010745328025245, 14637275395423748577, 12928463178963493980, 3270672471462681194}, + {11765440832075775157, 8138439106739837848, 10004644076263261924, 12582897670868871780}, + }, + { + {9605391611675301152, 14014632424042523224, 4638465078692570733, 3013469722048440965}, + {10972600060210514686, 4497572559400894366, 2652629676209366276, 15827846806499715082}, + }, + { + {216774559418075105, 7056732230404238374, 4342481467357759950, 16143194646968227790}, + {12304857685680249595, 5021239809847286634, 745754913624924064, 1603290801266214539}, + }, + { + {2784418922013631805, 3554650219010546629, 8896448905401216908, 13445015286698819482}, + {6508982623352460996, 3322529327934132311, 18417788670080975365, 17554108945303789353}, + }, + { + {17620122226715347133, 9738429733440215024, 15577771434516492888, 12422193389576942718}, + {18383756008252443605, 12736926759685644351, 16981429110294392086, 11999528928951986433}, + }, + { + {14489177617081844909, 15995916840320959685, 6361381313838994395, 11146176143708648759}, + {17190512001934479207, 8406914945663974955, 18073221191428103088, 14075266763636071788}, + }, + { + {11493260321718935244, 7134447477334726345, 10489281872281557152, 6145540581503915475}, + {4002857892747271740, 5167943945955725680, 2892864850826359384, 16887114279977647596}, + }, + { + {16493058314197913501, 14642843949567816202, 8421201635021034279, 3645913604138483317}, + {6127272877310948153, 3660286308390076870, 14343325047340052700, 5355450922054278073}, + }, + { + {8426383571761073988, 17627146217941553397, 7396223609641674418, 2402241526082789613}, + {4067059813672963823, 10306840429023537942, 18342506396531908477, 7249869764848707701}, + }, + }, + { + { + {13937553904380032591, 9165760362893872288, 14159606902675650669, 7794101517494576908}, + {11994596892880464164, 16211278212275417034, 1568324133241165712, 6579463633356173526}, + }, + { + {369660229032730089, 11851915833529805698, 13485269529443969890, 1270120511649175022}, + {9128783725626301238, 6173048611666804214, 14151404531169195672, 18241008099921643437}, + }, + { + {16331025972320545471, 6852381640421896437, 9324740413214863495, 15718339035381717722}, + {1521756232012903545, 5431459367124818841, 5364830919043042094, 11104748870982011750}, + }, + { + {16226789363155700046, 13734705589524056856, 9629995513492843231, 2636144377026081617}, + {1233405076007260313, 2119672919365858964, 4932766292290315579, 4185117177904214366}, + }, + { + {6556637108078954923, 854911879338322327, 17335608616262058670, 8212786550755149003}, + {8111194132924193031, 15689965289081013375, 16641361924274000294, 13131032775030004856}, + }, + { + {8653575060724839982, 11482527594744353256, 10837608928215660048, 3651629796762058243}, + {7098570919231943894, 16903422906687575782, 6449467519885582678, 14455694979526406871}, + }, + { + {781149662684377075, 9606778745577048892, 16642923833572014687, 6804945833779567806}, + {7749938807818369385, 4119995592971432914, 17172069782410404367, 11558710124840085255}, + }, + { + {16996170392430604056, 2476294162951949891, 6677439492116109133, 1649550562276235959}, + {7307278264575968221, 17128676264244010843, 9768062299436691373, 3825325732056225433}, + }, + { + {6593955722549970555, 17069122731812152854, 9033349482403834703, 17728559655579364768}, + {16586780540128534825, 13307658170018069777, 3129405955501687685, 11183053750385689524}, + }, + { + {396019325068553604, 11523268935121791712, 15099363117146465288, 15263791092270534216}, + {13442484747453660303, 9234120847672647934, 12419564747087042045, 11765927783051357577}, + }, + { + {6946885342337567475, 7614129273290805579, 5593360004251714058, 12661112521307810378}, + {3109170497657341517, 17179338146382046416, 10757457188650866858, 6777926602245453235}, + }, + { + {5861627228365499618, 5011684805137210454, 1579621475012951778, 11535371650014354624}, + {12847902922833318241, 4997014846790385136, 9875988184618650628, 13094082946822736823}, + }, + { + {2372542806512167707, 4770713673953713652, 14348746494327256696, 7497346441434630132}, + {8937635379675246570, 8485257033326447249, 9021969910533595955, 17083952234675640995}, + }, + { + {15253158548483712314, 10967825792345015198, 9742716807127259344, 14359543366972625129}, + {6622650705673586588, 10738437674137632549, 1628663686364470696, 6788821495127737255}, + }, + { + {10456049238997614164, 3762844951386993276, 489305084297229810, 1360312650067674972}, + {11869321173985817492, 5817931657599210177, 16741327479242559412, 1205037582258757668}, + }, + }, + { + { + {7109145612337154341, 10502845970727626855, 6527587047878193251, 7049690136888681718}, + {16750703006415156202, 2559311261501721445, 1222802194566919230, 18019462938525560766}, + }, + { + {2592184418896595488, 1723751460114310463, 11198512454461769811, 6203707848404803677}, + {2601731234271436477, 18186700975610533226, 4757569424831899615, 13359873383138312209}, + }, + { + {13904640252203718708, 10747313134117021792, 14667070697514384141, 2600977347774743546}, + {15498986940124021079, 14740645313274577011, 17403811028932224808, 8060102076475954685}, + }, + { + {12990649636107730851, 13002224935892458030, 4380799638612122791, 7935443787987894924}, + {10438069978940053126, 302419699431148366, 551508078777729872, 366155636877501719}, + }, + { + {14734735764746786753, 1378251478826083755, 13509550209468602124, 14458158239096821346}, + {5681313138148713219, 9054039627425609375, 4235536482830620712, 1502753755874778370}, + }, + { + {8914021876030553161, 9071747156187788379, 14974736924255494885, 17070198435868341999}, + {3643991391224035758, 260637732328275649, 17609644917816078225, 2302996326941944665}, + }, + { + {5888744936142942064, 17277140802638358763, 10290028650289820825, 1940657436863195045}, + {10796401239257150661, 7788083050548605852, 13474393003015663489, 8961936186303685357}, + }, + { + {16407225233842256953, 13423683834633513951, 17454464203550700633, 6033758555290610449}, + {5063673994339442907, 12250392784929419939, 5954485814444410119, 10099095370725442279}, + }, + { + {4687621216548073298, 12683256962895584277, 1406415612737291460, 3991320149877222007}, + {403384179417053146, 7072351635192146705, 14388831570324308780, 2518546598792352745}, + }, + { + {2866701220158780648, 14345701180700655413, 10383205903323525163, 14561034237887346332}, + {4525630512028460468, 7470042867870921036, 12498636959757093905, 14959680069767374094}, + }, + { + {939355076355747784, 236998652239230884, 7862332576114728232, 3008745396212765985}, + {16892515157128448879, 1688671543548974140, 582235491724828261, 2879861045707356356}, + }, + { + {5793581539270397654, 12067972155882240315, 1914416028486337582, 2044052608129533771}, + {1045680055817519578, 6183307954634642810, 1115903654002488241, 9729229622559998051}, + }, + { + {11505233554542243613, 13650372171621554098, 11886401428750724176, 2616122636264787282}, + {9807875738265530891, 2065326856613209663, 3841177149705795822, 12478836916087572836}, + }, + { + {8725096612265348131, 16959754534248500306, 3934616751368449170, 887912345061829880}, + {11410178859948957868, 12867384504930748729, 4367798270196663137, 4359910421693489126}, + }, + { + {18221589825782480868, 15875305463032670629, 1054133002549446970, 2220911650204683784}, + {10874691797030180071, 13903803155513130100, 14873882741737344436, 9374498718172057556}, + }, + }, + { + { + {4471613312912718060, 13601785177495103328, 8083849806888905297, 9053545412554844461}, + {1876605639999952155, 6124537911475118673, 16877891074567085688, 16541720065079132344}, + }, + { + {18138305348849897995, 11498878557125400853, 14125346336359365201, 11991638807788804369}, + {13935355764550912568, 16209147067155729660, 11086190285777019292, 16727288863943596410}, + }, + { + {8873152377611229668, 6260821826956744083, 11489383533808918262, 6585112195310961861}, + {7365821041919648819, 1936165695028211587, 16164747634991415711, 17957320776652490392}, + }, + { + {13065030057172289846, 7278765836407486850, 383827150208081081, 7832055893191054601}, + {5249323286889945617, 1631661912887095912, 4431088469837785451, 2866263172993336891}, + }, + { + {6140213328062333551, 16704025329777067037, 5839832043209342792, 9196354634862869885}, + {2735762290983671190, 5323501742548818139, 3199127466610501482, 6719610946615763192}, + }, + { + {4032564124345275293, 240208626666701335, 10264845378648897042, 15608289126091352415}, + {17866864241918154829, 6207477318890336372, 491708931325462670, 7002400618323099260}, + }, + { + {11507747783030541234, 13683043390668171754, 9924966309328785763, 5549516466627385909}, + {3724001483041449858, 2408778220985427590, 10510707601023430105, 12862520912519186496}, + }, + { + {5012372868660694231, 12033652755433827667, 5960732801180177919, 6089487525155575261}, + {18400192045204062277, 12754175136438960528, 6170965736016609163, 10141374482047067946}, + }, + { + {11781193922347227447, 16937876011211881637, 2982972111293427964, 1728244726890919596}, + {3327997232304084768, 4754833121145407334, 5871027825507908591, 15772493911709624273}, + }, + { + {5862944033912881884, 11132730978666088350, 12167180155548291888, 16449838286695349787}, + {14399676610730016345, 17071083123672650337, 13727728787831175379, 7507765123422748291}, + }, + { + {4883057314704644529, 6606742732149784343, 16070555141087563722, 8408294891669305261}, + {4298316003054547788, 1573237855902568238, 5357176885445018289, 5855732582172939202}, + }, + { + {11721126538980357625, 7216004194033429913, 12765889884935948315, 6003399149613653734}, + {4571046290325663920, 15023470461830485075, 11463513436288928362, 16135217522406374542}, + }, + { + {14300855104129153291, 11491527690078786162, 5674183453812271017, 5044682546652747711}, + {9153978680942338831, 400454762074409409, 12351470849648616331, 10559229320903248832}, + }, + { + {11839166519633311143, 16489041153719856002, 4820713204385149226, 13768001962143023630}, + {13107713406478328396, 15471245828032402460, 6733652296473831544, 7665657127090105428}, + }, + { + {6114372925011600760, 13061069979571997963, 12156991017966837826, 12403009591138383583}, + {5761958709898299258, 1907771304051897263, 3007439379929412593, 18410854883912163962}, + }, + }, + { + { + {10153847769616409178, 16591913677701651064, 11369151065084080884, 9493662847124813178}, + {14299126668179023903, 2451525064998641745, 16055696673728703463, 7600736037142850105}, + }, + { + {3339871688614476269, 2937156932445032796, 2071344655111136329, 509603454456841298}, + {10929109734329673813, 4531629375826317764, 1802431569220697099, 7971315018970882891}, + }, + { + {831440329504272059, 17398063681351066636, 14954668702259408996, 5717183520144440084}, + {5683898996859918421, 9613688159291425744, 14476049487507222229, 3689544236835488368}, + }, + { + {4307546666223047416, 13914498777427309061, 6812156124789414732, 1680174913762530491}, + {6756325174405757110, 2535144759174364990, 11263393915003278429, 14767595249676286403}, + }, + { + {16671897597823309975, 8846923580617118936, 16420413907022376284, 2344779928765541883}, + {13727655669851883280, 934227091954463432, 4722713881950047653, 11812583008287470589}, + }, + { + {5321392406277114518, 347488367118035707, 13877286915167943316, 9829617275563347891}, + {12220860524024630629, 12190721936758412489, 7308208895364574537, 1525158119497637419}, + }, + { + {12984508126047021344, 13884472939864196037, 7382834581395586970, 11638480609720520178}, + {3822030693056621440, 16565826187005934945, 8411123762207988382, 1177726217844912325}, + }, + { + {6981289090623415465, 8930069945493884157, 8223216504978132408, 796477795300774057}, + {3120155459209743472, 14825603392456550470, 3711879425019804830, 11041054473536223927}, + }, + { + {6533202055887887500, 8435346764005128028, 14910943752455571727, 12906760590440667071}, + {6009159206340842586, 15232286290711710102, 13101554303130256987, 9535887764075322183}, + }, + { + {2364828287094520952, 12465747625792776806, 2520175043973011525, 17224593222741233568}, + {1891958595100476046, 14167979679885431508, 6587293950576996181, 438078840840804918}, + }, + { + {3740623254035318453, 2026091438664349886, 10842473205058238690, 5471257179527938221}, + {7725900701946760330, 2830662433803069280, 17799722315873409980, 10759084277615005300}, + }, + { + {14135544350792474553, 6171419888118563156, 12495035851387242130, 2843310747449412555}, + {5668766087526340552, 10117858698838396246, 5181027414039980750, 13247490124270426}, + }, + { + {5630566354382744149, 13019515676216329576, 5170054423571001981, 6980215251505169036}, + {12147009277250683724, 5685374899516102781, 10470553909247052379, 13479624060240397189}, + }, + { + {9352291669847160009, 8941401423217216209, 14488820078509299610, 16185610851702419585}, + {11995025321082820298, 8447817180287020945, 5861763576711981236, 14278368152612939946}, + }, + { + {17266177108677586607, 54295173557875478, 6565771227548453510, 11327083086584790599}, + {2516266639353612660, 16450448808532150212, 4693041555468884719, 10262468795248362309}, + }, + }, + { + { + {2365455792963674834, 2249234228455309648, 5237136544555745182, 8814246419234451463}, + {13017813702607013347, 2241193992640629733, 17982226236989862510, 9800528153239873634}, + }, + { + {17271890190678399664, 284117971978206043, 14999643475704678808, 6264699496666119083}, + {8859934981351804429, 8300880062060532031, 3667839168820458685, 17133003164910522197}, + }, + { + {17791633957402883820, 5938849497629314459, 8356801465373786047, 3163889445599730677}, + {9723709910898285412, 2841967670768995554, 10896757438566636700, 7434996874241771203}, + }, + { + {14086272070125896854, 12009239107306499026, 6592816798466831203, 11371087141421707743}, + {16277593907837607793, 16449564916599232060, 17471042072158213549, 11953382410698485455}, + }, + { + {14613304240735929191, 7658770973133328064, 3028731168325633068, 1486737152001467114}, + {16715835021406106944, 15214200823642287507, 18441898204110447697, 5669963154424393607}, + }, + { + {8381651800836461905, 275661552864412688, 5548629401959193001, 7174991431295718071}, + {7441251258233899268, 14052832476485122412, 301250917807487282, 17797202428295526090}, + }, + { + {16448089571044203401, 1396460397790470601, 9796571033221459545, 8162511506983092708}, + {13893406727199803081, 16188892369453405032, 16023105002157964343, 7061289566170423383}, + }, + { + {8743817608749172620, 7804846024944300667, 507107926259802795, 5258061329638283805}, + {15071070675288472598, 1848743106176521296, 16295570828486620412, 7409462376590083349}, + }, + { + {2825832734356158434, 10662490421734807455, 6363563030616301959, 16552149102037287266}, + {8852342875874616869, 16848248230809388411, 6581680050166700198, 245046966305064563}, + }, + { + {7828655274510399422, 8354801505584011854, 17818478328917068523, 17325245990806811268}, + {750899848242404370, 6729023687199559366, 5406329621088392947, 9196565205678366888}, + }, + { + {8064539304829538257, 6441901327220658696, 17278408443193767018, 6094106832683864460}, + {9824329910822370076, 5272517980512991724, 8211352561755619726, 16303987070546290759}, + }, + { + {16798983177239698753, 12189491924433050580, 9517619110936281609, 17570406314312177597}, + {9873809692789257777, 7539953961664846819, 14652839873293130968, 11082914471633564328}, + }, + { + {5471221015674785794, 8844747884377425274, 10084666525179707178, 11340747033059217003}, + {7295797213045550755, 8395678759725657352, 9654316500807954493, 9062353099996695484}, + }, + { + {4588282548354659427, 7317148840331807496, 1344326657487996813, 1542409176821028318}, + {16178223850158437787, 14916858636047869579, 13512744779273961596, 13549205429423761570}, + }, + { + {12307321769285447055, 293357554223804370, 1007020265087773203, 701738899338647839}, + {12276634770118212432, 14777553112070534726, 4541693432120405052, 9103025487888313415}, + }, + }, + { + { + {5757832545805155636, 17609080533053427627, 13855662030602089892, 9622498683452213297}, + {12281586442064581946, 610529441714948581, 14740357477019436626, 16983190111725558863}, + }, + { + {8470173855499872166, 15915210069852758660, 12368087246231545517, 3867174158581293223}, + {9082358201271846042, 16663463402757176964, 13740908859955866819, 7748969412274962298}, + }, + { + {13375424826931892789, 8508645806391261552, 18359272328758476903, 16433208398005282080}, + {13071423254987294580, 7999383023651164492, 14514701556577587750, 4848295889377673720}, + }, + { + {1020519568493754982, 10467781020270669620, 17607771250627508499, 6620300538436640218}, + {3858527175523168333, 13798129597334232823, 12495322651937391008, 3926713306087152023}, + }, + { + {5116038770086590715, 9943789276328255827, 13715439407309914230, 4887040860130243503}, + {18288477612078228131, 7640050573721350378, 14537362862524718973, 1658575506924200900}, + }, + { + {18400486168653423966, 18026904540891591040, 2037921821724043966, 18010956304511658647}, + {3751340308708032971, 16275459031633957091, 17177866831427164840, 1635431811339422016}, + }, + { + {3897330996014812355, 14347736534650088376, 16862404119462964612, 12216005411754788835}, + {11561909516001453735, 6261639657930189859, 9101978764314050064, 12280333151331067982}, + }, + { + {910276569977357717, 2872810615152156462, 1942106118995935911, 8734004121981822024}, + {13862118436432879698, 1912639548162720505, 13060137938875924732, 10642216911059510120}, + }, + { + {5132232031613377471, 3053931945527415993, 2695169719602504430, 11855046366025891084}, + {16462491222215366712, 16664416596202206835, 3077124688577987843, 7109495326459366311}, + }, + { + {3858762384693274897, 7520194928987242278, 4496744297661574884, 16159343214247089321}, + {6441167128044578145, 3604951495694157848, 3072075325567814428, 1964798869371174506}, + }, + { + {13689578474000942304, 8998724267038772595, 3350174507425430811, 15015413657749135511}, + {4848907595494161497, 7935644131326131098, 385849363817229511, 10087353746314516691}, + }, + { + {6067717601858189468, 10438404859927821308, 9991403870358837471, 17728358586134467771}, + {13476949968946830198, 7311235997042381570, 4429835371823736972, 17463216455983091974}, + }, + { + {3446799583712077997, 6763499387263152328, 9231082163128267527, 7733182914440272884}, + {17225092062157610409, 8163842076250628108, 14230171836718858439, 8195740716303697476}, + }, + { + {57759226194841354, 14962480748390190557, 2047254208877381876, 2830450574091058648}, + {14905486147404440754, 15792397930637469157, 16383409053580142957, 8686506861607761226}, + }, + { + {11120178572139812895, 11534611317577597022, 10437856602660752754, 13925966850017814278}, + {16776862023867799947, 17362554889424346260, 3408825299914455645, 2606150045870067742}, + }, + }, + { + { + {12109367644744157376, 18037756988516427980, 814572839386760074, 913616818805172815}, + {12974490864633240943, 5228203788953366069, 11458421156905635350, 14534725545904442520}, + }, + { + {13918155529832261002, 12953608416498491778, 4285102780598248527, 15853935066983430239}, + {2610351403194505517, 14905969693015035277, 12043976761492019990, 3883507340167876094}, + }, + { + {5439519346074792827, 2176389624009388617, 2631244572392601375, 15049241095214776941}, + {16292195309463965431, 4379169091046493311, 2454237863606964835, 16333960950959567989}, + }, + { + {10994470105201067642, 16033352651464686189, 15774427704233149170, 4596106024708523955}, + {8854068685612048031, 13529126595187822090, 11509928293490788309, 11620850709434334690}, + }, + { + {267621988570094461, 10587206279243947181, 11593510291287574067, 14787400314862354894}, + {4136983718443464652, 2976380359687256413, 11142324903811863489, 4610908641771667701}, + }, + { + {296274281547444433, 3085587185113256560, 12609265193181717917, 4535801536028989527}, + {3096496338675531142, 9292526016029159200, 13112825412047135381, 16663099831183411702}, + }, + { + {2767353193349225715, 8712112934471091092, 608599382922156785, 4028449356066786979}, + {17542394472389324402, 8680897831809226389, 7666317335732585298, 17261030852301003617}, + }, + { + {2068337952936280662, 6856444059219131741, 17213926210819196459, 513413453513211652}, + {5520465604253824995, 12970886588014924605, 12296275668437451137, 16808287251356954962}, + }, + { + {15914937173048753781, 12510295026185206015, 15954705664179129326, 9689253582699600268}, + {15356442010394775998, 2438265211465631320, 15141425278420483672, 17026865278332658671}, + }, + { + {775118291486058191, 14811108570252044526, 1277462327112210144, 1303109520734915949}, + {17662756477349124684, 3447822852149651619, 6150341860560710757, 13223916277431807977}, + }, + { + {9324118164416603919, 86833914568469678, 16815316898277944489, 5015780480822908208}, + {4077581079810359659, 6644887514971920354, 4892606269782662646, 12780428915404556278}, + }, + { + {3413637388791433603, 16937929882486384885, 11215805046681294327, 11559398419268924015}, + {11697258172757450737, 6137795229387768085, 3190984692021653574, 15347236891154706739}, + }, + { + {12504195828868930633, 14311735968635225029, 3580069346315758668, 12909891866007218579}, + {10780120525711488015, 17942431687417272891, 4966616543136223651, 11565637729828595342}, + }, + { + {12013939709036934636, 4233656138400235608, 5744753585886244254, 7800398410233442143}, + {15609887409465530711, 11633197710359969914, 4221051249637072360, 11317958694020095179}, + }, + { + {5703670472856822602, 8043375474958283103, 2470834322231268196, 13020386017071254236}, + {13795230438353673114, 9108571599173545401, 10145331563807416240, 17474439008571566321}, + }, + }, + { + { + {16430555432520738762, 11225321696360643709, 11777973654353154098, 13133115227828884393}, + {17678738157022850345, 1586660156856830642, 840647763693221003, 8645742354464326466}, + }, + { + {3598736754916501501, 4827022662021197854, 8203180748141933720, 10283251600632599041}, + {16186680658340956808, 15183393398087319142, 8714402370450665212, 13217902016653171217}, + }, + { + {11743016372336018414, 6125536020759642301, 16563280170798047733, 14529052521060111789}, + {15253502329174644388, 1556763737841306861, 3041940064290508531, 18020881359462953336}, + }, + { + {2297585344913389180, 13965959247788377604, 11341378863608387800, 9890953382689640379}, + {10443523266835246852, 9631856696811288063, 6944503116553031744, 10030824122780966395}, + }, + { + {6636244234467769744, 18284390012667441869, 722929822219329257, 3274166388651987221}, + {13177791837760949480, 2568122970128111127, 3477167651270374316, 11371867850093288299}, + }, + { + {12876460969864886954, 4692925517843901006, 17390372170975588763, 14692578774429957295}, + {1759864963511373267, 12016553435172103063, 13015881292003590351, 16187569590073958370}, + }, + { + {5868176722765418764, 8429364877332796959, 7785756492654137899, 14975349488807886278}, + {3272010964035218775, 8946396491617515063, 3774503492701710541, 2113917870331282160}, + }, + { + {13276631120161396750, 16968574704982977753, 2376454925072971568, 9477134218094425043}, + {13784622991820528988, 2074505569780291922, 14294803056569335889, 8759684036994631222}, + }, + { + {9884417819806228161, 10473583853313294601, 14339795822328931094, 8504498283323826917}, + {526127293629665058, 10891388783681447537, 4568472708151557518, 10369081088106148862}, + }, + { + {14875690099724520068, 15708131372860771936, 15063351920655636623, 13673754555867312132}, + {15920462627529593070, 9885706734937065436, 16823591115242423655, 1258777215756511827}, + }, + { + {8202515950988182345, 14546423651242108828, 14227698061016162353, 10918615690964448766}, + {17106085332738434415, 16355746637376756806, 990444867181428081, 15553043817355146246}, + }, + { + {3823475181283510630, 10848691050793796395, 6491636971888772243, 757676231362735550}, + {8973136455980928416, 6503381298194573307, 7834237673135397878, 10787325521157907075}, + }, + { + {455211601892268020, 1552688795129565862, 8165081519906588268, 5446810663215253742}, + {6750786745561416995, 6997284811902307211, 16012972729607911414, 9114458230677816387}, + }, + { + {10975008541567105079, 3750365577590028809, 13516995106985748006, 8919511738051569176}, + {12930984911878205493, 14293252788401143455, 1989517604536428154, 10167748824687611261}, + }, + { + {4403033949751056724, 8371165401092074176, 4457099049748166877, 18160854660487137945}, + {18090711188318162626, 2052332783995780991, 10990843822512572670, 8096670640545581193}, + }, + }, + { + { + {987127652983079722, 6872208513691823695, 10110578719299008714, 16457381243184327116}, + {10779072738879347999, 5965282398006505989, 18251577267494363268, 9321323379108563422}, + }, + { + {6119049170407437179, 12938407708038792521, 10105420405825346383, 3416306788177016826}, + {330648587825212481, 125568991290568141, 13857127346570918649, 4376080986981308805}, + }, + { + {5930434126597036589, 11240994623469578584, 839346533006694594, 10015087329724081709}, + {6285097815938761787, 17244606485954860090, 11523249727882012981, 7178451948850151803}, + }, + { + {16733615335426327004, 14833564736134873977, 15736159435317472941, 17560193966711884894}, + {4670172300306758374, 9477713670983496835, 14243955354032737980, 6459864769649694970}, + }, + { + {16053517698989562256, 2069464650596796670, 18305730134729303993, 1090863611964008044}, + {10595928817546105363, 11743183506441120484, 8584767248013363683, 9187452830514379903}, + }, + { + {6938579711827578880, 16268282168771714072, 4567473305742437221, 754548046014059669}, + {7773636946295303572, 8132380485366854656, 5054542590195827722, 6074347500754248128}, + }, + { + {3955857908381474930, 11852678900999621852, 13783017203403417097, 13616745777931267488}, + {13189924588414196918, 14519927295809952876, 9334100965942760501, 15172548734242885286}, + }, + { + {4869852132020793901, 14921212823114724347, 14342559113353033349, 13336827701782657309}, + {11168346789878684452, 9790480725902426052, 9171116079841529936, 9268902731763220711}, + }, + { + {4417372365016540659, 17280138652899703220, 6650972319709075180, 11252221422799491438}, + {6825784270383052414, 18308562203755695191, 4237445205082731447, 8485872406483449772}, + }, + { + {11718726714045105993, 2624508790343569765, 5794111482300008213, 12819216567095091385}, + {285329842793152354, 17257707863943097374, 16912487373614458842, 9501952033607497057}, + }, + { + {13074643344738491288, 8505193022029238118, 9932652098552590323, 267408114280737600}, + {14802861246220332716, 17506028737327736269, 15929083591675282371, 10937680132245212187}, + }, + { + {16688733766460131050, 12777635326299184071, 7769405825716531061, 12435979606514844725}, + {2767987141420672349, 6723940414217341603, 16114182069580717377, 4541113259200434040}, + }, + { + {8506371389960537559, 18031198550689409305, 11510251852995503442, 1923472385053944821}, + {6189904387119195613, 345664413118550356, 6439003191582953600, 18344385760549575361}, + }, + { + {5320548958745018096, 8341561189829530680, 3327828110998403156, 17981346269177513223}, + {14254804273025688074, 11111147827704077234, 9093333670517437191, 7272552282364063165}, + }, + { + {7587268797387514088, 4402481408866840263, 11260815389095334885, 14391444701764948710}, + {4224880318604689771, 2472148458660279030, 961218007313548745, 13826356220879831691}, + }, + }, + { + { + {5733697799130763963, 962857090393715865, 10538932452511329419, 3413281437172590207}, + {6635428480179771287, 4404718679994229138, 329074170931436370, 17746708206910902139}, + }, + { + {179238781994802586, 9017860544212172426, 16179187983079961859, 1380105261896053495}, + {6187003332254463653, 9896593306091975718, 17181949235068293496, 6820143159816507763}, + }, + { + {4652378169433586070, 2069013165869224423, 13972912433480425078, 2248203233787863058}, + {12819880125496785064, 12462800229583867169, 7969192387226362512, 15450728326339004590}, + }, + { + {11156900805411912784, 1737275748212365168, 16993486692205800040, 12538938066475152524}, + {13167476167764338790, 17373319366642541595, 6054831428930905282, 7118452124011953000}, + }, + { + {15319323094268250368, 15751569639563379275, 9174762389399453601, 5359273060607997116}, + {7548480167962649047, 4093535200286790152, 18255003581953064302, 17037929372197430710}, + }, + { + {3640693116491518731, 9689920283410066894, 16070225083132083168, 13505008973802466003}, + {750230942699692016, 15522838682331888368, 112268476925002814, 17491605970126192984}, + }, + { + {16769567946241955549, 17099752525969374817, 14041401861628609700, 13883170585376164878}, + {1568639950869924595, 7305902646691031157, 12536573783075304502, 12490145094151973568}, + }, + { + {743288751022377974, 9226164090128370715, 17669221687181604232, 1117842260351396541}, + {17697784451833850722, 14382209306891991103, 16951372733687268016, 188390802712613066}, + }, + { + {7332583781810119624, 11974900502289827649, 9825039434151224666, 13612433455140779130}, + {11167094757836568968, 148858902984029622, 4325547061862811500, 8439987427904092212}, + }, + { + {9775040802880336170, 2183956155792599391, 10102475962557589963, 14902149990037881859}, + {7528893974593517583, 18271333130592009124, 11812759747597590978, 3931581515688264350}, + }, + { + {7368734173241076742, 12419301291748626639, 10534790951032501149, 16676926058266807225}, + {13614593066288445663, 5547469267128540754, 5071513241190976074, 6206141439571986364}, + }, + { + {13268209255833199938, 16633146482265079265, 6044233937395578074, 1733872861371247406}, + {14239198956565602758, 4036306057099495106, 1778912298053970082, 6174082695927204648}, + }, + { + {9563897475320169888, 3828463449263891363, 4522408683909966848, 10085044841903958270}, + {15115863363467748291, 3921763467143122522, 3241611744432406503, 16149166019569794702}, + }, + { + {13355027832202142668, 13259310595418810737, 16638224598838046396, 388655643128437049}, + {6131988039969669992, 16758867465997134050, 793705445085763779, 16225736542798627427}, + }, + { + {12060616483613851492, 11185023117529741833, 15286366164051065546, 5407795227432242447}, + {3261413161331398298, 7182873809282605970, 2155509494582452911, 16998725707829879258}, + }, + }, + { + { + {14380343880230315251, 6834909096379668102, 15975839936772635678, 7738230945027714388}, + {7971648870467745046, 8320128435052726628, 10820026056424631461, 7058118462476293754}, + }, + { + {11165438517321289842, 8661037418831619311, 4401480924846865713, 9355650368902126256}, + {14352422544185763829, 12268031594529744663, 17607497268577344783, 12698954426769962214}, + }, + { + {5091534986326281709, 8005812102849517353, 17366496686564185717, 3658878980438307796}, + {8455810244524637026, 7649393961871195909, 8629386422022530934, 507133797409068858}, + }, + { + {10098955144981013765, 4095621933458866623, 313357785962326778, 14880249056209398407}, + {10605627454111004262, 7841561005378789988, 5015399193497762029, 5818383539901203899}, + }, + { + {829322392873083372, 3459913121476606612, 4547714508342797986, 5801286056105229312}, + {11591136160675314269, 17965845487226778560, 7022309609363885527, 5990586084398664157}, + }, + { + {6288277991521986035, 12231480617236286340, 8633990423689180869, 13535190275290488690}, + {13419223868164389899, 17622732596713666209, 10071779220640400024, 9451660464882303005}, + }, + { + {11761084765182152401, 9226969173242076459, 5445719591917489914, 9371133174853825566}, + {18381867235964583187, 17262888224001222346, 1934253649802391267, 3574888052111089863}, + }, + { + {15270079546607712667, 8471883658965202468, 10333206241569264742, 7414741159725097798}, + {7709713706668701850, 4461310100162632915, 10099194304024685274, 4760203118683828795}, + }, + { + {784143359277603248, 15514589681861498400, 4131024411374659852, 3624433493936743696}, + {3251402229976672212, 4649659622203715244, 926933500763282104, 6444675794782453444}, + }, + { + {3756269038539504739, 7020323719189662644, 9035687928909659722, 10611580746254894906}, + {6310976205075048332, 11776014447017145895, 18193543588427463707, 12941703752632419110}, + }, + { + {13258346207952257162, 14737306929596267614, 139896257833059475, 5049568122463438631}, + {12260461320589066027, 46497756452454082, 15185750105748824007, 3681406295924007900}, + }, + { + {2833339165549332500, 18300762432878821923, 13251805801497937312, 17798840894981774941}, + {10659715417364364943, 9241413425866019176, 9144746556705463526, 18018473193185776281}, + }, + { + {7436336871105679313, 3718902224813103412, 8186181643677715434, 17182578567975462342}, + {659724975715028710, 9425698860660002856, 796351253238186633, 18323943433898241577}, + }, + { + {13500588337778130334, 15143039800006025480, 5471884014140775766, 8599189774825271733}, + {14063442714998210193, 17130659899212878144, 2181888550891204616, 13594088124987533554}, + }, + { + {16216101853436910766, 13302132899821289315, 8876723129840557561, 2026846371223185778}, + {7753254296964005427, 16607365864296868674, 1800351426181020953, 12473523172043936884}, + }, + }, + { + { + {14734199666349771791, 4159865781008764547, 4413963548436270853, 4489431649937855880}, + {2824856157476907519, 5111945927271461159, 9825486821405155220, 7657332565522279292}, + }, + { + {8798422177670065832, 1250388939918922012, 5145324733132743026, 3716299737175574168}, + {14387202892738514375, 10255681359895407489, 8563822744122397080, 18430417713920116013}, + }, + { + {7857399215288147901, 2593284350589299949, 10086687882410147351, 14407837835956327624}, + {4469878646287387405, 6845712208092605310, 3019047164798827279, 2760591274816994522}, + }, + { + {10930605176025081830, 5850835312463207607, 9603163404664606781, 15623771803942139684}, + {4096748595672894276, 13060617166821837740, 11222939712741281346, 18445178894593253710}, + }, + { + {7976335583419810431, 16568954524837045521, 5581116346602990350, 18369129318179031997}, + {1930478946186473631, 14255806344323769850, 5302512325798050097, 10008570767203424472}, + }, + { + {929118050943456183, 445163760697913504, 7208246135487165437, 13565354217377841149}, + {3835063466770003968, 8214155842021576753, 2078717035803259674, 12502657820500987763}, + }, + { + {17741004372977419914, 16320851348541958575, 11853008901690968430, 9954777341381304447}, + {14274892887030297417, 10721339848307167540, 8731332510371325649, 13676383433520290197}, + }, + { + {6251805914672095769, 1063060143452094078, 16647397170554915088, 15454955736319919321}, + {11509235104607349098, 8441647766544589978, 956121464218389431, 10752793912033728149}, + }, + { + {14879603883666664508, 11158422912437249402, 8667988090392051507, 12702057193823135575}, + {13234479167199208223, 13752955092077643608, 1117550756888145931, 1184967682872965330}, + }, + { + {7004802666964716824, 395433501626287206, 16674151908279399004, 2279551165611331131}, + {18032555740803644790, 3573953642384243989, 9892480504006025100, 2397759375236735831}, + }, + { + {15032723931727013905, 4176673226777913017, 7270920367565154969, 8867675920919464620}, + {8174119413251699506, 15030539680120439131, 12325981936900309518, 2932283844656871802}, + }, + { + {3227890727136855788, 10772277744280338071, 10065219931092397730, 17233706446636791341}, + {1372997838851103811, 14430098741859995846, 3290287064497023581, 13054133915521430696}, + }, + { + {3404625123065318735, 11884832674715736469, 16513753127836546671, 2355202492840722899}, + {2182039060332057784, 17942518439766613327, 16731345075928062112, 5501869092504492134}, + }, + { + {15704211025163561149, 14596679078416770266, 10262177146233936833, 12443005669252298316}, + {1541294166390346144, 2952804996209068760, 15358481016273272880, 1321729586231860999}, + }, + { + {6862865331233391228, 15106279167311639122, 3283008666555627541, 13405610967904725343}, + {9845239597399801983, 10764942720093673542, 6506992344666983370, 2483131164245259278}, + }, + }, + { + { + {9844707592410952215, 8167497709587672711, 18115463401502884199, 8471563375691441535}, + {17525405040226359165, 2460181803833371342, 3375780580907171205, 3024376384135966552}, + }, + { + {18138724984190926809, 4154767406604950048, 5209478936276366634, 15469512148904762872}, + {3613429290324777670, 12631812917445459751, 10280179062385049041, 19656860716268566}, + }, + { + {14203862032167128161, 13470939927320077756, 10327441827790615277, 10318573137694660185}, + {14560780313347476436, 17088464982837309355, 733937949060316950, 14069325810788446179}, + }, + { + {12030193727051241373, 13981191132445467472, 18205169646206905593, 12162181194046583886}, + {10929925499200074058, 15291772758590352491, 8452344520852919320, 8199821440451878776}, + }, + { + {702956275289752726, 11856189935311796245, 14185745521831658392, 4370665693013677718}, + {4339320942948136612, 7422618440224759582, 871840009976682819, 1758213746931263134}, + }, + { + {7463305936638691553, 10552402742907536443, 9732741351132553899, 194397927117005699}, + {12837197785265289115, 4412933472643099429, 12440864981406580998, 17072316007921211511}, + }, + { + {5025653014579399483, 6266285559889618786, 17667439302823084142, 8837073500207072384}, + {16230880878690171580, 8966359704103918073, 2671625161783975934, 5761959268140569579}, + }, + { + {9876482463501409337, 17331045017548147052, 17542726936580732548, 8299195336372136083}, + {12891767721269002608, 14062358772374813347, 4165127680073507756, 16350672737379495431}, + }, + { + {15987859092221739938, 10999006767011320329, 16931834873460681704, 40989027820989117}, + {16439290771012023473, 6900965556474667785, 7253680936177336810, 17240235510851599487}, + }, + { + {4114449005477323279, 11333071244606712260, 5639227616302034307, 15107257128889549417}, + {5046122977641767311, 17558812465185003134, 18137671581165086239, 4382776603153058089}, + }, + { + {18024760665596162063, 4581156045659391508, 968287218068232238, 9228777525067749703}, + {17309990917327276325, 7114941925430814300, 16735731670154258613, 6290532662018771504}, + }, + { + {7595271959296927018, 15286771623821390629, 980612661413312852, 5738158184597378995}, + {6972117550390447038, 6246497134979772260, 2935831443692029059, 12837371529160496660}, + }, + { + {10790135298802805255, 7259368218310211690, 12050916808246223984, 2030323364779525994}, + {12824594050397534312, 4098150364864727064, 15604500991562385767, 2831443658783115116}, + }, + { + {6469454686530052235, 2594644969515545140, 5284951626835069400, 14441180041267617906}, + {16001664398759990060, 13049178223054879255, 3268931999230968043, 3072360434503949622}, + }, + { + {4565530397071857053, 857029374864691712, 15955478286869670604, 17781316921869181573}, + {16457191703043818907, 5989113593649065091, 4425872606756635499, 4532030700973621003}, + }, + }, + { + { + {2317249352525369754, 15030797481081533168, 12237590576308284360, 15660076992611440873}, + {11341015819700735887, 8280257602754365719, 9212501234696283343, 9673375202141178099}, + }, + { + {9762534010701623728, 15349113802811029024, 8305297169667044246, 18013018210154476198}, + {18414050009163335761, 2190126859433916996, 5444481274452218807, 13415988647365667724}, + }, + { + {11641532224340210206, 71261001011952801, 2321745415903209397, 6595984444855093239}, + {10341299657770272718, 11529878689049370930, 14381510695605158203, 6869272773579747365}, + }, + { + {1073778278665127828, 301289653767944933, 11482324780950168317, 10626716202328004967}, + {7258024014655363102, 12597648090458567878, 2617914106162603499, 12324652644266476584}, + }, + { + {13957732574177025801, 1100344278733481546, 12156946932617203965, 2007756425747006287}, + {16454508610548016441, 18058668363064769203, 15619001054652658323, 1201476243910931863}, + }, + { + {16341334571424533804, 4657494880554316004, 18092783076286521475, 19832895869027143}, + {8667365497283429486, 11501953273367138162, 5832487631687776985, 664754160781757174}, + }, + { + {13524719886605363170, 11553593166914861649, 12034020205580665813, 985175984881624722}, + {11040631342644137311, 12107496606245418129, 7328748654066365904, 14741972847454326011}, + }, + { + {12828567388121500364, 2264959796189127526, 6222205589523394088, 8827682270015065013}, + {2619170858745203321, 14835030117099398518, 5960028394532808010, 2233397097850889639}, + }, + { + {3879642723354138203, 5439355518658448857, 14194463322012776543, 14947367699252203702}, + {11497182458118153903, 16347396442451668378, 16912659817226286851, 6972297461053626970}, + }, + { + {14953681219966965709, 18116944572750863844, 16774540053916392198, 6518998682436778354}, + {11207035159486725904, 17279266785091386830, 15987732680339874714, 4953887381255790681}, + }, + { + {18128055290529398111, 4838636144867908799, 17655818333374840693, 5013823741985131317}, + {1920449774281311783, 13898340137609808546, 861099289958274037, 12441596565887895930}, + }, + { + {7244015348755525626, 13520825180887535513, 9165067445392785660, 9250553550156732893}, + {15663564389384259196, 5724018088820370997, 11379531752316746866, 17687565409319417941}, + }, + { + {11050714794366707475, 12230144450501707996, 12363862313107363407, 6348205119671766380}, + {14263471584626838352, 7350100163762375926, 1902788311165167298, 11691126042005505984}, + }, + { + {3948847772791576201, 11933738159609952054, 15749315384347059669, 8831922078851474178}, + {8463496071867925621, 12756218686011120865, 4691766390469398064, 5252134452066688477}, + }, + { + {4880806069791899809, 11099088460364672063, 12627384861893315861, 4239079797011518662}, + {14560690935803003234, 15267325636353169132, 16919582304973803583, 10073876067858458517}, + }, + }, + { + { + {15695265447782578013, 15506558718447241194, 12341861439298989232, 18400958156300100845}, + {13704811286967591150, 5802260047239067846, 3266013253411255445, 9892957742319181954}, + }, + { + {6053458788987550519, 3243549259991905443, 17990025476026266205, 3918149716414968130}, + {562225565996136148, 12175287017902713154, 16317970834262634990, 5431198806775607012}, + }, + { + {15123186170178367264, 3054913246068400920, 8130663466272395280, 2852812622149318730}, + {6747630551931917110, 18302049774259156971, 3663865061939346221, 12340091610704678811}, + }, + { + {17453312277789785069, 1148609799196055657, 5931758962926317381, 5297597381576544508}, + {9136842287749269744, 3007653173299649609, 12364677607049679091, 3656932227466449489}, + }, + { + {17732801126130995365, 16093023291975796560, 17028512234142609413, 6293028118993952199}, + {4019599708379609715, 3557632583507755601, 16737140015288442165, 7041678499288317736}, + }, + { + {5187842645752673199, 14914432544387315508, 4944360914161982641, 4177329533692612281}, + {18423887817846407126, 11935898134550505219, 9191754399457615042, 962223885189306707}, + }, + { + {5467152559317256227, 13407023128339380091, 656806207084558176, 10823228592509573890}, + {282802378108427873, 13003319652664166176, 11501612671901244594, 8595770155487539951}, + }, + { + {1805255869285898834, 11676967700876044626, 3486630203654875772, 8366336693945605431}, + {17874084888474647879, 8803709150655606891, 680993178667234696, 1603785777136148315}, + }, + { + {3637712241808318043, 1673622542455477465, 14468899013751477571, 6607241816357171779}, + {2332200248940843815, 14077155355848738174, 17298155509321457563, 13624623885136011130}, + }, + { + {12550073596584561722, 13898852145577133829, 31360866049197404, 12629522544897401454}, + {4563446134761510332, 7272813487383198495, 16767195814334178362, 13600498026689482359}, + }, + { + {5170414136067325373, 10875290278133558518, 7331268231382198947, 4082234313337835514}, + {11725295114019619895, 6488017511603508543, 11399466652931338200, 2898113599278666684}, + }, + { + {7553418756944942759, 2324485560009697358, 16004009784734101843, 8345371056076551939}, + {7377284629098981027, 11049718262343754276, 8021605820736410979, 8175349759714152494}, + }, + { + {805625092558946929, 11996029844853502332, 1725029464967101849, 8189609560660709539}, + {10396089572662865065, 1756007811373736605, 7645529329516777410, 2608132938055260111}, + }, + { + {17014595621244604813, 1574499958190108567, 8684546755761322906, 9997538531915911005}, + {5652402150243592363, 6315865356369667235, 8687115108443972047, 12369176255146729475}, + }, + { + {5117004045853299762, 2238407612548002914, 12392667457861900490, 10614312910576266709}, + {6446577503758597410, 3767883614425995197, 17954966454260719539, 5233322901463099}, + }, + }, + { + { + {1081257522368061155, 16144982029632101790, 2280210790959566458, 5000326950136078873}, + {10441086845859171982, 5717080014740953823, 16816253740467637151, 5185838557034755093}, + }, + { + {3897734650128449985, 3892478283047854402, 153850176068596076, 4448963435449755938}, + {9911011406822436713, 6379744721342779297, 360324666931028426, 8002086405015565067}, + }, + { + {13662666854424521459, 17028614494600252018, 13372166182804100759, 8978661571842967509}, + {1689945315009228820, 9997133634912151808, 4070075534875432478, 5780712439158341418}, + }, + { + {18068291112584812890, 10288580446655316879, 16866690514199445805, 15458664010538199871}, + {17175925202246173890, 12208778610361755998, 927739404697616036, 10330183209424493139}, + }, + { + {4422872630455196261, 14815650254807917367, 9426346157598724768, 17764302665164113296}, + {9474027272970951461, 3048886202121388617, 7073604597785890399, 9516006646305083675}, + }, + { + {16541317581647968302, 7221753201217091047, 554497992080233562, 12743131795939254731}, + {6113032707000257613, 4448176364247161206, 738044254484725063, 3096942233684051465}, + }, + { + {2801392933730991479, 15502003900939246745, 11340323610824656109, 13690394827169426680}, + {2298413291804124677, 12243772219106809119, 9550327342593445260, 18354548835264437008}, + }, + { + {17095781462759061506, 13984950766342782369, 7038608479806172868, 7073471193601880894}, + {9212126909381119712, 15865851343492198107, 3874039137971369196, 15366505242302572319}, + }, + { + {10476508037395688256, 5905562397524931472, 15147896444621280595, 3856601647293477321}, + {4204909177546012159, 17515684210872904454, 12561834979880779760, 6477848309789627185}, + }, + { + {3226022509034031128, 5771385963704757771, 17861700165696478115, 14976034400726774156}, + {17945959497662269352, 6322288130414861016, 3008853024335853994, 5599925939427067989}, + }, + { + {15408448007738805625, 3855259080280453396, 11776434265478354726, 11784885919111239520}, + {8108981861486003291, 16553896039002150783, 5694423121092647200, 16414563259092889693}, + }, + { + {3235058267792568155, 8030551941244615429, 12851363585510555514, 9786973022560471711}, + {4901414898060251968, 13240438628487941170, 4707852389766057435, 6503805666511566831}, + }, + { + {1178073204986944698, 10685133932326477495, 11710162005310407793, 11019188929725710305}, + {16244991946372165706, 3272168887117805467, 15045747299972144833, 8155681972478369649}, + }, + { + {12308450869393289693, 14268794937571237354, 9141189178824378983, 11605207657904000518}, + {17071770108549330148, 11045960524457021256, 13807710432855107212, 8427718050873363613}, + }, + { + {16762196363426636910, 7316863360113205703, 7937998445095491508, 3946557199536080470}, + {16019910399697645039, 11522845950519380293, 2362453023191035102, 6547077716792082654}, + }, + }, + { + { + {5218985848865375996, 5835476376320976237, 9096499658845542933, 8952489298840360492}, + {16605895184424459659, 505731104315931813, 17784248872812610986, 4151555707609374291}, + }, + { + {4963953120977916566, 6585250545846301109, 4490972754776862709, 10674499592300479120}, + {17494988318349821345, 1814042777264686189, 8938395423478059768, 9062966010283426056}, + }, + { + {3879469818714011415, 11493820457829716643, 10091807027724827301, 5032134849078736052}, + {18015749204009276046, 9667758283246223357, 4629693773460610802, 3807196436109718946}, + }, + { + {5724217930909760221, 15420221591912350415, 9910465013739250802, 12511683773790779491}, + {2841532862707547306, 16614426471009646589, 407574220261191228, 17422057170120224031}, + }, + { + {3725101809714764432, 2995111022132376824, 9338883729618021504, 8824923738291347476}, + {3745497072215538317, 3576446898425965872, 2350077748663612773, 15793255155885543355}, + }, + { + {12904339001067417585, 1972265247859388742, 8908590936681392405, 10320719400504224158}, + {8298368064038407143, 2105745729886511647, 16509751074757847095, 15156289751671616565}, + }, + { + {885617946245226760, 17871561572095909264, 16413308527330544768, 2938750343525834336}, + {6332736376778563648, 16772687696658236231, 9760470695949399178, 17420556823805232882}, + }, + { + {4407657041250297528, 13832960959347315977, 15056546959967740939, 4350443362134191429}, + {8013419913016572733, 8888684099801298477, 15401479253620745715, 18279947201669400847}, + }, + { + {16774767206504477529, 15784248755460218800, 890363416232172440, 6798249980336291014}, + {1295939576916968887, 14501516576359061383, 5181286196215569291, 8884842683907072200}, + }, + { + {12906144535917740163, 4179201185048577793, 8949647323841299627, 2168773816567792706}, + {1715683170634778607, 9901501903322086192, 7624633731287546358, 10530124063631858009}, + }, + { + {14199956317346734484, 13250211595320054421, 18197952479293091552, 16161313407818957084}, + {17435507292968186894, 6560268436714668609, 1299607057816966726, 8157462320016248727}, + }, + { + {3603583288706717651, 17387128326071547512, 17907604816622771553, 17853094381965037384}, + {12273843852205811233, 13840584476006398280, 2018654168596055410, 11549248055135584644}, + }, + { + {4742377140579111706, 845465928037625085, 12028953960657292824, 16438644767032965255}, + {17377088622232632294, 1631558517096568450, 11363064014018667511, 6006029335296807862}, + }, + { + {8877393780281438935, 9848923171251074575, 1554975198005028643, 2251034043951525516}, + {9696558687758873050, 3889942916226212472, 8326933892612496812, 7463785348361544799}, + }, + { + {4205364996189816688, 5453611962777060261, 16993840011943171053, 11689161310506207011}, + {16699173739044458906, 6254168288000491517, 12642281218300963313, 10028950653175051753}, + }, + }, + { + { + {8784043285714375740, 8483257759279461889, 8789745728267363600, 1770019616739251654}, + {15992936863339206154, 10037038012062884956, 15197544864945402661, 9615747158586711429}, + }, + { + {9583737883674400333, 12279877754802111101, 8296198976379850969, 17778859909846088251}, + {3401986641240187301, 1525831644595056632, 1849003687033449918, 8702493044913179195}, + }, + { + {18423170064697770279, 12693387071620743675, 7398701556189346968, 2779682216903406718}, + {12703629940499916779, 6358598532389273114, 8683512038509439374, 15415938252666293255}, + }, + { + {8408419572923862476, 5066733120953500019, 926242532005776114, 6301489109130024811}, + {3285079390283344806, 1685054835664548935, 7740622190510199342, 9561507292862134371}, + }, + { + {13698695174800826869, 10442832251048252285, 10672604962207744524, 14485711676978308040}, + {16947216143812808464, 8342189264337602603, 3837253281927274344, 8331789856935110934}, + }, + { + {4627808394696681034, 6174000022702321214, 15351247319787348909, 1371147458593240691}, + {10651965436787680331, 2998319090323362997, 17592419471314886417, 11874181791118522207}, + }, + { + {524165018444839759, 3157588572894920951, 17599692088379947784, 1421537803477597699}, + {2902517390503550285, 7440776657136679901, 17263207614729765269, 16928425260420958311}, + }, + { + {2878166099891431311, 5056053391262430293, 10345032411278802027, 13214556496570163981}, + {17698482058276194679, 2441850938900527637, 1314061001345252336, 6263402014353842038}, + }, + { + {8487436533858443496, 12386798851261442113, 3224748875345095424, 16166568617729909099}, + {2213369110503306004, 6246347469485852131, 3129440554298978074, 605269941184323483}, + }, + { + {3177531230451277512, 11022989490494865721, 8321856985295555401, 14727273563873821327}, + {876865438755954294, 14139765236890058248, 6880705719513638354, 8678887646434118325}, + }, + { + {16896703203004244996, 11377226897030111200, 2302364246994590389, 4499255394192625779}, + {1906858144627445384, 2670515414718439880, 868537809054295101, 7535366755622172814}, + }, + { + {339769604981749608, 12384581172556225075, 2596838235904096350, 5684069910326796630}, + {913125548148611907, 1661497269948077623, 2892028918424825190, 9220412792897768138}, + }, + { + {14754959387565938441, 1023838193204581133, 13599978343236540433, 8323909593307920217}, + {3852032956982813055, 7526785533690696419, 8993798556223495105, 18140648187477079959}, + }, + { + {11692087196810962506, 1328079167955601379, 1664008958165329504, 18063501818261063470}, + {2861243404839114859, 13702578580056324034, 16781565866279299035, 1524194541633674171}, + }, + { + {8267721299596412251, 273633183929630283, 17164190306640434032, 16332882679719778825}, + {4663567915067622493, 15521151801790569253, 7273215397645141911, 2324445691280731636}, + }, + }, + } +} diff --git a/core/crypto/_weierstrass/tools/ecc_gen_tables.odin b/core/crypto/_weierstrass/tools/ecc_gen_tables.odin new file mode 100644 index 000000000..e69927a90 --- /dev/null +++ b/core/crypto/_weierstrass/tools/ecc_gen_tables.odin @@ -0,0 +1,99 @@ +package weistrass_tools + +import secec "core:crypto/_weierstrass" +import "core:fmt" +import path "core:path/filepath" +import "core:os" +import "core:strings" + +// Yes this leaks memory, fite me IRL. + +GENERATED :: `/* + ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ +*/` + +main :: proc() { + gen_p256r1_tables() +} + +gen_p256r1_tables :: proc() { + Affine_Point_p256r1 :: struct { + x: secec.Field_Element_p256r1, + y: secec.Field_Element_p256r1, + } + Multiply_Table_p256r1_hi: [32][15]Affine_Point_p256r1 + Multiply_Table_p256r1_lo: [32][15]Affine_Point_p256r1 + + g, p: secec.Point_p256r1 + secec.pt_generator(&g) + + // Precompute ([1,15] << n) * G multiples of G, MSB->LSB + for i in 0..<32 { + b: [32]byte + for j in 1..<16 { + b[i] = u8(j) << 4 + secec.pt_scalar_mul_bytes(&p, &g, b[:], true) + secec.pt_rescale(&p, &p) + secec.fe_set(&Multiply_Table_p256r1_hi[i][j-1].x, &p.x) + secec.fe_set(&Multiply_Table_p256r1_hi[i][j-1].y, &p.y) + + b[i] = u8(j) + secec.pt_scalar_mul_bytes(&p, &g, b[:], true) + secec.pt_rescale(&p, &p) + secec.fe_set(&Multiply_Table_p256r1_lo[i][j-1].x, &p.x) + secec.fe_set(&Multiply_Table_p256r1_lo[i][j-1].y, &p.y) + + b[i] = 0 + } + } + + fn := path.join({ODIN_ROOT, "core", "crypto", "_weierstrass", "secp256r1_table.odin"}) + bld: strings.Builder + w := strings.to_writer(&bld) + + fmt.wprintln(w, "package _weierstrass") + fmt.wprintln(w, "") + fmt.wprintln(w, GENERATED) + fmt.wprintln(w, "") + fmt.wprintln(w, "import \"core:crypto\"") + fmt.wprintln(w, "") + fmt.wprintln(w, "when crypto.COMPACT_IMPLS == false {") + + fmt.wprintln(w, "\t@(private,rodata)") + fmt.wprintln(w, "\tGen_Multiply_Table_p256r1_hi := [32][15]Affine_Point_p256r1 {") + for &v, i in Multiply_Table_p256r1_hi { + fmt.wprintln(w, "\t\t{") + for &ap, j in v { + fmt.wprintln(w, "\t\t\t{") + + x, y := &ap.x, &ap.y + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", x[0], x[1], x[2], x[3]) + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", y[0], y[1], y[2], y[3]) + + fmt.wprintln(w, "\t\t\t},") + } + fmt.wprintln(w, "\t\t},") + } + fmt.wprintln(w, "\t}\n") + + fmt.wprintln(w, "\t@(private,rodata)") + fmt.wprintln(w, "\tGen_Multiply_Table_p256r1_lo := [32][15]Affine_Point_p256r1 {") + for &v, i in Multiply_Table_p256r1_lo { + fmt.wprintln(w, "\t\t{") + for &ap, j in v { + fmt.wprintln(w, "\t\t\t{") + + x, y := &ap.x, &ap.y + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", x[0], x[1], x[2], x[3]) + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d},\n", y[0], y[1], y[2], y[3]) + + fmt.wprintln(w, "\t\t\t},") + } + fmt.wprintln(w, "\t\t},") + } + fmt.wprintln(w, "\t}") + + fmt.wprintln(w, "}") + + _ = os.write_entire_file(fn, transmute([]byte)(strings.to_string(bld))) +} diff --git a/core/crypto/crypto.odin b/core/crypto/crypto.odin index 435c5daaf..3fb369a54 100644 --- a/core/crypto/crypto.odin +++ b/core/crypto/crypto.odin @@ -5,6 +5,9 @@ import "base:runtime" import subtle "core:crypto/_subtle" import "core:mem" +// Omit large precomputed tables, trading off performance for size. +COMPACT_IMPLS: bool : #config(ODIN_CRYPTO_COMPACT, false) + // HAS_RAND_BYTES is true iff the runtime provides a cryptographic // entropy source. HAS_RAND_BYTES :: runtime.HAS_RAND_BYTES diff --git a/tests/core/crypto/test_core_crypto_weierstrass.odin b/tests/core/crypto/test_core_crypto_weierstrass.odin new file mode 100644 index 000000000..206e98bd7 --- /dev/null +++ b/tests/core/crypto/test_core_crypto_weierstrass.odin @@ -0,0 +1,486 @@ +package test_core_crypto + +import ec "core:crypto/_weierstrass" +import "core:encoding/hex" +import "core:math/big" +import "core:testing" + +@(private="file") +P256_G_X :: "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296" +@(private="file") +P256_G_Y :: "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + +@(private="file") +P256_G_UNCOMPRESSED :: "04" + P256_G_X + P256_G_Y + +@(test) +test_p256_a :: proc(t: ^testing.T) { + a_str := "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc" + + fe, a_fe: ec.Field_Element_p256r1 + ec.fe_a(&fe) + ec.fe_a(&a_fe) + + b: [32]byte + ec.fe_bytes(b[:], &fe) + + s := (string)(hex.encode(b[:], context.temp_allocator)) + + testing.expect(t, s == a_str) + + ec.fe_zero(&fe) + ec.fe_set_bytes(&fe, b[:]) + + testing.expect(t, ec.fe_equal(&fe, &a_fe) == 1) +} + +@(test) +test_p256_b :: proc(t: ^testing.T) { + b_str := "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b" + + fe, b_fe: ec.Field_Element_p256r1 + ec.fe_b(&fe) + ec.fe_b(&b_fe) + + b: [32]byte + ec.fe_bytes(b[:], &fe) + + s := (string)(hex.encode(b[:], context.temp_allocator)) + + testing.expect(t, s == b_str) + + ec.fe_zero(&fe) + ec.fe_set_bytes(&fe, b[:]) + + testing.expect(t, ec.fe_equal(&fe, &b_fe) == 1) +} + +@(test) +test_p256_g_x :: proc(t: ^testing.T) { + fe, x_fe: ec.Field_Element_p256r1 + ec.fe_gen_x(&fe) + ec.fe_gen_x(&x_fe) + + b: [32]byte + ec.fe_bytes(b[:], &fe) + + s := (string)(hex.encode(b[:], context.temp_allocator)) + testing.expect(t, s == P256_G_X) + + ec.fe_zero(&fe) + ec.fe_set_bytes(&fe, b[:]) + + testing.expect(t, ec.fe_equal(&fe, &x_fe) == 1) +} + +@(test) +test_p256_g_y :: proc(t: ^testing.T) { + fe, y_fe: ec.Field_Element_p256r1 + ec.fe_gen_y(&fe) + ec.fe_gen_y(&y_fe) + + b: [32]byte + ec.fe_bytes(b[:], &fe) + + s := (string)(hex.encode(b[:], context.temp_allocator)) + testing.expect(t, s == P256_G_Y) + + ec.fe_zero(&fe) + ec.fe_set_bytes(&fe, b[:]) + + testing.expect(t, ec.fe_equal(&fe, &y_fe) == 1) +} + +@(test) +test_p256_scalar_reduce :: proc(t: ^testing.T) { + test_vectors := []struct { + raw: string, + reduced: string, + } { + // n + { + "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "0000000000000000000000000000000000000000000000000000000000000000", + }, + // n + 1 + { + "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "0000000000000000000000000000000000000000000000000000000000000001", + }, + // 2^384 (Sage) + { + "01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "431905529c0166ce652e96b7ccca0a99679b73e19ad16947f01cf013fc632551", + }, + // SHA384 odin-linux-amd64-dev-2026-01.tar.gz (Sage) + { + "87622f79b4b0e76001f9c99b0337b61a0bcd2b5a8e9a3937176825ad75ef0fe8742a348a251dd2682d711f76b33df3e6", + "f66db86e28d903033d1e17d818c0eb13fe3d1ae095b4d2ecbcd1a1eccf9f2f8c", + }, + // SHA512 odin-linux-amd64-dev-2026-01.tar.gz (Sage) + { + "6f85507cec3a35fdb3d4f40d23583681144561e77bc4ea88ab0ea219d5c17b7c9178f5f5a6296a2d18eddd4bdf19e61830fc85d7de23fd4fbde31c4cf6694719", + "3217ecbee32c8b0dfcca0f10a884fe43658fbe91458f25d0f1bf2075759c5ebe", + }, + } + + for v, _ in test_vectors { + raw_bytes, _ := hex.decode(transmute([]byte)(v.raw), context.temp_allocator) + + sc: ec.Scalar_p256r1 + _ = ec.sc_set_bytes(&sc, raw_bytes) + + b: [ec.SC_SIZE_P256R1]byte + ec.sc_bytes(b[:], &sc) + s := (string)(hex.encode(b[:], context.temp_allocator)) + + testing.expectf(t, v.reduced == s, "sc: raw %s reduced: %s, expected: %s", v.raw, s, v.reduced) + } +} + +@(test) +test_p256_scalar_mul :: proc(t: ^testing.T) { + test_vectors := []struct { + scalar: string, // NOTE: Base 10 + x, y: string, + } { + // Test vectors from http://point-at-infinity.org/ecc/nisttv + { + "1", + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", + "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", + + }, + { + "2", + "7CF27B188D034F7E8A52380304B51AC3C08969E277F21B35A60B48FC47669978", + "07775510DB8ED040293D9AC69F7430DBBA7DADE63CE982299E04B79D227873D1", + }, + { + "3", + "5ECBE4D1A6330A44C8F7EF951D4BF165E6C6B721EFADA985FB41661BC6E7FD6C", + "8734640C4998FF7E374B06CE1A64A2ECD82AB036384FB83D9A79B127A27D5032", + }, + { + "4", + "E2534A3532D08FBBA02DDE659EE62BD0031FE2DB785596EF509302446B030852", + "E0F1575A4C633CC719DFEE5FDA862D764EFC96C3F30EE0055C42C23F184ED8C6", + }, + { + "5", + "51590B7A515140D2D784C85608668FDFEF8C82FD1F5BE52421554A0DC3D033ED", + "E0C17DA8904A727D8AE1BF36BF8A79260D012F00D4D80888D1D0BB44FDA16DA4", + }, + { + "6", + "B01A172A76A4602C92D3242CB897DDE3024C740DEBB215B4C6B0AAE93C2291A9", + "E85C10743237DAD56FEC0E2DFBA703791C00F7701C7E16BDFD7C48538FC77FE2", + }, + { + "7", + "8E533B6FA0BF7B4625BB30667C01FB607EF9F8B8A80FEF5B300628703187B2A3", + "73EB1DBDE03318366D069F83A6F5900053C73633CB041B21C55E1A86C1F400B4", + }, + { + "8", + "62D9779DBEE9B0534042742D3AB54CADC1D238980FCE97DBB4DD9DC1DB6FB393", + "AD5ACCBD91E9D8244FF15D771167CEE0A2ED51F6BBE76A78DA540A6A0F09957E", + }, + { + "9", + "EA68D7B6FEDF0B71878938D51D71F8729E0ACB8C2C6DF8B3D79E8A4B90949EE0", + "2A2744C972C9FCE787014A964A8EA0C84D714FEAA4DE823FE85A224A4DD048FA", + }, + { + "10", + "CEF66D6B2A3A993E591214D1EA223FB545CA6C471C48306E4C36069404C5723F", + "878662A229AAAE906E123CDD9D3B4C10590DED29FE751EEECA34BBAA44AF0773", + }, + { + "11", + "3ED113B7883B4C590638379DB0C21CDA16742ED0255048BF433391D374BC21D1", + "9099209ACCC4C8A224C843AFA4F4C68A090D04DA5E9889DAE2F8EEFCE82A3740", + }, + { + "12", + "741DD5BDA817D95E4626537320E5D55179983028B2F82C99D500C5EE8624E3C4", + "0770B46A9C385FDC567383554887B1548EEB912C35BA5CA71995FF22CD4481D3", + }, + { + "13", + "177C837AE0AC495A61805DF2D85EE2FC792E284B65EAD58A98E15D9D46072C01", + "63BB58CD4EBEA558A24091ADB40F4E7226EE14C3A1FB4DF39C43BBE2EFC7BFD8", + }, + { + "14", + "54E77A001C3862B97A76647F4336DF3CF126ACBE7A069C5E5709277324D2920B", + "F599F1BB29F4317542121F8C05A2E7C37171EA77735090081BA7C82F60D0B375", + }, + { + "15", + "F0454DC6971ABAE7ADFB378999888265AE03AF92DE3A0EF163668C63E59B9D5F", + "B5B93EE3592E2D1F4E6594E51F9643E62A3B21CE75B5FA3F47E59CDE0D034F36", + }, + { + "16", + "76A94D138A6B41858B821C629836315FCD28392EFF6CA038A5EB4787E1277C6E", + "A985FE61341F260E6CB0A1B5E11E87208599A0040FC78BAA0E9DDD724B8C5110", + }, + { + "17", + "47776904C0F1CC3A9C0984B66F75301A5FA68678F0D64AF8BA1ABCE34738A73E", + "AA005EE6B5B957286231856577648E8381B2804428D5733F32F787FF71F1FCDC", + }, + { + "18", + "1057E0AB5780F470DEFC9378D1C7C87437BB4C6F9EA55C63D936266DBD781FDA", + "F6F1645A15CBE5DC9FA9B7DFD96EE5A7DCC11B5C5EF4F1F78D83B3393C6A45A2", + }, + { + "19", + "CB6D2861102C0C25CE39B7C17108C507782C452257884895C1FC7B74AB03ED83", + "58D7614B24D9EF515C35E7100D6D6CE4A496716E30FA3E03E39150752BCECDAA", + }, + { + "20", + "83A01A9378395BAB9BCD6A0AD03CC56D56E6B19250465A94A234DC4C6B28DA9A", + "76E49B6DE2F73234AE6A5EB9D612B75C9F2202BB6923F54FF8240AAA86F640B8", + }, + { + "112233445566778899", + "339150844EC15234807FE862A86BE77977DBFB3AE3D96F4C22795513AEAAB82F", + "B1C14DDFDC8EC1B2583F51E85A5EB3A155840F2034730E9B5ADA38B674336A21", + }, + { + "112233445566778899112233445566778899", + "1B7E046A076CC25E6D7FA5003F6729F665CC3241B5ADAB12B498CD32F2803264", + "BFEA79BE2B666B073DB69A2A241ADAB0738FE9D2DD28B5604EB8C8CF097C457B", + }, + { + "029852220098221261079183923314599206100666902414330245206392788703677545185283", + "9EACE8F4B071E677C5350B02F2BB2B384AAE89D58AA72CA97A170572E0FB222F", + "1BBDAEC2430B09B93F7CB08678636CE12EAAFD58390699B5FD2F6E1188FC2A78", + }, + { + "057896042899961394862005778464643882389978449576758748073725983489954366354431", + "878F22CC6DB6048D2B767268F22FFAD8E56AB8E2DC615F7BD89F1E350500DD8D", + "714A5D7BB901C9C5853400D12341A892EF45D87FC553786756C4F0C9391D763E", + }, + { + "57896042899961394862005778464643882389978449576758748073725983489954366354431", + "878F22CC6DB6048D2B767268F22FFAD8E56AB8E2DC615F7BD89F1E350500DD8D", + "714A5D7BB901C9C5853400D12341A892EF45D87FC553786756C4F0C9391D763E", + }, + { + "1766845392945710151501889105729049882997660004824848915955419660366636031", + "659A379625AB122F2512B8DADA02C6348D53B54452DFF67AC7ACE4E8856295CA", + "49D81AB97B648464D0B4A288BD7818FAB41A16426E943527C4FED8736C53D0F6", + }, + { + "28948025760307534517734791687894775804466072615242963443097661355606862201087", + "CBCEAAA8A4DD44BBCE58E8DB7740A5510EC2CB7EA8DA8D8F036B3FB04CDA4DE4", + "4BD7AA301A80D7F59FD983FEDBE59BB7B2863FE46494935E3745B360E32332FA", + }, + { + "113078210460870548944811695960290644973229224625838436424477095834645696384", + "F0C4A0576154FF3A33A3460D42EAED806E854DFA37125221D37935124BA462A4", + "5B392FA964434D29EEC6C9DBC261CF116796864AA2FAADB984A2DF38D1AEF7A3", + }, + { + "12078056106883488161242983286051341125085761470677906721917479268909056", + "5E6C8524B6369530B12C62D31EC53E0288173BD662BDF680B53A41ECBCAD00CC", + "447FE742C2BFEF4D0DB14B5B83A2682309B5618E0064A94804E9282179FE089F", + }, + { + "57782969857385448082319957860328652998540760998293976083718804450708503920639", + "03792E541BC209076A3D7920A915021ECD396A6EB5C3960024BE5575F3223484", + "FC774AE092403101563B712F68170312304F20C80B40C06282063DB25F268DE4", + }, + { + "57896017119460046759583662757090100341435943767777707906455551163257755533312", + "2379FF85AB693CDF901D6CE6F2473F39C04A2FE3DCD842CE7AAB0E002095BCF8", + "F8B476530A634589D5129E46F322B02FBC610A703D80875EE70D7CE1877436A1", + }, + { + "452312848374287284681282171017647412726433684238464212999305864837160993279", + "C1E4072C529BF2F44DA769EFC934472848003B3AF2C0F5AA8F8DDBD53E12ED7C", + "39A6EE77812BB37E8079CD01ED649D3830FCA46F718C1D3993E4A591824ABCDB", + }, + { + "904571339174065134293634407946054000774746055866917729876676367558469746684", + "34DFBC09404C21E250A9B40FA8772897AC63A094877DB65862B61BD1507B34F3", + "CF6F8A876C6F99CEAEC87148F18C7E1E0DA6E165FFC8ED82ABB65955215F77D3", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044349", + "83A01A9378395BAB9BCD6A0AD03CC56D56E6B19250465A94A234DC4C6B28DA9A", + "891B64911D08CDCC5195A14629ED48A360DDFD4596DC0AB007DBF5557909BF47", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044350", + "CB6D2861102C0C25CE39B7C17108C507782C452257884895C1FC7B74AB03ED83", + "A7289EB3DB2610AFA3CA18EFF292931B5B698E92CF05C1FC1C6EAF8AD4313255", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044351", + "1057E0AB5780F470DEFC9378D1C7C87437BB4C6F9EA55C63D936266DBD781FDA", + "090E9BA4EA341A246056482026911A58233EE4A4A10B0E08727C4CC6C395BA5D", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044352", + "47776904C0F1CC3A9C0984B66F75301A5FA68678F0D64AF8BA1ABCE34738A73E", + "55FFA1184A46A8D89DCE7A9A889B717C7E4D7FBCD72A8CC0CD0878008E0E0323", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044353", + "76A94D138A6B41858B821C629836315FCD28392EFF6CA038A5EB4787E1277C6E", + "567A019DCBE0D9F2934F5E4A1EE178DF7A665FFCF0387455F162228DB473AEEF", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044354", + "F0454DC6971ABAE7ADFB378999888265AE03AF92DE3A0EF163668C63E59B9D5F", + "4A46C11BA6D1D2E1B19A6B1AE069BC19D5C4DE328A4A05C0B81A6321F2FCB0C9", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044355", + "54E77A001C3862B97A76647F4336DF3CF126ACBE7A069C5E5709277324D2920B", + "0A660E43D60BCE8BBDEDE073FA5D183C8E8E15898CAF6FF7E45837D09F2F4C8A", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044356", + "177C837AE0AC495A61805DF2D85EE2FC792E284B65EAD58A98E15D9D46072C01", + "9C44A731B1415AA85DBF6E524BF0B18DD911EB3D5E04B20C63BC441D10384027", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044357", + "741DD5BDA817D95E4626537320E5D55179983028B2F82C99D500C5EE8624E3C4", + "F88F4B9463C7A024A98C7CAAB7784EAB71146ED4CA45A358E66A00DD32BB7E2C", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044358", + "3ED113B7883B4C590638379DB0C21CDA16742ED0255048BF433391D374BC21D1", + "6F66DF64333B375EDB37BC505B0B3975F6F2FB26A16776251D07110317D5C8BF", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044359", + "CEF66D6B2A3A993E591214D1EA223FB545CA6C471C48306E4C36069404C5723F", + "78799D5CD655517091EDC32262C4B3EFA6F212D7018AE11135CB4455BB50F88C", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044360", + "EA68D7B6FEDF0B71878938D51D71F8729E0ACB8C2C6DF8B3D79E8A4B90949EE0", + "D5D8BB358D36031978FEB569B5715F37B28EB0165B217DC017A5DDB5B22FB705", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044361", + "62D9779DBEE9B0534042742D3AB54CADC1D238980FCE97DBB4DD9DC1DB6FB393", + "52A533416E1627DCB00EA288EE98311F5D12AE0A4418958725ABF595F0F66A81", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044362", + "8E533B6FA0BF7B4625BB30667C01FB607EF9F8B8A80FEF5B300628703187B2A3", + "8C14E2411FCCE7CA92F9607C590A6FFFAC38C9CD34FBE4DE3AA1E5793E0BFF4B", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044363", + "B01A172A76A4602C92D3242CB897DDE3024C740DEBB215B4C6B0AAE93C2291A9", + "17A3EF8ACDC8252B9013F1D20458FC86E3FF0890E381E9420283B7AC7038801D", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044364", + "51590B7A515140D2D784C85608668FDFEF8C82FD1F5BE52421554A0DC3D033ED", + "1F3E82566FB58D83751E40C9407586D9F2FED1002B27F7772E2F44BB025E925B", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044365", + "E2534A3532D08FBBA02DDE659EE62BD0031FE2DB785596EF509302446B030852", + "1F0EA8A4B39CC339E62011A02579D289B103693D0CF11FFAA3BD3DC0E7B12739", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044366", + "5ECBE4D1A6330A44C8F7EF951D4BF165E6C6B721EFADA985FB41661BC6E7FD6C", + "78CB9BF2B6670082C8B4F931E59B5D1327D54FCAC7B047C265864ED85D82AFCD", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044367", + "7CF27B188D034F7E8A52380304B51AC3C08969E277F21B35A60B48FC47669978", + "F888AAEE24712FC0D6C26539608BCF244582521AC3167DD661FB4862DD878C2E", + }, + { + "115792089210356248762697446949407573529996955224135760342422259061068512044368", + "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", + "B01CBD1C01E58065711814B583F061E9D431CCA994CEA1313449BF97C840AE0A", + }, + } + + for v, _ in test_vectors { + x_bytes, _ := hex.decode(transmute([]byte)(v.x), context.temp_allocator) + y_bytes, _ := hex.decode(transmute([]byte)(v.y), context.temp_allocator) + + k_big: big.Int + err := big.set(&k_big, v.scalar, 10, context.temp_allocator) + testing.expectf(t, err == nil, "failed to parse k", err) + + k_sz: int + k_sz, err = big.int_to_bytes_size(&k_big, allocator = context.temp_allocator) + testing.expect(t, err == nil) + + k_bytes := make([]byte, k_sz, context.temp_allocator) + err = big.int_to_bytes_big(&k_big, k_bytes, allocator = context.temp_allocator) + + p, q, expected, g: ec.Point_p256r1 + sc: ec.Scalar_p256r1 + + _ = ec.sc_set_bytes(&sc, k_bytes) + + ec.pt_generator(&g) + ok := ec.pt_set_xy_bytes(&expected, x_bytes, y_bytes) + testing.expectf(t, ok, "failed to set point; %s, %s", v.x, v.y) + + ec.pt_scalar_mul(&p, &g, &sc) + ec.pt_scalar_mul_generator(&q, &sc) + ec.pt_rescale(&p, &p) + ec.pt_rescale(&q, &q) + + testing.expect(t, ec.pt_equal(&p, &q) == 1) + testing.expectf(t, ec.pt_equal(&p, &expected) == 1, "sc: %s actual: %v expected: %v", v.scalar, &p, &expected) + } +} + +@(test) +test_p256_s11n_sec_identity ::proc(t: ^testing.T) { + p: ec.Point_p256r1 + + ec.pt_generator(&p) + ok := ec.pt_set_sec_bytes(&p, []byte{0x00}) + testing.expect(t, ok) + testing.expectf(t, ec.pt_is_identity(&p) == 1, "%v", p) + + b := []byte{0xff} + ok = ec.pt_sec_bytes(b, &p, true) + testing.expect(t, ok) + testing.expect(t, b[0] == 0x00) + + b = []byte{0xff} + ok = ec.pt_sec_bytes(b, &p, false) + testing.expect(t, ok) + testing.expect(t, b[0] == 0x00) +} + +@(test) +test_p256_s11n_sec_generator ::proc(t: ^testing.T) { + p, g: ec.Point_p256r1 + + ec.pt_generator(&g) + ec.pt_identity(&p) + + b: [65]byte + ok := ec.pt_sec_bytes(b[:], &g, false) + testing.expect(t, ok) + s := (string)(hex.encode(b[:], context.temp_allocator)) + testing.expectf(t, s == P256_G_UNCOMPRESSED, "g: %v bytes: %v, %v", g, P256_G_UNCOMPRESSED, s) + + ok = ec.pt_set_sec_bytes(&p, b[:]) + testing.expectf(t, ok, "%s", s) + testing.expect(t, ec.pt_equal(&g, &p) == 1) +} From c35b49bf6050ecdc456d3482ff0037067e640f7d Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Sat, 3 Jan 2026 23:42:06 +0900 Subject: [PATCH 202/212] core/crypto/ecdh: Initial import --- core/crypto/ecdh/doc.odin | 4 + core/crypto/ecdh/ecdh.odin | 404 ++++++++++++++++++ examples/all/all_js.odin | 1 + examples/all/all_main.odin | 1 + tests/benchmark/crypto/benchmark_ecc.odin | 87 ++-- tests/core/crypto/test_core_crypto_ecdh.odin | 154 +++++++ .../core/crypto/test_core_crypto_edwards.odin | 124 ------ 7 files changed, 597 insertions(+), 178 deletions(-) create mode 100644 core/crypto/ecdh/doc.odin create mode 100644 core/crypto/ecdh/ecdh.odin create mode 100644 tests/core/crypto/test_core_crypto_ecdh.odin diff --git a/core/crypto/ecdh/doc.odin b/core/crypto/ecdh/doc.odin new file mode 100644 index 000000000..e34f255f2 --- /dev/null +++ b/core/crypto/ecdh/doc.odin @@ -0,0 +1,4 @@ +/* +A generic interface to Elliptic Curve Diffie-Hellman key exchange. +*/ +package ecdh diff --git a/core/crypto/ecdh/ecdh.odin b/core/crypto/ecdh/ecdh.odin new file mode 100644 index 000000000..3e97ebdc7 --- /dev/null +++ b/core/crypto/ecdh/ecdh.odin @@ -0,0 +1,404 @@ +package ecdh + +import "core:crypto" +import secec "core:crypto/_weierstrass" +import "core:crypto/x25519" +import "core:crypto/x448" +import "core:mem" +import "core:reflect" + +// Note: For these primitives scalar size = point size +@(private="file") +X25519_Buf :: [x25519.SCALAR_SIZE]byte +@(private="file") +X448_Buf :: [x448.SCALAR_SIZE]byte + +// Curve the curve identifier associated with a given Private_Key +// or Public_Key +Curve :: enum { + Invalid, + SECP256R1, + X25519, + X448, +} + +// CURVE_NAMES is the Curve to curve name string. +CURVE_NAMES := [Curve]string { + .Invalid = "Invalid", + .SECP256R1 = "secp256r1", + .X25519 = "X25519", + .X448 = "X448", +} + +// PRIVATE_KEY_SIZES is the Curve to private key size in bytes. +PRIVATE_KEY_SIZES := [Curve]int { + .Invalid = 0, + .SECP256R1 = secec.SC_SIZE_P256R1, + .X25519 = x25519.SCALAR_SIZE, + .X448 = x448.SCALAR_SIZE, +} + +// PUBLIC_KEY_SIZES is the Curve to public key size in bytes. +PUBLIC_KEY_SIZES := [Curve]int { + .Invalid = 0, + .SECP256R1 = 1 + 2 * secec.FE_SIZE_P256R1, + .X25519 = x25519.POINT_SIZE, + .X448 = x448.POINT_SIZE, +} + +// SHARED_SECRET_SIZES is the Curve to shared secret size in bytes. +SHARED_SECRET_SIZES := [Curve]int { + .Invalid = 0, + .SECP256R1 = secec.FE_SIZE_P256R1, + .X25519 = x25519.POINT_SIZE, + .X448 = x448.POINT_SIZE, +} + +@(private="file") +_PRIV_IMPL_IDS := [Curve]typeid { + .Invalid = nil, + .SECP256R1 = typeid_of(secec.Scalar_p256r1), + .X25519 = typeid_of(X25519_Buf), + .X448 = typeid_of(X448_Buf), +} + +@(private="file") +_PUB_IMPL_IDS := [Curve]typeid { + .Invalid = nil, + .SECP256R1 = typeid_of(secec.Point_p256r1), + .X25519 = typeid_of(X25519_Buf), + .X448 = typeid_of(X448_Buf), +} + +// Private_Key is an ECDH private key. +Private_Key :: struct { + // WARNING: All of the members are to be treated as internal (ie: + // the Private_Key structure is intended to be opaque). + _curve: Curve, + _impl: union { + secec.Scalar_p256r1, + X25519_Buf, + X448_Buf, + }, + _pub_key: Public_Key, +} + +// Public_Key is an ECDH public key. +Public_Key :: struct { + // WARNING: All of the members are to be treated as internal (ie: + // the Public_Key structure is intended to be opaque). + _curve: Curve, + _impl: union { + secec.Point_p256r1, + X25519_Buf, + X448_Buf, + }, +} + +// private_key_generate uses the system entropy source to generate a new +// Private_Key. This will only fail iff the system entropy source is +// missing or broken. +private_key_generate :: proc(priv_key: ^Private_Key, curve: Curve) -> bool { + private_key_clear(priv_key) + + if !crypto.HAS_RAND_BYTES { + return false + } + + reflect.set_union_variant_typeid( + priv_key._impl, + _PRIV_IMPL_IDS[curve], + ) + + #partial switch curve { + case .SECP256R1: + sc := &priv_key._impl.(secec.Scalar_p256r1) + + // 384-bits reduced makes the modulo bias insignificant + b: [48]byte = --- + defer (mem.zero_explicit(&b, size_of(b))) + for { + crypto.rand_bytes(b[:]) + _ = secec.sc_set_bytes(sc, b[:]) + if secec.sc_is_zero(sc) == 0 { // Likely + break + } + } + case .X25519: + sc := &priv_key._impl.(X25519_Buf) + crypto.rand_bytes(sc[:]) + case .X448: + sc := &priv_key._impl.(X448_Buf) + crypto.rand_bytes(sc[:]) + case: + panic("crypto/ecdh: invalid curve") + } + + priv_key._curve = curve + private_key_generate_public(priv_key) + + return true +} + +// private_key_set_bytes decodes a byte-encoded private key, and returns +// true iff the operation was successful. +private_key_set_bytes :: proc(priv_key: ^Private_Key, curve: Curve, b: []byte) -> bool { + private_key_clear(priv_key) + + if len(b) != PRIVATE_KEY_SIZES[curve] { + return false + } + + reflect.set_union_variant_typeid( + priv_key._impl, + _PRIV_IMPL_IDS[curve], + ) + + #partial switch curve { + case .SECP256R1: + sc := &priv_key._impl.(secec.Scalar_p256r1) + did_reduce := secec.sc_set_bytes(sc, b) + is_zero := secec.sc_is_zero(sc) == 1 + + // Reject `0` and scalars that are not less than the + // curve order. + if did_reduce || is_zero { + private_key_clear(priv_key) + return false + } + case .X25519: + sc := &priv_key._impl.(X25519_Buf) + copy(sc[:], b) + case .X448: + sc := &priv_key._impl.(X448_Buf) + copy(sc[:], b) + case: + panic("crypto/ecdh: invalid curve") + } + + priv_key._curve = curve + private_key_generate_public(priv_key) + + return true +} + +@(private="file") +private_key_generate_public :: proc(priv_key: ^Private_Key) { + switch &sc in priv_key._impl { + case secec.Scalar_p256r1: + pub_key: secec.Point_p256r1 = --- + secec.pt_scalar_mul_generator(&pub_key, &sc) + secec.pt_rescale(&pub_key, &pub_key) + priv_key._pub_key._impl = pub_key + case X25519_Buf: + pub_key: X25519_Buf = --- + x25519.scalarmult_basepoint(pub_key[:], sc[:]) + priv_key._pub_key._impl = pub_key + case X448_Buf: + pub_key: X448_Buf = --- + x448.scalarmult_basepoint(pub_key[:], sc[:]) + priv_key._pub_key._impl = pub_key + case: + panic("crypto/ecdh: invalid curve") + } + + priv_key._pub_key._curve = priv_key._curve +} + +// private_key_bytes sets dst to byte-encoding of priv_key. +private_key_bytes :: proc(priv_key: ^Private_Key, dst: []byte) { + ensure(priv_key._curve != .Invalid, "crypto/ecdh: uninitialized private key") + ensure(len(dst) == PRIVATE_KEY_SIZES[priv_key._curve], "crypto/ecdh: invalid destination size") + + #partial switch priv_key._curve { + case .SECP256R1: + sc := &priv_key._impl.(secec.Scalar_p256r1) + secec.sc_bytes(dst, sc) + case .X25519: + sc := &priv_key._impl.(X25519_Buf) + copy(dst, sc[:]) + case .X448: + sc := &priv_key._impl.(X448_Buf) + copy(dst, sc[:]) + case: + panic("crypto/ecdh: invalid curve") + } +} + +// private_key_equal returns true iff the private keys are equal, +// in constant time. +private_key_equal :: proc(p, q: ^Private_Key) -> bool { + if p._curve != q._curve { + return false + } + + #partial switch p._curve { + case .SECP256R1: + sc_p, sc_q := &p._impl.(secec.Scalar_p256r1), &q._impl.(secec.Scalar_p256r1) + return secec.sc_equal(sc_p, sc_q) == 1 + case .X25519: + b_p, b_q := &p._impl.(X25519_Buf), &q._impl.(X25519_Buf) + return crypto.compare_constant_time(b_p[:], b_q[:]) == 1 + case .X448: + b_p, b_q := &p._impl.(X448_Buf), &q._impl.(X448_Buf) + return crypto.compare_constant_time(b_p[:], b_q[:]) == 1 + case: + return false + } +} + +// private_key_clear clears priv_key to the uninitialized state. +private_key_clear :: proc "contextless" (priv_key: ^Private_Key) { + mem.zero_explicit(priv_key, size_of(Private_Key)) +} + +// public_key_set_bytes decodes a byte-encoded public key, and returns +// true iff the operation was successful. +public_key_set_bytes :: proc(pub_key: ^Public_Key, curve: Curve, b: []byte) -> bool { + public_key_clear(pub_key) + + if len(b) != PUBLIC_KEY_SIZES[curve] { + return false + } + + reflect.set_union_variant_typeid( + pub_key._impl, + _PUB_IMPL_IDS[curve], + ) + + #partial switch curve { + case .SECP256R1: + if b[0] != secec.SEC_PREFIX_UNCOMPRESSED { + return false + } + + pt := &pub_key._impl.(secec.Point_p256r1) + ok := secec.pt_set_sec_bytes(pt, b) + if !ok || secec.pt_is_identity(pt) == 1 { + return false + } + case .X25519: + pt := &pub_key._impl.(X25519_Buf) + copy(pt[:], b) + case .X448: + pt := &pub_key._impl.(X448_Buf) + copy(pt[:], b) + case: + panic("crypto/ecdh: invalid curve") + } + + pub_key._curve = curve + + return true +} + +// public_key_set_priv sets pub_key to the public component of priv_key. +public_key_set_priv :: proc(pub_key: ^Public_Key, priv_key: ^Private_Key) { + ensure(priv_key._curve != .Invalid, "crypto/ecdh: uninitialized private key") + public_key_clear(pub_key) + pub_key^ = priv_key._pub_key +} + +// public_key_bytes sets dst to byte-encoding of pub_key. +public_key_bytes :: proc(pub_key: ^Public_Key, dst: []byte) { + ensure(pub_key._curve != .Invalid, "crypto/ecdh: uninitialized public key") + ensure(len(dst) == PUBLIC_KEY_SIZES[pub_key._curve], "crypto/ecdh: invalid destination size") + + #partial switch pub_key._curve { + case .SECP256R1: + // Invariant: Unless the caller is manually building pub_key + // `Z = 1`, so we can skip the rescale. + pt := &pub_key._impl.(secec.Point_p256r1) + + dst[0] = secec.SEC_PREFIX_UNCOMPRESSED + secec.fe_bytes(dst[1:1+secec.FE_SIZE_P256R1], &pt.x) + secec.fe_bytes(dst[1+secec.FE_SIZE_P256R1:], &pt.y) + case .X25519: + pt := &pub_key._impl.(X25519_Buf) + copy(dst, pt[:]) + case .X448: + pt := &pub_key._impl.(X448_Buf) + copy(dst, pt[:]) + case: + panic("crypto/ecdh: invalid curve") + } +} + +// public_key_equal returns true iff the public keys are equal, +// in constant time. +public_key_equal :: proc(p, q: ^Public_Key) -> bool { + if p._curve != q._curve { + return false + } + + #partial switch p._curve { + case .SECP256R1: + pt_p, pt_q := &p._impl.(secec.Point_p256r1), &q._impl.(secec.Point_p256r1) + return secec.pt_equal(pt_p, pt_q) == 1 + case .X25519: + b_p, b_q := &p._impl.(X25519_Buf), &q._impl.(X25519_Buf) + return crypto.compare_constant_time(b_p[:], b_q[:]) == 1 + case .X448: + b_p, b_q := &p._impl.(X448_Buf), &q._impl.(X448_Buf) + return crypto.compare_constant_time(b_p[:], b_q[:]) == 1 + case: + panic("crypto/ecdh: invalid curve") + } +} + +// public_key_clear clears pub_key to the uninitialized state. +public_key_clear :: proc "contextless" (pub_key: ^Public_Key) { + mem.zero_explicit(pub_key, size_of(Public_Key)) +} + +// ecdh performs an Elliptic Curve Diffie-Hellman key exchange betwween +// the Private_Key and Public_Key, writing the shared secret to dst. +// +// The neutral element is rejected as an error. +@(require_results) +ecdh :: proc(priv_key: ^Private_Key, pub_key: ^Public_Key, dst: []byte) -> bool { + ensure(priv_key._curve == pub_key._curve, "crypto/ecdh: curve mismatch") + ensure(pub_key._curve != .Invalid, "crypto/ecdh: uninitialized public key") + ensure(len(dst) == SHARED_SECRET_SIZES[priv_key._curve], "crypto/ecdh: invalid shared secret size") + + #partial switch priv_key._curve { + case .SECP256R1: + sc, pt := &priv_key._impl.(secec.Scalar_p256r1), &pub_key._impl.(secec.Point_p256r1) + ss: secec.Point_p256r1 + defer secec.pt_clear(&ss) + + secec.pt_scalar_mul(&ss, pt, sc) + return secec.pt_bytes(dst, nil, &ss) + case .X25519: + sc, pt := &priv_key._impl.(X25519_Buf), &pub_key._impl.(X25519_Buf) + x25519.scalarmult(dst, sc[:], pt[:]) + case .X448: + sc, pt := &priv_key._impl.(X448_Buf), &pub_key._impl.(X448_Buf) + x448.scalarmult(dst, sc[:], pt[:]) + case: + panic("crypto/ecdh: invalid curve") + } + + // X25519/X448 check for all zero digest. + return crypto.is_zero_constant_time(dst) == 0 +} + +// curve returns the Curve used by a Private_Key or Public_Key instance. +curve :: proc(k: ^$T) -> Curve where(T == Private_Key || T == Public_Key) { + return k._curve +} + +// key_size returns the key size of a Private_Key or Public_Key in bytes. +key_size :: proc(k: ^$T) -> int where(T == Private_Key || T == Public_Key) { + when T == Private_Key { + return PRIVATE_KEY_SIZES[k._curve] + } else { + return PUBLIC_KEY_SIZES[k._curve] + } +} + +// shared_secret_size returns the shared secret size of a key exchange +// in bytes. +shared_secret_size :: proc(k: ^$T) -> int where(T == Private_Key || T == Public_Key) { + return SHARED_SECRET_SIZES[k._curve] +} diff --git a/examples/all/all_js.odin b/examples/all/all_js.odin index 28b85f537..ee006ae86 100644 --- a/examples/all/all_js.odin +++ b/examples/all/all_js.odin @@ -33,6 +33,7 @@ package all @(require) import "core:crypto/chacha20poly1305" @(require) import chash "core:crypto/hash" @(require) import "core:crypto/deoxysii" +@(require) import "core:crypto/ecdh" @(require) import "core:crypto/ed25519" @(require) import "core:crypto/hkdf" @(require) import "core:crypto/hmac" diff --git a/examples/all/all_main.odin b/examples/all/all_main.odin index 9a7613ba5..a7f230022 100644 --- a/examples/all/all_main.odin +++ b/examples/all/all_main.odin @@ -37,6 +37,7 @@ package all @(require) import "core:crypto/chacha20poly1305" @(require) import chash "core:crypto/hash" @(require) import "core:crypto/deoxysii" +@(require) import "core:crypto/ecdh" @(require) import "core:crypto/ed25519" @(require) import "core:crypto/hkdf" @(require) import "core:crypto/hmac" diff --git a/tests/benchmark/crypto/benchmark_ecc.odin b/tests/benchmark/crypto/benchmark_ecc.odin index 16ca798dc..52a1a4ac1 100644 --- a/tests/benchmark/crypto/benchmark_ecc.odin +++ b/tests/benchmark/crypto/benchmark_ecc.odin @@ -2,13 +2,14 @@ package benchmark_core_crypto import "base:runtime" import "core:encoding/hex" +import "core:log" import "core:testing" import "core:text/table" import "core:time" +import "core:crypto" +import "core:crypto/ecdh" import "core:crypto/ed25519" -import "core:crypto/x25519" -import "core:crypto/x448" @(private = "file") ECDH_ITERS :: 10000 @@ -25,6 +26,10 @@ benchmark_crypto_ecc :: proc(t: ^testing.T) { @(private = "file") bench_ecdh :: proc() { + if !crypto.HAS_RAND_BYTES { + log.warnf("ECDH benchmarks skipped, no system entropy source") + } + tbl: table.Table table.init(&tbl) defer table.destroy(&tbl) @@ -42,63 +47,37 @@ bench_ecdh :: proc() { ) } - scalar_bp, scalar := bench_x25519() - append_tbl(&tbl, "X25519", scalar_bp, scalar) + for algo in ecdh.Curve { + if algo == .Invalid { + continue + } + algo_name := ecdh.CURVE_NAMES[algo] - scalar_bp, scalar = bench_x448() - append_tbl(&tbl, "X448", scalar_bp, scalar) + priv_key_alice: ecdh.Private_Key + start := time.tick_now() + for _ in 0 ..< ECDH_ITERS { + _ = ecdh.private_key_generate(&priv_key_alice, algo) + } + bp := time.tick_since(start) / ECDH_ITERS + + pub_key_alice: ecdh.Public_Key + ecdh.public_key_set_priv(&pub_key_alice, &priv_key_alice) + + priv_key_bob: ecdh.Private_Key + _ = ecdh.private_key_generate(&priv_key_bob, algo) + ss := make([]byte, ecdh.SHARED_SECRET_SIZES[algo], context.temp_allocator) + start = time.tick_now() + for _ in 0 ..< ECDH_ITERS { + _ = ecdh.ecdh(&priv_key_bob, &pub_key_alice, ss) + } + sc := time.tick_since(start) / ECDH_ITERS + + append_tbl(&tbl, algo_name, bp, sc) + } log_table(&tbl) } -@(private = "file") -bench_x25519 :: proc() -> (bp, sc: time.Duration) { - point_str := "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" - scalar_str := "cafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe" - - point, _ := hex.decode(transmute([]byte)(point_str), context.temp_allocator) - scalar, _ := hex.decode(transmute([]byte)(scalar_str), context.temp_allocator) - out: [x25519.POINT_SIZE]byte = --- - - start := time.tick_now() - for _ in 0 ..< ECDH_ITERS { - x25519.scalarmult_basepoint(out[:], scalar[:]) - } - bp = time.tick_since(start) / ECDH_ITERS - - start = time.tick_now() - for _ in 0 ..< ECDH_ITERS { - x25519.scalarmult(out[:], scalar[:], point[:]) - } - sc = time.tick_since(start) / ECDH_ITERS - - return -} - -@(private = "file") -bench_x448 :: proc() -> (bp, sc: time.Duration) { - point_str := "deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef" - scalar_str := "cafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe" - - point, _ := hex.decode(transmute([]byte)(point_str), context.temp_allocator) - scalar, _ := hex.decode(transmute([]byte)(scalar_str), context.temp_allocator) - out: [x448.POINT_SIZE]byte = --- - - start := time.tick_now() - for _ in 0 ..< ECDH_ITERS { - x448.scalarmult_basepoint(out[:], scalar[:]) - } - bp = time.tick_since(start) / ECDH_ITERS - - start = time.tick_now() - for _ in 0 ..< ECDH_ITERS { - x448.scalarmult(out[:], scalar[:], point[:]) - } - sc = time.tick_since(start) / ECDH_ITERS - - return -} - @(private = "file") bench_dsa :: proc() { tbl: table.Table diff --git a/tests/core/crypto/test_core_crypto_ecdh.odin b/tests/core/crypto/test_core_crypto_ecdh.odin new file mode 100644 index 000000000..87c9e8a4d --- /dev/null +++ b/tests/core/crypto/test_core_crypto_ecdh.odin @@ -0,0 +1,154 @@ +package test_core_crypto + +import "core:encoding/hex" +import "core:testing" + +import "core:crypto/ecdh" + +@(test) +test_ecdh :: proc(t: ^testing.T) { + test_vectors := []struct { + curve: ecdh.Curve, + scalar: string, + point: string, + product: string, + } { + // X25519 Test vectors from RFC 7748 + { + .X25519, + "a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4", + "e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c", + "c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552", + }, + { + .X25519, + "4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d", + "e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493", + "95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957", + }, + // X448 Test vectors from RFC 7748 + { + .X448, + "3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3", + "06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086", + "ce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f", + }, + { + .X448, + "203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095f", + "0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157db", + "884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179d", + }, + // secp256r1 Test vectors (subset) from NIST CAVP + { + .SECP256R1, + "7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534", + "04700c48f77f56584c5cc632ca65640db91b6bacce3a4df6b42ce7cc838833d287db71e509e3fd9b060ddb20ba5c51dcc5948d46fbf640dfe0441782cab85fa4ac", + "46fc62106420ff012e54a434fbdd2d25ccc5852060561e68040dd7778997bd7b", + }, + { + .SECP256R1, + "38f65d6dce47676044d58ce5139582d568f64bb16098d179dbab07741dd5caf5", + "04809f04289c64348c01515eb03d5ce7ac1a8cb9498f5caa50197e58d43a86a7aeb29d84e811197f25eba8f5194092cb6ff440e26d4421011372461f579271cda3", + "057d636096cb80b67a8c038c890e887d1adfa4195e9b3ce241c8a778c59cda67", + }, + } + + for v, _ in test_vectors { + raw_scalar, _ := hex.decode(transmute([]byte)(v.scalar), context.temp_allocator) + raw_point, _ := hex.decode(transmute([]byte)(v.point), context.temp_allocator) + + pub_key: ecdh.Public_Key + priv_key: ecdh.Private_Key + + ok := ecdh.private_key_set_bytes(&priv_key, v.curve, raw_scalar) + testing.expectf(t, ok, "failed to deserialize private key: %v %x", v.curve, raw_scalar) + + ok = ecdh.public_key_set_bytes(&pub_key, v.curve, raw_point) + testing.expectf(t, ok, "failed to deserialize public key: %v %x", v.curve, raw_scalar) + + shared_secret := make([]byte, ecdh.shared_secret_size(&pub_key), context.temp_allocator) + ok = ecdh.ecdh(&priv_key, &pub_key, shared_secret) + testing.expectf(t, ok, "ecdh failed: %v %v %v", v.curve, &priv_key, &pub_key) + + ss_str := string(hex.encode(shared_secret, context.temp_allocator)) + testing.expectf( + t, + ss_str == v.product, + "Expected %s for %v %s * %s, but got %s instead", + v.product, + v.curve, + v.scalar, + v.point, + ss_str, + ) + } +} + +@(test) +test_ecdh_scalar_basemult :: proc(t: ^testing.T) { + test_vectors := []struct { + curve: ecdh.Curve, + scalar : string, + point: string, + } { + // X25519 from RFC 7748 6.1 + { + .X25519, + "77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a", + "8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a", + }, + { + .X25519, + "5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb", + "de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f", + }, + // X448 from RFC 7748 6.2 + { + .X448, + "9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b", + "9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0", + }, + { + .X448, + "1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d", + "3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609", + }, + // secp256r1 Test vectors (subset) from NIST CAVP + { + .SECP256R1, + "7d7dc5f71eb29ddaf80d6214632eeae03d9058af1fb6d22ed80badb62bc1a534", + "04ead218590119e8876b29146ff89ca61770c4edbbf97d38ce385ed281d8a6b23028af61281fd35e2fa7002523acc85a429cb06ee6648325389f59edfce1405141", + }, + { + .SECP256R1, + "38f65d6dce47676044d58ce5139582d568f64bb16098d179dbab07741dd5caf5", + "04119f2f047902782ab0c9e27a54aff5eb9b964829ca99c06b02ddba95b0a3f6d08f52b726664cac366fc98ac7a012b2682cbd962e5acb544671d41b9445704d1d", + }, + } + + for v, _ in test_vectors { + raw_scalar, _ := hex.decode(transmute([]byte)(v.scalar), context.temp_allocator) + + priv_key: ecdh.Private_Key + pub_key: ecdh.Public_Key + + ok := ecdh.private_key_set_bytes(&priv_key, v.curve, raw_scalar) + testing.expectf(t, ok, "failed to deserialize private key: %v %x", v.curve, raw_scalar) + + ecdh.public_key_set_priv(&pub_key, &priv_key) + b := make([]byte, ecdh.key_size(&pub_key), context.temp_allocator) + ecdh.public_key_bytes(&pub_key, b) + + pub_str := string(hex.encode(b, context.temp_allocator)) + testing.expectf( + t, + pub_str == v.point, + "Expected %s for %v %s * G, but got %s instead", + v.point, + v.curve, + v.scalar, + pub_str, + ) + } +} \ No newline at end of file diff --git a/tests/core/crypto/test_core_crypto_edwards.odin b/tests/core/crypto/test_core_crypto_edwards.odin index a1307da24..2da98000c 100644 --- a/tests/core/crypto/test_core_crypto_edwards.odin +++ b/tests/core/crypto/test_core_crypto_edwards.odin @@ -6,8 +6,6 @@ import "core:testing" import field "core:crypto/_fiat/field_curve25519" import "core:crypto/ed25519" import "core:crypto/ristretto255" -import "core:crypto/x25519" -import "core:crypto/x448" @(test) test_edwards25519_sqrt_ratio_m1 :: proc(t: ^testing.T) { @@ -625,128 +623,6 @@ test_ed25519 :: proc(t: ^testing.T) { } } -@(test) -test_x25519 :: proc(t: ^testing.T) { - // Local copy of this so that the base point doesn't need to be exported. - _BASE_POINT: [32]byte = { - 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - } - - test_vectors := []struct { - scalar: string, - point: string, - product: string, - } { - // Test vectors from RFC 7748 - { - "a546e36bf0527c9d3b16154b82465edd62144c0ac1fc5a18506a2244ba449ac4", - "e6db6867583030db3594c1a424b15f7c726624ec26b3353b10a903a6d0ab1c4c", - "c3da55379de9c6908e94ea4df28d084f32eccf03491c71f754b4075577a28552", - }, - { - "4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d", - "e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493", - "95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957", - }, - } - for v, _ in test_vectors { - scalar, _ := hex.decode(transmute([]byte)(v.scalar), context.temp_allocator) - point, _ := hex.decode(transmute([]byte)(v.point), context.temp_allocator) - - derived_point: [x25519.POINT_SIZE]byte - x25519.scalarmult(derived_point[:], scalar[:], point[:]) - derived_point_str := string(hex.encode(derived_point[:], context.temp_allocator)) - - testing.expectf( - t, - derived_point_str == v.product, - "Expected %s for %s * %s, but got %s instead", - v.product, - v.scalar, - v.point, - derived_point_str, - ) - - // Abuse the test vectors to sanity-check the scalar-basepoint multiply. - p1, p2: [x25519.POINT_SIZE]byte - x25519.scalarmult_basepoint(p1[:], scalar[:]) - x25519.scalarmult(p2[:], scalar[:], _BASE_POINT[:]) - p1_str := string(hex.encode(p1[:], context.temp_allocator)) - p2_str := string(hex.encode(p2[:], context.temp_allocator)) - testing.expectf( - t, - p1_str == p2_str, - "Expected %s for %s * basepoint, but got %s instead", - p2_str, - v.scalar, - p1_str, - ) - } -} - -@(test) -test_x448 :: proc(t: ^testing.T) { - // Local copy of this so that the base point doesn't need to be exported. - _BASE_POINT: [56]byte = { - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - } - - test_vectors := []struct { - scalar: string, - point: string, - product: string, - } { - // Test vectors from RFC 7748 - { - "3d262fddf9ec8e88495266fea19a34d28882acef045104d0d1aae121700a779c984c24f8cdd78fbff44943eba368f54b29259a4f1c600ad3", - "06fce640fa3487bfda5f6cf2d5263f8aad88334cbd07437f020f08f9814dc031ddbdc38c19c6da2583fa5429db94ada18aa7a7fb4ef8a086", - "ce3e4ff95a60dc6697da1db1d85e6afbdf79b50a2412d7546d5f239fe14fbaadeb445fc66a01b0779d98223961111e21766282f73dd96b6f", - }, - { - "203d494428b8399352665ddca42f9de8fef600908e0d461cb021f8c538345dd77c3e4806e25f46d3315c44e0a5b4371282dd2c8d5be3095f", - "0fbcc2f993cd56d3305b0b7d9e55d4c1a8fb5dbb52f8e9a1e9b6201b165d015894e56c4d3570bee52fe205e28a78b91cdfbde71ce8d157db", - "884a02576239ff7a2f2f63b2db6a9ff37047ac13568e1e30fe63c4a7ad1b3ee3a5700df34321d62077e63633c575c1c954514e99da7c179d", - }, - } - for v, _ in test_vectors { - scalar, _ := hex.decode(transmute([]byte)(v.scalar), context.temp_allocator) - point, _ := hex.decode(transmute([]byte)(v.point), context.temp_allocator) - - derived_point: [x448.POINT_SIZE]byte - x448.scalarmult(derived_point[:], scalar[:], point[:]) - derived_point_str := string(hex.encode(derived_point[:], context.temp_allocator)) - - testing.expectf( - t, - derived_point_str == v.product, - "Expected %s for %s * %s, but got %s instead", - v.product, - v.scalar, - v.point, - derived_point_str, - ) - - // Abuse the test vectors to sanity-check the scalar-basepoint multiply. - p1, p2: [x448.POINT_SIZE]byte - x448.scalarmult_basepoint(p1[:], scalar[:]) - x448.scalarmult(p2[:], scalar[:], _BASE_POINT[:]) - p1_str := string(hex.encode(p1[:], context.temp_allocator)) - p2_str := string(hex.encode(p2[:], context.temp_allocator)) - testing.expectf( - t, - p1_str == p2_str, - "Expected %s for %s * basepoint, but got %s instead", - p2_str, - v.scalar, - p1_str, - ) - } -} - @(private="file") ge_str :: proc(ge: ^ristretto255.Group_Element) -> string { b: [ristretto255.ELEMENT_SIZE]byte From f5b7274a77f008e5df722d442870619a3769a0f9 Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Wed, 21 Jan 2026 00:43:10 +0900 Subject: [PATCH 203/212] core/crypto/_edwards25519: Support `crypto.COMPACT_IMPLS` --- core/crypto/_edwards25519/edwards25519.odin | 4 +- .../edwards25519_scalar_mul.odin | 133 +- .../edwards25519_scalar_mul_base.odin | 147 + .../_edwards25519/edwards25519_table.odin | 4947 +++++++++++++++++ .../tools/edwards_gen_tables.odin | 134 + core/crypto/x25519/x25519.odin | 49 +- 6 files changed, 5288 insertions(+), 126 deletions(-) create mode 100644 core/crypto/_edwards25519/edwards25519_scalar_mul_base.odin create mode 100644 core/crypto/_edwards25519/edwards25519_table.odin create mode 100644 core/crypto/_edwards25519/tools/edwards_gen_tables.odin diff --git a/core/crypto/_edwards25519/edwards25519.odin b/core/crypto/_edwards25519/edwards25519.odin index d6f01d497..12192102d 100644 --- a/core/crypto/_edwards25519/edwards25519.odin +++ b/core/crypto/_edwards25519/edwards25519.odin @@ -195,7 +195,6 @@ ge_generator :: proc "contextless" (ge: ^Group_Element) { ge_set(ge, &GE_BASEPOINT) } -@(private) Addend_Group_Element :: struct { y2_minus_x2: field.Loose_Field_Element, // t1 y2_plus_x2: field.Loose_Field_Element, // t3 @@ -203,7 +202,6 @@ Addend_Group_Element :: struct { two_times_z2: field.Loose_Field_Element, // t5 } -@(private) ge_addend_set :: proc "contextless" (ge_a: ^Addend_Group_Element, ge: ^Group_Element) { field.fe_sub(&ge_a.y2_minus_x2, &ge.y, &ge.x) field.fe_add(&ge_a.y2_plus_x2, &ge.y, &ge.x) @@ -420,6 +418,6 @@ ge_in_prime_order_subgroup_vartime :: proc "contextless" (ge: ^Group_Element) -> // that is a ~50% speedup, and a lot of added complexity for something // that is better solved by "just use ristretto255". tmp: Group_Element = --- - _ge_scalarmult(&tmp, ge, &SC_ELL, true) + ge_scalarmult_raw(&tmp, ge, &SC_ELL, true) return ge_equal(&tmp, &GE_IDENTITY) == 1 } diff --git a/core/crypto/_edwards25519/edwards25519_scalar_mul.odin b/core/crypto/_edwards25519/edwards25519_scalar_mul.odin index 6e0eb42c7..d4ffa1075 100644 --- a/core/crypto/_edwards25519/edwards25519_scalar_mul.odin +++ b/core/crypto/_edwards25519/edwards25519_scalar_mul.odin @@ -1,130 +1,24 @@ package _edwards25519 +import "core:crypto" import field "core:crypto/_fiat/field_scalar25519" import subtle "core:crypto/_subtle" import "core:mem" -// GE_BASEPOINT_TABLE is 1 * G, ... 15 * G, in precomputed format. -// -// Note: When generating, the values were reduced to Tight_Field_Element -// ranges, even though that is not required. -@(private,rodata) -GE_BASEPOINT_TABLE := Multiply_Table { - { - {62697248952638, 204681361388450, 631292143396476, 338455783676468, 1213667448819585}, - {1288382639258501, 245678601348599, 269427782077623, 1462984067271730, 137412439391563}, - {301289933810280, 1259582250014073, 1422107436869536, 796239922652654, 1953934009299142}, - {2, 0, 0, 0, 0}, - }, - { - {1519297034332653, 1098796920435767, 1823476547744119, 808144629470969, 2110930855619772}, - {338005982828284, 1667856962156925, 100399270107451, 1604566703601691, 1950338038771369}, - {1920505767731247, 1443759578976892, 1659852098357048, 1484431291070208, 275018744912646}, - {763163817085987, 2195095074806923, 2167883174351839, 1868059999999762, 911071066608705}, - }, - { - {960627541894068, 1314966688943942, 1126875971034044, 2059608312958945, 605975666152586}, - {1714478358025626, 2209607666607510, 1600912834284834, 496072478982142, 481970031861896}, - {851735079403194, 1088965826757164, 141569479297499, 602804610059257, 2004026468601520}, - {197585529552380, 324719066578543, 564481854250498, 1173818332764578, 35452976395676}, - }, - { - {1152980410747203, 2196804280851952, 25745194962557, 1915167295473129, 1266299690309224}, - {809905889679060, 979732230071345, 1509972345538142, 188492426534402, 818965583123815}, - {997685409185036, 1451818320876327, 2126681166774509, 2000509606057528, 235432372486854}, - {887734189279642, 1460338685162044, 877378220074262, 102436391401299, 153369156847490}, - }, - { - {2056621900836770, 1821657694132497, 1627986892909426, 1163363868678833, 1108873376459226}, - {1187697490593623, 1066539945237335, 885654531892000, 1357534489491782, 359370291392448}, - {1509033452137525, 1305318174298508, 613642471748944, 1987256352550234, 1044283663101541}, - {220105720697037, 387661783287620, 328296827867762, 360035589590664, 795213236824054}, - }, - { - {1820794733038396, 1612235121681074, 757405923441402, 1094031020892801, 231025333128907}, - {1639067873254194, 1484176557946322, 300800382144789, 1329915446659183, 1211704578730455}, - {641900794791527, 1711751746971612, 179044712319955, 576455585963824, 1852617592509865}, - {743549047192397, 685091042550147, 1952415336873496, 1965124675654685, 513364998442917}, - }, - { - {1004557076870448, 1762911374844520, 1330807633622723, 384072910939787, 953849032243810}, - {2178275058221458, 257933183722891, 376684351537894, 2010189102001786, 1981824297484148}, - {1332915663881114, 1286540505502549, 1741691283561518, 977214932156314, 1764059494778091}, - {429702949064027, 1368332611650677, 2019867176450999, 2212258376161746, 526160996742554}, - }, - { - {2098932988258576, 2203688382075948, 2120400160059479, 1748488020948146, 1203264167282624}, - {677131386735829, 1850249298025188, 672782146532031, 2144145693078904, 2088656272813787}, - {1065622343976192, 1573853211848116, 223560413590068, 333846833073379, 27832122205830}, - {1781008836504573, 917619542051793, 544322748939913, 882577394308384, 1720521246471195}, - }, - { - {660120928379860, 2081944024858618, 1878411111349191, 424587356517195, 2111317439894005}, - {1834193977811532, 1864164086863319, 797334633289424, 150410812403062, 2085177078466389}, - {1438117271371866, 783915531014482, 388731514584658, 292113935417795, 1945855002546714}, - {1678140823166658, 679103239148744, 614102761596238, 1052962498997885, 1863983323810390}, - }, - { - {1690309392496233, 1116333140326275, 1377242323631039, 717196888780674, 82724646713353}, - {1722370213432106, 74265192976253, 264239578448472, 1714909985012994, 2216984958602173}, - {2010482366920922, 1294036471886319, 566466395005815, 1631955803657320, 1751698647538458}, - {1073230604155753, 1159087041338551, 1664057985455483, 127472702826203, 1339591128522371}, - }, - { - {478053307175577, 2179515791720985, 21146535423512, 1831683844029536, 462805561553981}, - {1945267486565588, 1298536818409655, 2214511796262989, 1904981051429012, 252904800782086}, - {268945954671210, 222740425595395, 1208025911856230, 1080418823003555, 75929831922483}, - {1884784014268948, 643868448202966, 978736549726821, 46385971089796, 1296884812292320}, - }, - { - {1861159462859103, 7077532564710, 963010365896826, 1938780006785270, 766241051941647}, - {1778966986051906, 1713995999765361, 1394565822271816, 1366699246468722, 1213407027149475}, - {1978989286560907, 2135084162045594, 1951565508865477, 671788336314416, 293123929458176}, - {902608944504080, 2167765718046481, 1285718473078022, 1222562171329269, 492109027844479}, - }, - { - {1820807832746213, 1029220580458586, 1101997555432203, 1039081975563572, 202477981158221}, - {1866134980680205, 2222325502763386, 1830284629571201, 1046966214478970, 418381946936795}, - {1783460633291322, 1719505443254998, 1810489639976220, 877049370713018, 2187801198742619}, - {197118243000763, 305493867565736, 518814410156522, 1656246186645170, 901894734874934}, - }, - { - {225454942125915, 478410476654509, 600524586037746, 643450007230715, 1018615928259319}, - {1733330584845708, 881092297970296, 507039890129464, 496397090721598, 2230888519577628}, - {690155664737246, 1010454785646677, 753170144375012, 1651277613844874, 1622648796364156}, - {1321310321891618, 1089655277873603, 235891750867089, 815878279563688, 1709264240047556}, - }, - { - {805027036551342, 1387174275567452, 1156538511461704, 1465897486692171, 1208567094120903}, - {2228417017817483, 202885584970535, 2182114782271881, 2077405042592934, 1029684358182774}, - {460447547653983, 627817697755692, 524899434670834, 1228019344939427, 740684787777653}, - {849757462467675, 447476306919899, 422618957298818, 302134659227815, 675831828440895}, - }, -} - ge_scalarmult :: proc "contextless" (ge, p: ^Group_Element, sc: ^Scalar) { tmp: field.Non_Montgomery_Domain_Field_Element field.fe_from_montgomery(&tmp, sc) - _ge_scalarmult(ge, p, &tmp) + ge_scalarmult_raw(ge, p, &tmp) mem.zero_explicit(&tmp, size_of(tmp)) } -ge_scalarmult_basepoint :: proc "contextless" (ge: ^Group_Element, sc: ^Scalar) { - // Something like the comb method from "Fast and compact elliptic-curve - // cryptography" Section 3.3, would be more performant, but more - // complex. - // - // - https://eprint.iacr.org/2012/309 - ge_scalarmult(ge, &GE_BASEPOINT, sc) -} - ge_scalarmult_vartime :: proc "contextless" (ge, p: ^Group_Element, sc: ^Scalar) { tmp: field.Non_Montgomery_Domain_Field_Element field.fe_from_montgomery(&tmp, sc) - _ge_scalarmult(ge, p, &tmp, true) + ge_scalarmult_raw(ge, p, &tmp, true) } ge_double_scalarmult_basepoint_vartime :: proc "contextless" ( @@ -147,6 +41,12 @@ ge_double_scalarmult_basepoint_vartime :: proc "contextless" ( A_tbl: Multiply_Table = --- mul_tbl_set(&A_tbl, A, &tmp_add) + when crypto.COMPACT_IMPLS == true { + G_tbl: Multiply_Table = --- + mul_tbl_set(&G_tbl, &GE_BASEPOINT, &tmp_add) + } else { + tmp_bp_addend: Basepoint_Addend_Group_Element = --- + } sc_a, sc_b: field.Non_Montgomery_Domain_Field_Element field.fe_from_montgomery(&sc_a, a) @@ -170,21 +70,28 @@ ge_double_scalarmult_basepoint_vartime :: proc "contextless" ( ge_double(&tmp, &tmp, &tmp_dbl) } mul_tbl_add(&tmp, &A_tbl, hi_a, &tmp_add, &tmp_addend, true) - mul_tbl_add(&tmp, &GE_BASEPOINT_TABLE, hi_b, &tmp_add, &tmp_addend, true) + when crypto.COMPACT_IMPLS == true { + mul_tbl_add(&tmp, &G_tbl, hi_b, &tmp_add, &tmp_addend, true) + } else { + mul_bp_tbl_add(&tmp, GE_BASEPOINT_TABLE, hi_b, &tmp_add, &tmp_bp_addend, true) + } ge_double(&tmp, &tmp, &tmp_dbl) ge_double(&tmp, &tmp, &tmp_dbl) ge_double(&tmp, &tmp, &tmp_dbl) ge_double(&tmp, &tmp, &tmp_dbl) mul_tbl_add(&tmp, &A_tbl, lo_a, &tmp_add, &tmp_addend, true) - mul_tbl_add(&tmp, &GE_BASEPOINT_TABLE, lo_b, &tmp_add, &tmp_addend, true) + when crypto.COMPACT_IMPLS == true { + mul_tbl_add(&tmp, &G_tbl, lo_b, &tmp_add, &tmp_addend, true) + } else { + mul_bp_tbl_add(&tmp, GE_BASEPOINT_TABLE, lo_b, &tmp_add, &tmp_bp_addend, true) + } } ge_set(ge, &tmp) } -@(private) -_ge_scalarmult :: proc "contextless" ( +ge_scalarmult_raw :: proc "contextless" ( ge, p: ^Group_Element, sc: ^field.Non_Montgomery_Domain_Field_Element, unsafe_is_vartime := false, diff --git a/core/crypto/_edwards25519/edwards25519_scalar_mul_base.odin b/core/crypto/_edwards25519/edwards25519_scalar_mul_base.odin new file mode 100644 index 000000000..6820d618e --- /dev/null +++ b/core/crypto/_edwards25519/edwards25519_scalar_mul_base.odin @@ -0,0 +1,147 @@ +package _edwards25519 + +import "core:crypto" +import field "core:crypto/_fiat/field_curve25519" +import scalar "core:crypto/_fiat/field_scalar25519" +import subtle "core:crypto/_subtle" +import "core:mem" + +ge_scalarmult_basepoint :: proc "contextless" (ge: ^Group_Element, sc: ^Scalar) { + when crypto.COMPACT_IMPLS == true { + ge_scalarmult(ge, &GE_BASEPOINT, sc) + } else { + tmp_sc: scalar.Non_Montgomery_Domain_Field_Element + scalar.fe_from_montgomery(&tmp_sc, sc) + + tmp_add: Add_Scratch = --- + tmp_addend: Basepoint_Addend_Group_Element = --- + + ge_identity(ge) + for i in 0..<32 { + limb := i / 8 + shift := uint(i & 7) * 8 + limb_byte := tmp_sc[limb] >> shift + + hi, lo := (limb_byte >> 4) & 0x0f, limb_byte & 0x0f + mul_bp_tbl_add(ge, &Gen_Multiply_Table_edwards25519_lo[i], lo, &tmp_add, &tmp_addend, false) + mul_bp_tbl_add(ge, &Gen_Multiply_Table_edwards25519_hi[i], hi, &tmp_add, &tmp_addend, false) + } + + mem.zero_explicit(&tmp_sc, size_of(tmp_sc)) + mem.zero_explicit(&tmp_add, size_of(Add_Scratch)) + mem.zero_explicit(&tmp_addend, size_of(Basepoint_Addend_Group_Element)) + } +} + +when crypto.COMPACT_IMPLS == false { + @(private="file",rodata) + TWO_TIMES_Z2 := field.Loose_Field_Element{2, 0, 0, 0, 0} + + @(private) + Basepoint_Addend_Group_Element :: struct { + y2_minus_x2: field.Loose_Field_Element, // t1 + y2_plus_x2: field.Loose_Field_Element, // t3 + k_times_t2: field.Tight_Field_Element, // t4 + } + + @(private) + Basepoint_Multiply_Table :: [15]Basepoint_Addend_Group_Element + + @(private) + ge_bp_addend_conditional_assign :: proc "contextless" (ge_a, a: ^Basepoint_Addend_Group_Element, ctrl: int) { + field.fe_cond_select(&ge_a.y2_minus_x2, &ge_a.y2_minus_x2, &a.y2_minus_x2, ctrl) + field.fe_cond_select(&ge_a.y2_plus_x2, &ge_a.y2_plus_x2, &a.y2_plus_x2, ctrl) + field.fe_cond_select(&ge_a.k_times_t2, &ge_a.k_times_t2, &a.k_times_t2, ctrl) + } + + @(private) + ge_add_bp_addend :: proc "contextless" ( + ge, a: ^Group_Element, + b: ^Basepoint_Addend_Group_Element, + scratch: ^Add_Scratch, + ) { + // https://www.hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3 + // Assumptions: k=2*d, z = 1 (precomputation ftw) + // + // t0 = Y1-X1 + // t1 = Y2-X2 + // A = t0*t1 + // t2 = Y1+X1 + // t3 = Y2+X2 + // B = t2*t3 + // t4 = k*T2 + // C = T1*t4 + // t5 = 2*Z2 + // D = Z1*t5 + // E = B-A + // F = D-C + // G = D+C + // H = B+A + // X3 = E*F + // Y3 = G*H + // T3 = E*H + // Z3 = F*G + // + // In order to make the scalar multiply faster, the addend is provided + // as a `Addend_Group_Element` with t1, t3, t4, and t5 precomputed, as + // it is trivially obvious that those are the only values used by the + // formula that are directly dependent on `b`, and are only dependent + // on `b` and constants. This saves 1 sub, 2 adds, and 1 multiply, + // each time the intermediate representation can be reused. + + A, B, C, D := &scratch.A, &scratch.B, &scratch.C, &scratch.D + E, F, G, H := &scratch.E, &scratch.F, &scratch.G, &scratch.H + t0, t2 := &scratch.t0, &scratch.t2 + + field.fe_sub(t0, &a.y, &a.x) + t1 := &b.y2_minus_x2 + field.fe_carry_mul(A, t0, t1) + field.fe_add(t2, &a.y, &a.x) + t3 := &b.y2_plus_x2 + field.fe_carry_mul(B, t2, t3) + t4 := &b.k_times_t2 + field.fe_carry_mul(C, field.fe_relax_cast(&a.t), field.fe_relax_cast(t4)) + field.fe_carry_mul(D, field.fe_relax_cast(&a.z), &TWO_TIMES_Z2) + field.fe_sub(E, B, A) + field.fe_sub(F, D, C) + field.fe_add(G, D, C) + field.fe_add(H, B, A) + field.fe_carry_mul(&ge.x, E, F) + field.fe_carry_mul(&ge.y, G, H) + field.fe_carry_mul(&ge.t, E, H) + field.fe_carry_mul(&ge.z, F, G) + } + + @(private) + mul_bp_tbl_add :: proc "contextless" ( + ge: ^Group_Element, + tbl: ^Basepoint_Multiply_Table, + idx: u64, + tmp_add: ^Add_Scratch, + tmp_addend: ^Basepoint_Addend_Group_Element, + unsafe_is_vartime: bool, + ) { + // Variable time lookup, with the addition omitted entirely if idx == 0. + if unsafe_is_vartime { + // Skip adding the point at infinity. + if idx != 0 { + ge_add_bp_addend(ge, ge, &tbl[idx-1], tmp_add) + } + return + } + + // Constant time lookup. + tmp_addend^ = { + // Point at infinity (0, 1, 1, 0) in precomputed form, note + // that the precomputed tables rescale so that `Z = 1`. + {1, 0, 0, 0, 0}, // y - x + {1, 0, 0, 0, 0}, // y + x + {0, 0, 0, 0, 0}, // t * 2d + } + for i := u64(1); i < 16; i = i + 1 { + ctrl := subtle.eq(i, idx) + ge_bp_addend_conditional_assign(tmp_addend, &tbl[i - 1], int(ctrl)) + } + ge_add_bp_addend(ge, ge, tmp_addend, tmp_add) + } +} diff --git a/core/crypto/_edwards25519/edwards25519_table.odin b/core/crypto/_edwards25519/edwards25519_table.odin new file mode 100644 index 000000000..029b08418 --- /dev/null +++ b/core/crypto/_edwards25519/edwards25519_table.odin @@ -0,0 +1,4947 @@ +package _edwards25519 + +/* + ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ +*/ + +import "core:crypto" + +when crypto.COMPACT_IMPLS == false { + @(private,rodata) + Gen_Multiply_Table_edwards25519_lo := [32]Basepoint_Multiply_Table { + { + { + {4566296876323096, 4708280988758944, 2883091957081722, 4842055411046963, 5717267076190079}, + {3540182452943730, 2497478415033846, 2521227595762870, 1462984067271729, 2389212253076811}, + {301289933810280, 1259582250014073, 1422107436869536, 796239922652654, 1953934009299142}, + }, + { + {4966907458672021, 4936584233144657, 6114240989277698, 5254498676225494, 4146642117106832}, + {3632771708514775, 790832306631235, 2067202295274102, 1995808275510000, 1566530869037010}, + {748439484463711, 1033211726465151, 1396005112841647, 1611506220286469, 1972177495910992}, + }, + { + {4820158664987218, 4429624038632138, 3711242400124238, 3713328211397903, 3003390509798844}, + {1601611775252272, 1720807796594148, 1132070835939856, 3512254832574799, 2147779492816910}, + {1850748884277385, 1200145853858453, 1068094770532492, 672251375690438, 1586055907191707}, + }, + { + {3946190272469145, 6239505675006654, 5208669189437987, 5151632689063553, 5199813637784664}, + {934282339813791, 1846903124198670, 1172395437954843, 1007037127761661, 1830588347719256}, + {1121406372216585, 192876649532226, 190294192191717, 1994165897297032, 2245000007398739}, + }, + { + {4928851390486164, 2860263086157808, 4946162173083730, 5341365721927258, 4878154719998387}, + {769950342298400, 2384754244604994, 3095885746880802, 3225892188161580, 2977876099231263}, + {1086255230780037, 274979815921559, 1960002765731872, 929474102396301, 1190409889297339}, + }, + { + {4510980453010577, 4649810060060977, 4808503203819400, 5702468951241614, 3249489646904341}, + {1388594989461809, 316767091099457, 2646098655878230, 1230079486801004, 1440737038838979}, + {1181317918772081, 114573476638901, 262805072233344, 265712217171332, 294181933805782}, + }, + { + {4271167442657675, 2928511714391884, 4614310625181828, 3360446656227271, 5021391587042608}, + {2916800678241215, 2065379846933858, 2622030924071124, 2602788184473875, 1233371373142984}, + {965130719900578, 247011430587952, 526356006571389, 91986625355052, 2157223321444601}, + }, + { + {4325401225737414, 4534620752133203, 4768100597167576, 4751634318022197, 3282052041613534}, + {4320419353804412, 4218074731744053, 957728544705548, 729906502578991, 2411634706750414}, + {551790716293402, 1989538725166328, 801169423371717, 2052451893578887, 678432056995012}, + }, + { + {6229274597883966, 4185445767544427, 3794144352961029, 6271388400944242, 5801047593299399}, + {1802695059464988, 1664899123557221, 2845359304426105, 2160434469266658, 3179370264440279}, + {1381809363726107, 1430341051343062, 2061843536018959, 1551778050872521, 2036394857967624}, + }, + { + {3190293695332791, 4165728475672253, 4346255112396895, 3238346181288697, 4562115113555210}, + {1569908045411451, 706723917266915, 1500941167088851, 2522858060362189, 3442327746686552}, + {1454533688490200, 416156769327623, 1344514353803379, 1816391251363763, 259908591619060}, + }, + { + {4322190032257826, 3710718875543082, 5127771470387916, 5558932420078259, 4937587148103002}, + {4222693909998302, 2779866139518454, 1619374932191226, 2207306624415883, 1169170329061080}, + {893653801273833, 1168026499324677, 1242553501121234, 1306366254304474, 1086752658510815}, + }, + { + {4366666225767590, 5094682881462444, 5444160766003964, 2663859630225193, 4386427788371457}, + {1548398643541286, 3090755542662214, 2368065889335542, 1878116023572279, 2384475613352909}, + {1571032457823571, 1253760059932116, 665829584253800, 109400965270906, 981221002823741}, + }, + { + {6475278226276205, 4841626135259659, 5265997707342765, 5158696113477971, 4545898660066816}, + {2465253816303469, 3191571337672685, 1159882208056013, 2569188183312765, 621213314200686}, + {177130678690680, 1754759263300204, 1864311296286618, 1180675631479880, 1292726903152791}, + }, + { + {3248252964508250, 5061531253750778, 5542769770211014, 4619085244233909, 5311803534193606}, + {2375959787421170, 2263885670311134, 2822409136676350, 3122669455540755, 1947192330052816}, + {498660636760962, 1605652986893012, 893278769679967, 1769999239723039, 646478004325289}, + }, + { + {5574001150447352, 3524291821486207, 4161953422248557, 4327379335382018, 3442969602526468}, + {1913163449625248, 2712579013977241, 2193883288642313, 1008900146920800, 1721983679009502}, + {692896803108118, 500174642072499, 2068223309439677, 1162190621851337, 1426986007309901}, + }, + }, + { + { + {5457238221803851, 3344133750480297, 5923374394087185, 3057477798065323, 3111028807187760}, + {1368953770187805, 3042147450398169, 2689308289352409, 2142576377050579, 1932081720066286}, + {1200766035879111, 20142053207432, 1465634435977050, 1645256912097844, 295121984874596}, + }, + { + {5563698449899448, 3838625675758736, 4715900944610621, 4227102525088801, 5170323687134830}, + {1735718747031538, 1248237894295956, 1204753118328107, 976066523550493, 2317743583219840}, + {1091990273418756, 1572899409348578, 80968014455247, 306009358661350, 1520450739132526}, + }, + { + {4403130087311393, 3013844998431429, 3939874146236762, 3074845922691006, 3159402582764738}, + {3732317023121341, 1511153322193951, 3496143672676420, 2556587964178488, 2620936670181690}, + {2047386910586836, 168470092900250, 1552838872594810, 340951180073789, 360819374702533}, + }, + { + {5483833971283375, 6215856366616550, 5092534899560758, 4707898440462492, 3093598134728534}, + {1982622644432037, 2014393600336956, 2380709022489462, 3869592437614438, 2357094095599062}, + {197561292938973, 454817274782871, 1963754960082318, 2113372252160468, 971377527342673}, + }, + { + {5235862574050758, 3926212577912309, 4434256219348056, 5854494381844745, 2810258686980493}, + {2416499262514576, 2254927265442919, 3451304785234000, 1766155447043651, 1899238924683527}, + {2103305098582922, 1960809151316468, 715134605001343, 1454892949167181, 40827143824949}, + }, + { + {4483855840793217, 3239143728269862, 4367394306679708, 4071397886477406, 3371105467700097}, + {1239289043050193, 1744654158124578, 758702410031698, 4048562808759936, 2253402870349013}, + {320153677847348, 939613871605645, 641883205761567, 1930009789398224, 329165806634126}, + }, + { + {4780421392687930, 3788635404873276, 3557012555097608, 4565073531580670, 4303176850668304}, + {3232730304159378, 1242488692177892, 1251446316964684, 1086618677993530, 1961430968465772}, + {833449923882501, 1750270368490475, 1123347002068295, 185477424765687, 278090826653186}, + }, + { + {3756645926444593, 3454896102689928, 5065739048841913, 4777932644822338, 3536143867460687}, + {794524995833413, 1849907304548286, 2305148486158393, 1272368559505216, 1147304168324779}, + {483048732424432, 2116063063343382, 30120189902313, 292451576741007, 1156379271702225}, + }, + { + {5884070579505425, 5535277330947453, 5603542025663670, 4776593639127153, 4995715838681551}, + {2505290486961759, 2288457607049763, 1322694247668132, 2996684795874985, 1441775943403867}, + {1862130357601747, 1576563056403606, 1053598539514442, 836379099899856, 1745075449649052}, + }, + { + {4271432792719273, 4354519732898601, 3841949260311002, 4278872468826501, 3182588946344969}, + {994086190120795, 2265566763472579, 1778668799717474, 1759565368702851, 1705243805775865}, + {208457126969992, 1306788169067141, 1504881061177412, 778305094530678, 286650467791603}, + }, + { + {3704308183084302, 4667642921024280, 3735446294701327, 4710970560312866, 5219863835152358}, + {1155946475009464, 1378854908418478, 3050476655608427, 738141412602796, 1805371589338096}, + {1627667107954997, 2038498693464737, 380348381597727, 693747096546728, 1241364634477378}, + }, + { + {4610118268113321, 3236474426265456, 4804410568671572, 4099577866548348, 3504102383946080}, + {748123900738723, 2239140288387656, 322477057520882, 2644973441419796, 1290933190145308}, + {2218076336525385, 339947754397137, 1735892619490, 1441988709036711, 932991353908008}, + }, + { + {5176295056640358, 3403895808063209, 3860193783232080, 4018349594328251, 4528337169205809}, + {2638983432827646, 2268258692789757, 3287339174338050, 1299412654822337, 936917254750873}, + {430804656367208, 1812394904738259, 550528638373630, 2103769550939254, 443986453677108}, + }, + { + {4019814909194368, 2925457503142305, 3944973873459804, 4250278944002558, 4031746156495663}, + {3925945607985574, 2164215477088927, 2286513560718006, 3385980103702156, 1734257170111047}, + {38890723392351, 853701573154564, 966467672212375, 417321296433946, 554926061377915}, + }, + { + {5000002949084352, 4896484517581292, 5148976024567894, 4815058842461170, 4176010608048328}, + {1720782684885150, 798987029915204, 1610161967147136, 3970529737234552, 936254274515738}, + {562662523022136, 737396420860869, 1964828496205405, 271079414894445, 1393713695470127}, + }, + }, + { + { + {4641332589184683, 2958470737602587, 5890637714236266, 6469243441056846, 3636576929381593}, + {3180171966714267, 2147692869914563, 1455665844462196, 1986737809425946, 2437006863943337}, + {481144981981577, 2053319313589856, 2065402289827512, 617954271490316, 1106602634668125}, + }, + { + {5160989980743332, 3250299780570808, 5495492964276292, 5314069834477255, 2594939618294032}, + {2948097833334040, 3145099472726142, 1148636718636008, 2278533891034865, 2203955659340680}, + {791736669492960, 934767652997115, 824656780392914, 1759463253018643, 361530362383518}, + }, + { + {5791086827335700, 4467111755065554, 3804728204617233, 6168459157050691, 3376804788950489}, + {2022541353055578, 4346500076272714, 3802807888710933, 2494585331103411, 2947785218648809}, + {677434665154918, 989582503122485, 1817429540898386, 1052904935475344, 1143826298169798}, + }, + { + {3025160502526487, 6318980957908565, 4867373065037870, 5043229614440699, 3035080247933683}, + {2619066141993637, 2570231002607651, 2947429167440602, 2885885471266079, 2276381426249673}, + {180820816194166, 168937968377394, 748416242794470, 1227281252254508, 1567587861004268}, + }, + { + {4236540720225255, 5582763806770724, 3307821162947907, 3911758370168910, 3340328882710774}, + {2730575372268893, 2062896624554806, 2951191072970647, 2609899222113120, 1277310261461760}, + {580736401511151, 1842931091388998, 1177201471228238, 2075460256527244, 1301133425678027}, + }, + { + {3547095551954881, 3966542127392273, 5049182669833076, 6538011303633046, 3765047903698852}, + {1515728832059163, 1575261009617579, 1510246567196186, 2442877836294952, 2368461529974388}, + {230710545179830, 30821514358353, 760704303452229, 390668103790604, 573437871383156}, + }, + { + {4354054137171033, 3822632479902001, 4538296533915119, 4245013553492583, 4574238179641958}, + {3421179921230875, 2514967047430861, 4274701112739695, 3071700566936367, 4275698278559832}, + {894132856735058, 548675863558441, 845349339503395, 1942269668326667, 1615682209874691}, + }, + { + {5296988143897756, 3567256897335281, 4224086813027664, 4153625766737702, 4841869104592905}, + {3539470031223082, 1222355136884919, 1846481788678694, 1150426571265110, 1613523400722047}, + {550201530671806, 778605267108140, 2063911101902983, 115500557286349, 2041641272971022}, + }, + { + {2639140850252425, 3988225053741778, 4109492541046027, 4467731762307139, 4788525019017799}, + {1956266817271455, 2914237312642832, 2018010448016151, 4042065159660719, 3422400064417223}, + {1185820244523867, 953640094456191, 1426524678517613, 1191533398208458, 1993578549159852}, + }, + { + {4724762102005390, 3941768459309593, 3168985852401486, 5230753070525336, 5120855380354436}, + {2162922301975048, 2584871642802941, 2903836488265486, 2034914383000476, 1973107217149520}, + {1225503059018859, 1744932331605022, 393061606917651, 2045141059558447, 1187823695528756}, + }, + { + {3873867956612972, 5901886943623014, 4214442512189194, 3726570129804851, 4003114175771373}, + {2499971111138236, 1856344473990516, 2851460465748678, 1490509710033167, 3414551741933391}, + {1569106592395768, 1670704805332568, 2011861983976474, 822492307064908, 1138495702641636}, + }, + { + {4611233673112936, 4109919865110418, 3874636387071312, 4304609757893158, 4158539624577373}, + {3888656531434102, 3371559592472684, 2495053387333630, 3579436360572308, 1114431352259831}, + {2209993507106795, 1762615018349199, 1687296090930185, 9491601628221, 870532128794902}, + }, + { + {4833972836221169, 5399132877586271, 4606616407949355, 4080860583790927, 4239964386503137}, + {1305913677624121, 3558400184075999, 3275823038503467, 3454063433790229, 1309514508446881}, + {1566723549675548, 1397175496983691, 504231980459915, 306990234666329, 1744893526714441}, + }, + { + {4014795958128859, 5054570465100501, 3081378639295577, 5833550217358299, 3899560884622359}, + {972376391789061, 1850852472634117, 2719443704140285, 2186622623776515, 3209686661433313}, + {2171782442569495, 1594104418173184, 1848207566547320, 2195471209947031, 1091928745815642}, + }, + { + {4698583634348737, 4028817484747578, 3922491723357167, 4921897981297279, 5070174707952522}, + {3952749170677737, 509151538148928, 2600240333845125, 2270835069234179, 3790913978189516}, + {1587050028613976, 1757976429633698, 440367736554514, 102469500615778, 1293087093446941}, + }, + }, + { + { + {4765314848902696, 4047154143755239, 3748677840535530, 5003339347891547, 4892630780044264}, + {717255318455100, 519313764361315, 2080406977303708, 541981206705521, 774328150311600}, + {1997217696294013, 1717306351628065, 1684313917746180, 1644426076011410, 1857378133465451}, + }, + { + {4274106452868777, 5229895690942370, 4818944681819138, 3310533142834467, 5951800763431172}, + {3727234538477877, 2328731709971226, 3368528843456914, 2002544139318041, 2977347647489186}, + {1710065158525665, 1895094923036397, 123988286168546, 1145519900776355, 1607510767693874}, + }, + { + {6052094801116259, 4945910156597034, 3249872360685630, 5056653985755776, 5148423953746665}, + {2813405189107769, 1071733543815036, 2383296312486238, 1946868434569998, 3079937947649451}, + {1445526537029440, 2225519789662536, 914628859347385, 1064754194555068, 1660295614401091}, + }, + { + {5380526401591301, 2806418790173460, 3263856123526812, 3091761635239858, 3666299153992924}, + {3451490036797185, 2275827949507588, 2318438102929588, 2309425969971222, 2816893781664854}, + {703047626104145, 1266841406201770, 165556500219173, 486991595001879, 1011325891650656}, + }, + { + {4838486554794399, 4993110726592022, 4632760493337220, 3972608926828727, 2871500009334501}, + {1622861044480487, 1156394801573634, 4120932379100752, 2578903799462977, 2095342781472283}, + {1646545795166119, 1758370782583567, 714746174550637, 1472693650165135, 898994790308209}, + }, + { + {4062996033667232, 5572569452904097, 4793202602203933, 4240755857296838, 5367161970768862}, + {2585203586724508, 2547572356138185, 1693106465353609, 912330357530760, 2723035471635610}, + {906282429780072, 2108672665779781, 432396390473936, 150625823801893, 1708930497638539}, + }, + { + {3731585820952935, 6242481486437170, 4572245823847061, 4398306869785574, 5751262444905966}, + {925664675702309, 2273216662253932, 4083236455546587, 601157008940112, 2623617868729744}, + {52035296774456, 939969390708103, 312023458773250, 59873523517659, 1231345905848899}, + }, + { + {4632957969763174, 4184611431390023, 5680349018170176, 4901639977232284, 5674379295460919}, + {2895154920100990, 2541986621181021, 2013561737429022, 2571447883196794, 2645536492181409}, + {2051980782668029, 121859921510665, 2048329875753063, 1235229850149665, 519062146124755}, + }, + { + {4207228868621988, 4953881226819951, 4139842782246336, 4298958943276773, 3359727402165629}, + {947983997565204, 1512975730400883, 4017071259732234, 765863411195419, 2287620622340759}, + {2248717923990509, 953644234015146, 118881148429301, 1244045737066019, 519708790776758}, + }, + { + {5697680122778496, 6228365759267448, 4861216723530833, 4702869303488893, 5552489090348314}, + {1440754265571108, 2717772629254708, 2851948946836421, 3389483713931559, 1448786922664578}, + {843777949621211, 1435525643946674, 1087149831109219, 1794919173070415, 1112222323032617}, + }, + { + {5102037877608319, 4652686712219969, 3897951345871191, 3585818368367414, 5206224086433126}, + {1659077274827511, 3292962448731851, 3877468219103951, 1516723029470630, 2756801757695330}, + {1080269027468022, 217052522911549, 1656325362355128, 1627927536138189, 547476742306034}, + }, + { + {4629572650764889, 5482991583454262, 5026118951697692, 3386284302539994, 4183091862778757}, + {4049116095173975, 2853051218008192, 874408124299498, 2811479573934506, 3061819813989639}, + {1673853233469462, 2069508754540826, 444570721431342, 318669192295723, 1286647860911061}, + }, + { + {5230179910306733, 4570722910725029, 2679420725332655, 3219299251684998, 5101899978929471}, + {3368016050367733, 1864179846991811, 2025579249953153, 2185933453914170, 3081358815633795}, + {1120488984292940, 268864491510849, 230793761352121, 54153081190951, 1544798876643945}, + }, + { + {4594071143939477, 4032573207368795, 3586642054806445, 2633280388282362, 4204685405148786}, + {3215023450765629, 1989745848107067, 2317683847606295, 2073505048594828, 792770882411102}, + {213368529611304, 716996641453362, 1913278462832177, 1585475497182388, 563601091454134}, + }, + { + {2835663672936090, 4829603014808807, 3487022863582034, 2792788055117753, 4407939774570859}, + {1893732627269868, 2896260158734549, 1988156739597398, 2606708976150985, 1947694156880429}, + {1687313081048019, 7705508083870, 487993091259388, 560742684726806, 779697153923449}, + }, + }, + { + { + {4089455896800313, 6013733676182565, 5409863301562555, 4072864011490980, 5068974752046796}, + {3859970785658325, 2667608874045675, 1350468408164765, 2038620059057678, 3278704299674360}, + {578027192365650, 2034800251375322, 2128954087207123, 478816193810521, 2196171989962750}, + }, + { + {4965788985850512, 4036616547844474, 3863134115336615, 3555738077628787, 5211189187689919}, + {1633188840273120, 3104586986058956, 1548762607215795, 1266275218902681, 3359018017010381}, + {1038829280972848, 38176604650029, 753193246598573, 1136076426528122, 595709990562434}, + }, + { + {4508300680732578, 6151240693672842, 5551152629612579, 4175434827081223, 4710569942272560}, + {3660251634545082, 2194984964010832, 2198361797561729, 1061962440055713, 1645147963442934}, + {1750479161778571, 1362553355169293, 1891721260220598, 966109370862782, 1024913988299801}, + }, + { + {5140408161043668, 3514001525352806, 4894551007701094, 3915220506382540, 5065550949127901}, + {2464498862816952, 1117950018299774, 1873945661751056, 3655602735669306, 2382695896337945}, + {520731594438141, 1446301499955692, 273753264629267, 1565101517999256, 1019411827004672}, + }, + { + {3716451775537782, 3735537109406964, 3771250375020764, 3413229645449032, 4909514625550472}, + {3178327305714638, 3443653291096626, 734233225181170, 2435838701226518, 4042225960010590}, + {996126634382301, 796204125879525, 127517800546509, 344155944689303, 615279846169038}, + }, + { + {5126516964784293, 5722588804459529, 5788457340217086, 5474101689079853, 4854624835487584}, + {2990523894660505, 2188666632415295, 1961313708559162, 1506545807547587, 3403101452654988}, + {2067814584765580, 1677855129927492, 2086109782475197, 235286517313238, 1416314046739645}, + }, + { + {5182089550298661, 4268457398409278, 4594577010420123, 5530431534605076, 5118871120313016}, + {2838644076315587, 2559244195637442, 458399356043425, 2853867838192310, 3280348017100490}, + {301225714012278, 1094837270268560, 1202288391010439, 644352775178361, 1647055902137983}, + }, + { + {5639203700568665, 3935121894170720, 5272747431747178, 4338487944274660, 5404045310490874}, + {1210746697896459, 1416608304244708, 2938287290903104, 3496931005119382, 3303038150540984}, + {1971518477615628, 401909519527336, 448627091057375, 1409486868273821, 1214789035034363}, + }, + { + {5099963449143288, 5521329395009146, 5925708408867572, 4221709339736212, 4612387286592975}, + {1894554173291056, 3439387781984292, 2885767225889068, 620075308547710, 1923191105660691}, + {2193142205372254, 2249202758109308, 136771833945490, 2136446252990850, 1913453314551631}, + }, + { + {3519416739470062, 5800837512824035, 5629830750568439, 3858242948002290, 4384918516791051}, + {1031287572005306, 2743053635058531, 1307200063174499, 886968262945288, 322139622562321}, + {1603190765881197, 1131168289986667, 1851325240689452, 1811918922856612, 1688789764638099}, + }, + { + {5675121438563826, 3813646429348722, 6155915780969232, 4550135853787182, 3281226794470063}, + {1227916715088978, 3565721991039408, 2825753167382054, 446650609575830, 3201068492916497}, + {465975618381320, 1757724298980204, 2172737911773281, 1844204403201116, 367200393612929}, + }, + { + {4053304559591831, 4763567221009860, 6256382270106074, 5569940279565028, 4297628970970611}, + {522695684014153, 2454309386747442, 1812320598717590, 1790060723730286, 513480358702681}, + {1695032670616248, 1588968761785032, 699742416328216, 547685855993128, 1790235994988743}, + }, + { + {3776137870634381, 3800031162558423, 5542451196069607, 4330978223940644, 5450131593237007}, + {3411403847639229, 1506626399353463, 2324339461338721, 1195836709245006, 2829489236982793}, + {263703254267006, 1082588170565097, 2024394221181425, 46543794553459, 2110417854356146}, + }, + { + {5712489756196259, 4857601027744288, 4243491518458906, 4901936639181452, 4456074323550475}, + {2520601556174181, 1164555774547222, 2770926848501726, 3208860864993280, 497236288525621}, + {247502314830666, 1623351904090299, 1162047175878913, 1697644630093486, 776531516340321}, + }, + { + {2686302584388573, 3722578779150130, 6045187633044733, 3467509394641570, 3302975571798606}, + {2408284467064191, 2899235622132542, 2270755745458389, 1460665123127634, 2622446416668442}, + {625008843842459, 305089228555404, 1124988453243439, 123919845855976, 788637610781258}, + }, + }, + { + { + {3297030136943183, 5321806228516302, 2882313002761349, 3923846342683379, 5310803644932932}, + {1364039144731711, 1897497433586190, 2203097701135459, 2397261210496499, 1349844460790698}, + {439961968385997, 386362664488986, 1382706320807688, 309894000125359, 2207801346498567}, + }, + { + {4255565910583278, 4673673686605660, 3392924072653217, 3737219707166220, 3825562634713972}, + {3480804500082836, 3172443782216110, 2375775707596425, 2933223806901024, 1400559197080972}, + {729905708611432, 1270323270673202, 123353058984288, 426460209632942, 2195574535456672}, + }, + { + {4013408251151364, 5086960474897299, 3838506203370739, 4408856413264508, 3422492183371019}, + {1271140255321216, 2044363183174497, 2303925201319937, 3696920060379952, 3194341800024331}, + {871476219910823, 1878769545097794, 2241832391238412, 548957640601001, 690047440233174}, + }, + { + {3251428812313581, 5636436335863895, 4336541488202699, 4972942980386107, 5182382616078529}, + {2548994545820755, 1366347803776819, 3552985325930849, 561849853336293, 1533554921345731}, + {2189427607417022, 699801937082607, 412764402319267, 1478091893643349, 2244675696854460}, + }, + { + {5012160783311108, 5470528103057159, 4488517614835378, 2676343672262544, 4341072770671390}, + {3964091869651792, 2456213404310121, 3657538451018088, 2660781114515010, 3112882032961968}, + {221245220129925, 1156020201681217, 491145634799213, 542422431960839, 828100817819207}, + }, + { + {2810886626483710, 5076777331583206, 6133336711186896, 3651619527147841, 3898754191951285}, + {2405556784925632, 1299874139923976, 2644898978945750, 1058234455773021, 996989038681183}, + {1887963056288059, 228507035730124, 1468368348640282, 930557653420194, 613513962454686}, + }, + { + {5579887344422086, 5618055197913529, 4690896687085975, 4754046511662615, 4136987326235786}, + {1224529808187534, 1577022856702685, 2206946542980843, 625883007765001, 2531730607197406}, + {902497362940219, 76749815795675, 1657927525633846, 1420238379745202, 1340321636548352}, + }, + { + {5132340287409247, 4194838312213087, 4971385975164381, 5596941055673869, 4739013486883497}, + {1129576631190765, 3533793823712575, 996844254743017, 2509676177174497, 3402650555740265}, + {237425418909360, 469614029179605, 1512389769174935, 1241726368345357, 441602891065214}, + }, + { + {5266234055777943, 3166499093963215, 4159587332862448, 3232787848503690, 6261694765772425}, + {2508069708566903, 2982887287210837, 1712829089863354, 1739545432690564, 1853100260794477}, + {4642168584761, 1314096799362798, 1620739012635580, 444075187404753, 76135520441225}, + }, + { + {5167832514805982, 5410004641404511, 3809624149844670, 4773980049888932, 3778278866830004}, + {1717340294466846, 3145810307460687, 1904170181110298, 3950114374260626, 2248427553137502}, + {1356583144121446, 1439603152129038, 880464721166116, 426511648446184, 1044401386572766}, + }, + { + {3827273464157640, 5470853620720833, 4235776821907793, 5432246822532161, 4674460658804935}, + {3682691082267936, 1935676112917301, 3170276622979891, 2876033130676637, 1596266630249199}, + {1484505136430423, 343818915658679, 1066931341976591, 1574952097402529, 895157643469052}, + }, + { + {6636210482709397, 2566644085561849, 4278449441656290, 5708653335234549, 6540605640281063}, + {2193735258244385, 2265742668153213, 2801601661178220, 1573679250261669, 2218164822512395}, + {125908919015544, 908539856510216, 254196493329521, 1841783557943867, 1826956209112337}, + }, + { + {4015848574593688, 5374261932338028, 4759505940569418, 5686761164384680, 3410517186063399}, + {1218465765165754, 1222399589933778, 4149598104194804, 2307999947285970, 2530437726498307}, + {1352017428769842, 1226345478088737, 1834808987089176, 171935268241134, 1252599135760918}, + }, + { + {4391913968320982, 5643346087738336, 3260878495624279, 6345563729780486, 6485738780527396}, + {269241043449612, 1713401415896622, 3060740655644691, 2228155591500882, 2273523243235430}, + {994025955714788, 1395495501299355, 1717525291885154, 64780760930213, 1492125616744822}, + }, + { + {4496571738540020, 6137682561017990, 4165346179942417, 4589212756752962, 5249152453870163}, + {2859457773452122, 2592803086422694, 761249806099561, 4355723617152898, 2688955778843975}, + {686675614020084, 1129369471718576, 1361332769753183, 814390480194826, 1958437091006724}, + }, + }, + { + { + {4212554477605918, 5000640585259457, 4161632664968341, 3523231950682073, 4471580181706187}, + {3988217766743784, 726531315520507, 1833335034432527, 1629442561574747, 2876218732971333}, + {1537037379417136, 1358865369268262, 2130838645654099, 828733687040705, 1999987652890901}, + }, + { + {4063362146350583, 3753681832692920, 4465563314774246, 4863172707090131, 4539970192419610}, + {629042105241795, 1098854999137608, 887281544569320, 3674901833560025, 2259711072636808}, + {218907117361280, 1209298913016966, 1944312619096112, 1130690631451061, 1342327389191701}, + }, + { + {4482501699248035, 5851772807709469, 4424655942309844, 5930138373494266, 4947793108696645}, + {1369976867854685, 1396479602419169, 4017456468084104, 2203659200586298, 3250127649802489}, + {784210426627951, 918204562375674, 1284546780452985, 1324534636134684, 1872449409642708}, + }, + { + {4153660020381144, 4256288935750983, 3877646875253483, 3225329557085126, 4327087498998152}, + {2571438643225542, 2848082470493653, 2037902696412607, 1557219121643918, 341938082688094}, + {1371853944110545, 1042332820512553, 1949855697918254, 1791195775521505, 37487364849293}, + }, + { + {4334516943269102, 4531429052909917, 4649254694042464, 3942327023530758, 6368860137043973}, + {687200189577836, 1082536651125675, 2896024754556794, 2592723009743198, 2595381160432643}, + {1059729620568824, 2163709103470266, 1440302280256872, 1769143160546397, 869830310425069}, + }, + { + {4276621734726805, 4930548302820644, 2846933097770719, 4975460488256465, 2852121493098246}, + {3861316033464273, 777277757338816, 2101121130363987, 550762194946473, 1905542338659364}, + {598474602406721, 1468128276358244, 1191923149557635, 1501376424093216, 1281662691293476}, + }, + { + {2971320059272372, 4896980339002840, 4635950028233875, 3795071084495975, 4071343109483907}, + {1721138489890688, 1264336102277790, 2684864359106535, 1359988423149465, 3813671107094695}, + {396397949784152, 1811354474471839, 1362679985304303, 2117033964846756, 498041172552279}, + }, + { + {5154223559778472, 3389351102095821, 4377023217300786, 3977457826906518, 4386692778803043}, + {1812471844975748, 1856491995543149, 126579494584102, 3288044672967868, 1975108050082549}, + {522584000310195, 1241762481390450, 1743702789495384, 2227404127826575, 1686746002148897}, + }, + { + {4080889153606423, 5116319911316914, 4006591728131774, 4350736921528591, 4198995697088691}, + {3932341308304797, 1612580099028530, 2937385230920440, 1836672506516533, 517164940700103}, + {1413348606155183, 810499206093511, 1138057743946731, 1556315649471799, 993617155135620}, + }, + { + {5656453792030509, 6079591987914126, 5929179648294721, 5230798899043491, 3370342887971873}, + {2735841961308013, 2116601197688202, 2652241807415589, 1945152844924315, 2885012584681659}, + {551620533268687, 1182887684657061, 1043366705332762, 944140538303658, 2240921917214007}, + }, + { + {2427888929082724, 4467682652740956, 5335339067201761, 5550886290485514, 5050956980777821}, + {2247945978763224, 215736457901546, 1047424049356243, 1389596126698944, 816935367913617}, + {1146743855918524, 1418503734887175, 843342293437400, 1502230097098390, 1240491010654824}, + }, + { + {6701933119211633, 5059229274152685, 4982837924778640, 4159052306481152, 4290369756778959}, + {2204538589507457, 3142843240983995, 2451576614290660, 3204217003708084, 2887474477188681}, + {510455031824465, 465163402943305, 2022658124081289, 1881132727821470, 31746160856543}, + }, + { + {5097091659825113, 2826376647382075, 3998920599703675, 3513481695405562, 5076475699131519}, + {1330330618013145, 2313004235002329, 3963525218487729, 2303930585911304, 2755772190474933}, + {944243695677568, 255912283647788, 1855489019383837, 1244636060478392, 1911682985774639}, + }, + { + {5024454158738700, 2514912085825565, 3852574473189297, 4034915921452192, 3904120669219782}, + {3843903221055742, 2416642267747155, 1715729591405051, 1735036083660438, 1182009761997504}, + {1140604273028187, 1352033415206334, 1448886815181311, 941652546197192, 1001542060535421}, + }, + { + {4277058348919964, 5364603224614130, 5366326037527057, 4814184001945705, 5895346951506596}, + {3602696745610322, 2198425366751348, 1768623515003979, 2456584282641319, 3022619356175890}, + {1305849451281975, 726672899606505, 2105928429843370, 246834240873219, 1573506984361288}, + }, + }, + { + { + {4821701574825479, 4751738035366345, 3733704008989173, 4812878081681692, 3510316573903125}, + {427904865186293, 1703211129693455, 1585368107547509, 3688784302429584, 3012988348299225}, + {1275068538599310, 513726919533379, 349926553492294, 688428871968420, 1702400196000666}, + }, + { + {3810616250567627, 4214696146321770, 5841309449432647, 3753213644462184, 4798035793202427}, + {3313663849950481, 3213411074010628, 2573659446386085, 3297400443644764, 1985130202504037}, + {818359826554971, 1862173000996177, 626821592884859, 573655738872376, 1749691246745455}, + }, + { + {4398313517418541, 5088388527765162, 4968565284650452, 4435773453041373, 4741970786827285}, + {1988022651432119, 3333911312271288, 1834020786104820, 3706626690108935, 692929915223121}, + {1129007025494441, 2197883144413266, 265142755578169, 971864464758890, 1983715884903702}, + }, + { + {4948148597287912, 3704086267538602, 4365531255192057, 2896988087581106, 5313917252680007}, + {1291366624493056, 2633256531874362, 1711482489312443, 1815233647702022, 3144079596677715}, + {2242724082797924, 1373354730327868, 1006520110883049, 2147330369940688, 1151816104883620}, + }, + { + {4667323107306775, 4619024517173644, 3407816205266473, 6398541848123859, 4222349233671575}, + {3997520014069025, 4163522956860564, 2056329390702073, 2607026987995097, 3131032608056347}, + {681981452362484, 267208874112496, 1374683991933094, 638600984916117, 646178654558546}, + }, + { + {2512483707152304, 5357659933447732, 5417239179350606, 4508304204210617, 2532054624493958}, + {2265178468539480, 2358037120714814, 1944412051589650, 4093776581610705, 2482502633520820}, + {715374893080287, 1173334812210491, 1806524662079626, 1894596008000979, 398905715033393}, + }, + { + {4348221360643351, 4174322814635610, 5293430650247335, 4930894772059273, 4824523600532224}, + {2751826223412909, 3848231101880618, 1420380351989369, 3237011375206737, 392444930785632}, + {1927770723575450, 1485792977512719, 1850996108474547, 551696031508956, 2126047405475647}, + }, + { + {2635705015322199, 3111746811317117, 5359223495008139, 3268925594263041, 3046050645563056}, + {2112099158080129, 2994370617594963, 2258284371762679, 1951119898618915, 2344890196388664}, + {77571826285752, 999304298101753, 487841111777762, 1038031143212339, 339066367948762}, + }, + { + {5619164208408509, 4079972709845361, 3927824185200012, 3681293890692042, 5452751544406703}, + {2191882696778049, 531264700870777, 3039670365049278, 1359665656266722, 3162072763716517}, + {1570940255668145, 688547574737286, 1632136413236589, 2053774689811525, 676669102580803}, + }, + { + {5183231995448322, 4155796849234556, 4791323788081582, 4471675968988079, 5711715782924180}, + {3207409007530338, 935702897763596, 729948770061474, 1584905172662705, 2425339805308626}, + {288239669792058, 2152796035840109, 162317061559789, 1257054119617939, 421141027109762}, + }, + { + {4958697699223355, 3221953471379609, 2818398572467973, 5875894486831009, 3850357049774603}, + {642422906756119, 3171839279489789, 1695193497886789, 3040583315302385, 3362141503479163}, + {1042979452017909, 1774768735282920, 464726722030945, 1465185933073826, 1382968477576580}, + }, + { + {3858506126065685, 4410239993278318, 3464562222229353, 3841799127123745, 3236074797259687}, + {3342987691574741, 2002872538662690, 3240810091817983, 3479310152893167, 2490884376592639}, + {2139337814897324, 178720275772072, 596052025976159, 666224594355251, 630639510547398}, + }, + { + {2744437082123657, 4441348097375482, 3869182720347428, 4304304367735980, 3086995265547722}, + {2392789380667179, 812658446707360, 1599624958311986, 214741817968452, 1436587626236000}, + {130387450082061, 1779587373012878, 417414670169839, 716150862374041, 154849814949784}, + }, + { + {4442837550688441, 4997631045842130, 5291735080737359, 4549950120656089, 4456650325708853}, + {2746366883922045, 2305345226446032, 2885706560860073, 4092938150156125, 656228807731693}, + {1456049106825164, 137394514200521, 2140871605490631, 1643256698410764, 679389221519059}, + }, + { + {3925184987729414, 3825370065750239, 2928329430708313, 5366989011209685, 4444246216420488}, + {2346187442256272, 1014027377437197, 2069628555505675, 1559427210701775, 1456229816012936}, + {2009324336353948, 1468073297564484, 1969534512584396, 827056802549955, 104599952309039}, + }, + }, + { + { + {5505012288893163, 2599996010752544, 3918414180409193, 3140224808718007, 2832547501486604}, + {2926794589205781, 2517835660016036, 826951213393477, 1405007746162285, 1781791018620876}, + {1939560076207777, 1409892634407635, 552574736069277, 383854338280405, 190706709864139}, + }, + { + {5180561690600497, 4132075350834054, 4298520825287953, 5392062874453498, 5821901179394561}, + {2177087163428741, 1439255351721944, 3459870654068041, 2230616362004768, 1396886392021913}, + {1466980508178206, 617045217998949, 652303580573628, 757303753529064, 207583137376902}, + }, + { + {4105782219090338, 4130463869936394, 6031610648174487, 5523226095524059, 5632038039559529}, + {3762856566592150, 2357202940576524, 2745234706458093, 1091943425335975, 1802717338077427}, + {1963939888391106, 293456433791664, 697897559513649, 985882796904380, 796244541237972}, + }, + { + {3680158110175880, 5530714909790973, 4808440325428831, 4945009801397122, 4071158169963819}, + {2668570812315008, 2641455366112301, 1314476859406755, 1749382513022778, 3413705412424739}, + {204943430200135, 1554861433819175, 216426658514651, 264149070665950, 2047097371738319}, + }, + { + {5165635210954903, 4790335732463592, 5635372627881110, 5322093841581933, 4976543419424973}, + {1934415182909015, 1393285083565062, 2768209145458208, 3409490548679139, 2372839480279515}, + {665784778135882, 1893179629898606, 808313193813106, 276797254706413, 1563426179676396}, + }, + { + {4283233217201481, 4707596242598657, 4674086796207577, 5485113232161884, 3095373778602077}, + {945205108984213, 2778077376644543, 1324180513733565, 1666970227868664, 2405347422974421}, + {1476570093962618, 838514669399805, 1857930577281364, 2017007352225784, 317085545220047}, + }, + { + {3545343323078703, 4395424422887793, 5561961194168003, 4717696754764488, 3198688329157975}, + {1461557121912823, 1600674043318359, 2157134900399597, 1670641601940616, 2379565397488531}, + {357067959932916, 1290876214345711, 521245575443703, 1494975468601005, 800942377643885}, + }, + { + {5120856274973686, 3903907574784685, 4109012860330718, 3337396988900217, 3069232573515769}, + {2817916472785262, 820247422481739, 994464017954148, 2578957425371613, 2344391131796991}, + {771808161440705, 1323510426395069, 680497615846440, 851580615547985, 1320806384849017}, + }, + { + {6662756671601401, 5055771079546289, 4642910898897859, 4274227027260534, 5833718441044794}, + {2335519494956627, 3820365010713627, 1944201046475949, 1640913863967574, 2358631279976586}, + {990528501134234, 1330224017810407, 1573804236508381, 942270438439677, 25201841708767}, + }, + { + {5526427987749634, 4518401023168866, 4921120012283882, 4779318497665973, 4555652731610533}, + {2646721458762538, 1247587116821480, 2586827199616378, 3932021497491885, 969339720975687}, + {1595456591254808, 1919330451560855, 265402806641622, 1560117962587834, 1169927205192232}, + }, + { + {4189409997656536, 4659089518495636, 6000827340603279, 5702161301408170, 5941261317517041}, + {3317917962903276, 1668664191271588, 1899844145838597, 1696011444672828, 2282054748309227}, + {2126527989994119, 1465890683922518, 416427350021352, 1618807264846944, 1588324622180673}, + }, + { + {4009588676432813, 4225252562340771, 5138392626199289, 6147384375179966, 4323738229760897}, + {2550824143198317, 3724772924079255, 2640826097206085, 2805004284285778, 3725892598967957}, + {901870527597111, 1300831444709451, 1795706127510368, 1590464383227069, 60287918150860}, + }, + { + {4260735023331218, 2752239523202930, 4432983289513289, 6073621772440017, 5069964246448815}, + {2411640257311042, 2404639281373100, 935718519552991, 2182928933394409, 3181304181386605}, + {301088722784222, 902977224984285, 1485824849826196, 864674789855395, 2204280040105719}, + }, + { + {5294452585150653, 4378774784126084, 2684611835446325, 6054460125397337, 3113938028918105}, + {1102630701890799, 2202327440719776, 1844385418066207, 1719220574774295, 3022438833862057}, + {1192644591215061, 1951970263153038, 182489349589207, 1072483329544407, 1425993434915257}, + }, + { + {3759682407110969, 4757463391782573, 6126440026160055, 4699689556446215, 5715476431941391}, + {2696424379059465, 2927324693839557, 2595575928464217, 3964369572567959, 2720628440266425}, + {786193544150213, 816842401151828, 2071842707112420, 581055055128968, 310970557266803}, + }, + }, + { + { + {3579768107573076, 3587300666628503, 3653386978219511, 5061736939322935, 6054960176639396}, + {1219260086131896, 2898968820282063, 2331400938444953, 2161724213426747, 2656661710745446}, + {417621685193956, 1429953819744454, 396157358457099, 1940470778873255, 214000046234152}, + }, + { + {3878872728667188, 4463402894965320, 4164169415301751, 3443570249906556, 4439109571211107}, + {1268047918491954, 2172375426948536, 1533916099229249, 1761293575457130, 3842422480712013}, + {1149147819689533, 378692712667677, 828475842424202, 2218619146419342, 70688125792186}, + }, + { + {4292523638342576, 4903155265245570, 5136143002823489, 3124449750693297, 5738994354400728}, + {3551539230764990, 3690416477138006, 3788528892189659, 2053896748919837, 3260220846276494}, + {2211311599327900, 2139787259888175, 938706616835350, 12609661139114, 2081897930719789}, + }, + { + {4097322728303089, 5725797875706037, 4654440700130628, 4178828883626228, 5693513031868506}, + {1324994503390431, 2588782144267879, 1183998925654176, 3343454479598522, 2300527487656566}, + {1079559557592645, 2215338383666441, 1903569501302605, 49033973033940, 305703433934152}, + }, + { + {3683815626821508, 4943964422665864, 3647446876506747, 4228674336449825, 5438052000093847}, + {2346453219102138, 3637921163538246, 3313930291577009, 2288353761164521, 3085469462634093}, + {1296625309219774, 2068273464883862, 1858621048097805, 1492281814208508, 2235868981918946}, + }, + { + {3534262737397977, 5245485311356750, 4279554456512807, 2770789343226274, 4078409823241192}, + {1490330266465551, 1858795661361448, 3688040948655011, 2546373032584894, 3459939824714180}, + {1525827120027511, 723686461809551, 1597702369236987, 244802101764964, 1502833890372311}, + }, + { + {6545268376680796, 4436205135889147, 3885200451296283, 4362482319222146, 6551744017455139}, + {2365421849929742, 3485539881431101, 2925909765963743, 2114345180342964, 2418564326541511}, + {503058759232932, 760293024620937, 2027152777219493, 666858468148475, 1539184379870952}, + }, + { + {2929839349119735, 5074186917559835, 3857102490299366, 4399562376560948, 3957863610776951}, + {1916168475367211, 3167426246226591, 883217071712574, 363427871374304, 1976029821251593}, + {1439489648586438, 2194580753290951, 832380563557396, 561521973970522, 584497280718389}, + }, + { + {4107979200870526, 4899400547785857, 5175087145170849, 5761419237914916, 2674185367684618}, + {1133946710417756, 499737269360777, 1645961935513831, 2259932248870354, 2394185034627430}, + {2211650710341615, 1916525167795392, 2219254718801699, 1123275886572725, 2065912631812720}, + }, + { + {2942743383283030, 4661681143781323, 4853180648224206, 3984362536169634, 3769046963947699}, + {2547466619616960, 1599890997313053, 1767449403100900, 3146589914609346, 2442645855602917}, + {1023269497317835, 1006858415503750, 2159836138753919, 1535892167365222, 826474553854585}, + }, + { + {4044410514205452, 4788613576788997, 4922881390894542, 4505428839963076, 3254381502973105}, + {2881011303685958, 323260022642283, 2392511825935364, 2680218607241472, 2086628284323147}, + {1011041096783712, 1570461284958064, 399516828994561, 1037957371973381, 293292885426852}, + }, + { + {3922699440356983, 4166667378343946, 4637678914861614, 4901406304713256, 5486018227566634}, + {3894750463833161, 836931108663410, 4007195920412586, 1173057924841174, 2662523305285872}, + {2047497366930440, 1249020434696646, 353399299276962, 1824831452522161, 1950016482901783}, + }, + { + {6367491312268994, 5392176809230541, 4683379383522741, 4425977262002237, 5566950871345983}, + {2375227161224824, 2257267128164595, 1056955680380401, 2844088942852363, 1386644755985081}, + {1251794829999036, 1772886866476173, 955066187540246, 1232293719330892, 396636503102089}, + }, + { + {5348918388440793, 5110360065015040, 4585673363095533, 4391593798666572, 4556880644633940}, + {2531431177429893, 1987695830473810, 227622233346307, 1010967397553478, 1341018389661594}, + {83039271672929, 423138535583767, 1183109031328467, 165324254826210, 1340545562288681}, + }, + { + {4651180052187971, 4721139042433965, 4397263424421690, 3818446426246947, 4163799598655846}, + {1971810452973589, 1766684231420693, 299216980507446, 1405770006429853, 3505404036582454}, + {814876839307346, 1973981610718707, 715190907115349, 1240128743335375, 100752655285750}, + }, + }, + { + { + {5917065716904928, 4914443718136124, 5900862973774566, 4911826770493904, 3846361616833057}, + {2439789269177838, 681223515948274, 1933493571072456, 1872921007304880, 2739962177820919}, + {2102170800973153, 719462588665004, 1479649438510153, 1097529543970028, 1302363283777685}, + }, + { + {5650165172926835, 3913771113130458, 4910281332119388, 5068052063776583, 5612709493199633}, + {3193865531532443, 3321113493038208, 2007341951411050, 2322773230131539, 1419433790163705}, + {2214421081775077, 1165671861210569, 1890453018796184, 3556249878661, 442116172656317}, + }, + { + {5118771546583273, 6027449032225062, 3106360274232749, 4318897183975962, 4017125662271289}, + {3005630360306059, 1666955059895018, 1530775289309243, 3371786842789394, 2164156153857579}, + {1094538949313667, 1796592198908825, 870221004284388, 2025558921863561, 1699010892802384}, + }, + { + {3266123011223623, 3120950453625853, 6259609570067094, 3586752371060918, 6048545006453369}, + {1951351290725195, 1916457206844795, 2449824998123274, 1909076887557594, 1938542290318919}, + {764055910920305, 1603590757375439, 146805246592357, 1843313433854297, 954279890114939}, + }, + { + {4578096739917745, 5243693780562643, 3997054445402827, 5231313513873625, 3534834178102174}, + {80113526615731, 764536758732259, 3306939158785481, 2721052465444637, 2869697326116762}, + {525892105991110, 1723776830270342, 1476444848991936, 573789489857760, 133864092632978}, + }, + { + {4567722854714830, 3491727534333040, 3612522797131151, 4726210441025156, 4566029114558485}, + {2794411533877810, 1986812262899320, 1162535242465837, 2733298779828712, 2796400347268869}, + {1793193323953132, 91096687857833, 70945970938921, 2158587638946380, 1537042406482111}, + }, + { + {4644957907857340, 4595035516942998, 5590808199923137, 4081399466208167, 3445106834328894}, + {1895854577604590, 3646695522634664, 1728548428495943, 3392664713925397, 2815445147288308}, + {1611230858525381, 950720175540785, 499589887488610, 2001656988495019, 88977313255908}, + }, + { + {5377566504324214, 5594237977720934, 3960359138874383, 2924144408487157, 5824037597070734}, + {3440880315164906, 2184348804772596, 3292618539427567, 2018318290311833, 1712060030915354}, + {1508590048271766, 1131769479776094, 101550868699323, 428297785557897, 561791648661744}, + }, + { + {4856954879111275, 4243615896786977, 5034997993102829, 5162125577354786, 4490078142041683}, + {432920540217177, 290770592514699, 627484756484379, 3076610223383366, 982836063036305}, + {1857779135539838, 1774848070278290, 1383862392183037, 1948805685118077, 1143607656457264}, + }, + { + {5925968830616980, 5475584226682352, 5076614308992012, 5422447722241084, 4871259074999718}, + {1741735203658460, 2040511596280954, 3245879940788742, 1750904751318660, 1289068422789788}, + {103031326341235, 1843731695283489, 1066974994445109, 1210433521778964, 118970268237578}, + }, + { + {5029675928196841, 3837944199959690, 3856667351331398, 4299101000305422, 4340504849680591}, + {1990983617046169, 3106460878930032, 1275461113767736, 1443049000516840, 1724142301140669}, + {888262946735860, 1859763056800716, 714395964694532, 57820586821189, 354182478325612}, + }, + { + {3800325421725661, 5577357186452733, 3783169523012609, 5425955064608896, 6347571520159237}, + {1658219197861187, 1494360717755939, 1921505970326949, 3049386312266838, 2475279382922093}, + {1290766154788448, 1600589032610209, 784792370088015, 423204440383515, 459184860068298}, + }, + { + {3425205252763663, 5240056527358710, 4140356292677088, 4578393707504979, 5259386798582854}, + {2215101089214073, 1997062079162084, 1249116849924618, 465107085276733, 1293244424458276}, + {880894898454805, 639667973647762, 200272726605326, 297199521205209, 1640420309599773}, + }, + { + {4024399276644653, 4828207338948134, 4459991457755541, 6377452215012324, 4100282940590511}, + {658635179203333, 3717891363165700, 3673816673290121, 2129566854376278, 1443087419989351}, + {1532654097308642, 1958497386525981, 111717506991097, 1708848284574815, 1306115185198907}, + }, + { + {6112399743594082, 4482370964094274, 5295504988778619, 4900443159383520, 4202262340818045}, + {2039429018914652, 3043146685732704, 1364716986897875, 1031303003048000, 1123429638631433}, + {765045651502510, 451621180435426, 15885268584069, 767513226653014, 768056106241896}, + }, + }, + { + { + {4032987623010691, 3949423965177593, 3633193504625235, 4678793759655164, 3734854480100484}, + {3008217384184691, 2489682092917849, 2136263418594015, 1701968045454886, 2955512998822720}, + {2175517777364616, 708781536456029, 955668231122942, 1967557500069555, 2021208005604118}, + }, + { + {3694962906564668, 2643675345331409, 4432646948339879, 4968138170389248, 3845898010522424}, + {3366935780292116, 2476017186636029, 915967306279221, 593866251291540, 2813546907893254}, + {850858855888869, 319436476624586, 327807784938441, 740785849558761, 17128415486016}, + }, + { + {3776976050663564, 5477805104091557, 2545236069347884, 4651869248468534, 4641561625804457}, + {2132756334090048, 2788047633840893, 2300706964962114, 2860273011285942, 3513489358708031}, + {1121075518299410, 2071745529082111, 1265567917414828, 1648196578317805, 496232102750820}, + }, + { + {5158525177930532, 3420610809262104, 2827455773116173, 5409358332231883, 5000374192034028}, + {2374121042985030, 3274721891178932, 2001275453369483, 2017441881607947, 3245005694463250}, + {1954109525779738, 2117022646152485, 338102630417180, 1194140505732026, 107881734943492}, + }, + { + {4610031103869799, 4566082599491057, 6017046282479905, 5310858379140016, 4504138118839608}, + {1714785840001267, 4288299832366837, 1876380234251965, 2056717182974196, 1645855254384642}, + {2002850762893643, 1243624520538135, 1486040410574605, 2184752338181213, 378495998083531}, + }, + { + {4119798625761979, 5219024680951196, 4543568213831910, 4424867828271409, 5157422279171799}, + {922510868424903, 1089502620807680, 402544072617374, 1131446598479839, 1290278588136533}, + {162892278589453, 182585796682149, 75093073137630, 497037941226502, 133871727117371}, + }, + { + {4201115364782060, 3320803158679711, 4190964847185163, 3800027019416103, 4185567469546654}, + {4166396390264918, 1608999621851577, 1987629837704609, 1519655314857977, 1819193753409464}, + {1730519386931635, 1393284965610134, 1597143735726030, 416032382447158, 1429665248828629}, + }, + { + {4551201741097278, 3774114323393256, 2689506075058172, 3065835144123274, 2587730464618792}, + {360275475604546, 2799635544748326, 2467160717872776, 2848446553564254, 2584509464110332}, + {1291597595523886, 1058020588994081, 402837842324045, 1363323695882781, 2105763393033193}, + }, + { + {5895867926878639, 6191714343966274, 3878657686711880, 3772412065246579, 5254560912358513}, + {1828399243003455, 2730967851207580, 2809663501613790, 3291961475373747, 2085819249159773}, + {1604304703501714, 1563946362290690, 2128875205288733, 257625874150601, 2149102916187814}, + }, + { + {5883573429799187, 4805272859062230, 2886195180819460, 4460210052098162, 3528150621150027}, + {1960233741679201, 2996857902780426, 2245274121401778, 4454263006625692, 1110175461750907}, + {1392548583294657, 697289852607029, 746483005053522, 734366559550160, 929768637070953}, + }, + { + {5047299589947009, 4992620901798841, 5716112978503343, 3741839332315327, 4983937719789158}, + {1673816614349955, 3255360796858239, 2753984593405885, 2969035246796379, 2420194805583742}, + {1159863250954626, 1438000622355742, 254045494246044, 1734996482788294, 484539502358623}, + }, + { + {3740619537304301, 4538691700403019, 5325131682689719, 4744914552382795, 3720848390661317}, + {1212935253295623, 2026300849238541, 3447883684227245, 1364910689032303, 3019520894163467}, + {2014517785153097, 1607430272140319, 1855018731367383, 2200629261829065, 987339037980209}, + }, + { + {4426735416351775, 4348191232564971, 5508438055207952, 2420023948055060, 6131298111765032}, + {2763109171958591, 4020627496535071, 3147539030064750, 2177710318971894, 2463269685396658}, + {831460863845953, 1946524324541207, 761958653274011, 1366775091595921, 1187427455457947}, + }, + { + {3125773853625002, 4814913241945202, 4262512130702308, 3321059176595839, 3567623941809388}, + {2822285257464218, 607639870769094, 2857291392676774, 2362021242026611, 3328398883102618}, + {1972329598509655, 34473001166350, 1728817301333588, 1539479676009467, 1694458836743324}, + }, + { + {4805304108915754, 5125985383393506, 5019883131944028, 4580919291870093, 4156575634700942}, + {1575955157633628, 3067048601687650, 2501496271474334, 4193474980184415, 3288209175931426}, + {1442686188453203, 1751694580158105, 824989332883473, 614995267948452, 1497907423783166}, + }, + }, + { + { + {4408790844622027, 4479344310838572, 4120849908116869, 3006675674164362, 4006042157952305}, + {2361321796251793, 3967057562270386, 1112231216891515, 2046641005101484, 2386048970842261}, + {1846089562873800, 98894784984326, 1412430299204844, 171351226625762, 1100604760929008}, + }, + { + {5371908961903233, 6206610140112367, 4204489822423303, 4507924897296559, 4322883368647362}, + {2335972195815721, 2751510784385293, 425749630620777, 1762872794206857, 2864642415813208}, + {523094549451158, 401938899487815, 1407690589076010, 2022387426254453, 158660516411257}, + }, + { + {3975648787468681, 4460622334219928, 3970548136462187, 4226068267807189, 3446012315943388}, + {612867287630009, 2700012425789062, 2823428891104443, 1466796750919375, 1728478129663858}, + {1254114807944608, 977770684047110, 2010756238954993, 1783628927194099, 1525962994408256}, + }, + { + {5270938303411141, 3005889362003651, 3774991859324322, 4939345652492557, 5016292135810879}, + {2484263871921055, 1948628555342433, 1835348780427694, 1031609499437291, 2316271920603621}, + {1255955808701983, 1700487367990941, 1166401238800299, 1175121994891534, 1190934801395380}, + }, + { + {5381119574505877, 4424637839817897, 4775904018594624, 3906943141245230, 5389829033800309}, + {2600943821853521, 1337012557669161, 1475912332999108, 3573418268585706, 2299411105589567}, + {375806028254706, 214463229793940, 572906353144089, 572168269875638, 697556386112979}, + }, + { + {4199915895763317, 4306698118173043, 4456738998669147, 4714126432522633, 3038393400292872}, + {1168827102357825, 823864273033637, 4323338565789945, 788062026895923, 2851378154428610}, + {1915320147894736, 156481169009469, 655050471180417, 592917090415421, 2165897438660879}, + }, + { + {3081796668531198, 4720661405375633, 3938365723488886, 5850548444590341, 6227423178100675}, + {1726336468579724, 1119932070398949, 1929199510967666, 2285718602008207, 1836837863503149}, + {384301494966394, 687038900403062, 2211195391021739, 254684538421383, 1245698430589680}, + }, + { + {3700877198419411, 4541885072828491, 4388337472863078, 4398292814526820, 5228760778493620}, + {1247567493562669, 4229981908141095, 2435671288478202, 806570235643434, 2540261331753164}, + {1201928866368855, 800415690605445, 1703146756828343, 997278587541744, 1858284414104014}, + }, + { + {3752846457602541, 6051774917153047, 3492614771149749, 5278195549012933, 3851678670548516}, + {1251637423994861, 2037585266091733, 1171182249847439, 1503770304884899, 1938920423810268}, + {2232651154426557, 514116965743385, 983369998596377, 1516132019440103, 1692302360068816}, + }, + { + {4860689994687041, 4138464101331517, 4969836424606600, 3370757908330089, 3017690336853320}, + {3753543276036939, 3037198013841237, 3063121586956950, 2967087171212783, 2388800428725970}, + {1485716675407214, 1159619625081800, 197549418633523, 776030397384998, 252064880140599}, + }, + { + {4116450327020509, 4602447751059104, 4624188822504437, 3786392386215792, 4018069243702311}, + {3871066258534097, 182982139320960, 3846997414183091, 1246347657803786, 966334158538299}, + {2049526525941781, 1431983169228179, 3669291297222, 769041933664973, 1760968694339914}, + }, + { + {5411552533375856, 4680723354107633, 5764453140711672, 3663956673248104, 5834177820168369}, + {2029548972200054, 541413050113871, 2564963424993232, 3150712544977872, 2699322542672271}, + {513500031822581, 836561902873502, 82127696349010, 1591221763097659, 725989684331322}, + }, + { + {4424236584915172, 3098952863411429, 2785705377786181, 4107549518995786, 5362683219257666}, + {1071376590195254, 1910139340535847, 1936705400579295, 3523841068963764, 2356086500199738}, + {357287898232758, 1026512116626804, 1875958986125314, 1743551742697910, 1876232951311596}, + }, + { + {4332669232306147, 5882550009365637, 3881970305785489, 6570990168178499, 3489314838073396}, + {294975596735049, 2145292931466411, 3320625656613141, 2284954433570209, 3090254877821144}, + {1234852195927098, 3815763342761, 2085449281682153, 516098044852331, 164426832090235}, + }, + { + {3292223948318582, 4463121371440286, 5163264330075513, 4550237542693388, 4544934760614835}, + {2590122580645644, 1011386629068498, 960875975353535, 3791419723576010, 2273772136048635}, + {1749858954947675, 1561651915395372, 1738700200168191, 397865176422134, 1467025336447738}, + }, + }, + { + { + {3011428551915689, 3264493287961099, 4857379860456993, 4749679688758046, 4282178671364408}, + {2608268623334125, 3034173730618399, 1718002439402869, 3644022065904502, 663171266061950}, + {2040672435071076, 888593182036908, 1298443657189359, 1804780278521327, 354070726137060}, + }, + { + {4711536788361604, 4516566538409613, 5324597415653586, 3262240285890532, 3953172703826057}, + {1894938527423184, 3715012855162525, 2726210319182898, 2499094776718546, 877975941029127}, + {218882774543183, 533427444716285, 1233243976733245, 435054256891319, 1509568989549904}, + }, + { + {4802737216830789, 3846171402668813, 5371658121409568, 4761371218007175, 4056812806828167}, + {4140638349397055, 3303977572025869, 3465353617009382, 2420981822812579, 2715174081801119}, + {1806842755664364, 2098896946025095, 1356630998422878, 1458279806348064, 347755825962072}, + }, + { + {5169106331623846, 4777370102540357, 5302836601573124, 5351928617448052, 4063248596493177}, + {1402334161391744, 3811883484731547, 1008585416617746, 1147797150908892, 1420416683642459}, + {1468412523962641, 771866649897997, 1931766110147832, 799561180078482, 524837559150077}, + }, + { + {5770203524895319, 4659978036228594, 3527448837914025, 4951338033258915, 4756786089433589}, + {2223212657821831, 2882216061048914, 2144451165500327, 3068710944633039, 3276150872095279}, + {2022215964509735, 136144366993649, 1800716593296582, 1193970603800203, 871675847064218}, + }, + { + {5731767721917939, 4837733510733388, 5091167195790575, 4937212217651675, 5106990027743699}, + {1862751661970309, 851596246739884, 1519315554814041, 3794598280232697, 3669775149586767}, + {121893973206505, 1843345804916664, 1703118377384911, 497810164760654, 101150811654673}, + }, + { + {2836122124869624, 4884260866172613, 4618439021898554, 2906882084185319, 4363655839720099}, + {2710146069631716, 2542709749304591, 1452768413850678, 2802722688939463, 1537286854336537}, + {996965581008991, 2148998626477022, 1012273164934654, 1073876063914522, 1688031788934939}, + }, + { + {3949497701489527, 5838943331198768, 5334888242577534, 5453016312620545, 4792359904762516}, + {3175286832534829, 2085106799623354, 2779882615305384, 1606206360876187, 2987706905397772}, + {1419122478109648, 1325574567803701, 602393874111094, 2107893372601700, 1314159682671307}, + }, + { + {4954618339278337, 3422305785425208, 4565328836139485, 3192891441493866, 4836379953614308}, + {855396458506247, 2470294140783466, 4436061492213979, 1754097632720488, 4112391040574456}, + {985511568884890, 583904209238998, 516128993365349, 1235577837475387, 1449904660690748}, + }, + { + {5895940682517746, 4393238442290827, 4244687834629046, 5245476345580864, 4795864303032094}, + {1477173810966796, 3207978347793495, 2656860913951054, 825157489520718, 2782873637674750}, + {12931323257125, 562700432679180, 780577595442459, 440747171628074, 31993258894121}, + }, + { + {5231235667053925, 5090675513104692, 4933657013889560, 5325938777525481, 4583903281916140}, + {2159229926833831, 1114556221271056, 2050697214928106, 2553796628978461, 2874553280901592}, + {1487427059839672, 1966052937474419, 398866894053509, 2040723626090668, 1223074007342359}, + }, + { + {3294796902098517, 3902877656361122, 4227499257540629, 5627711142390550, 5038311124292534}, + {2677874505039557, 678833394869758, 3687464289589147, 1992670845292812, 654778477108270}, + {651854196246431, 2602668557028, 1822678077647200, 2072267608435533, 435243653222236}, + }, + { + {4313218743534013, 3972172746637215, 5399714135650344, 5547659251980199, 4837224811093838}, + {2487053592812311, 2315738098787275, 1210583464083714, 1056644723032111, 781277197910636}, + {864616322745343, 1362699579128647, 1361407419724038, 495664202671974, 662016549521786}, + }, + { + {6154029469581357, 5498138279894180, 3281752713530018, 3501917375982713, 4910547940594210}, + {2672416110637939, 3245298985644332, 1344078619347414, 2037703067415133, 2697812769645364}, + {325041473989085, 842410640177049, 1052993540865892, 2093280369201601, 361408260911216}, + }, + { + {4388597398802075, 4997551911436129, 2851157853262017, 4795345418726848, 4139150667184165}, + {1519253497716003, 3826826078266703, 2262276529333275, 1386373334348474, 3240242941348023}, + {763973845167102, 1151501355459051, 1283654593302800, 584312404348728, 1219116745359281}, + }, + }, + { + { + {5676939182921069, 5322204711648077, 4551121131734783, 5427708347935459, 5239023033125000}, + {2201150872731785, 2180241023425241, 2349463270108411, 1633405770247823, 3100744856129234}, + {830104860549448, 1886653193241086, 1600929509383773, 1475051275443631, 286679780900937}, + }, + { + {4781988283280724, 4990742996470332, 5431361832879221, 4684617167544704, 3868686514426533}, + {3828911108518224, 3282698983453994, 2396700729978777, 4216472406664814, 2820189914640497}, + {1191033906638969, 940823957346562, 1606870843663445, 861684761499847, 658674867251089}, + }, + { + {5126469419668815, 4155719092635613, 4174388435346876, 3772374525285681, 5590700387545135}, + {1875032594195527, 1427106132796197, 2976536204647406, 3153660325729987, 2887068310954007}, + {25465949416618, 1693639527318811, 1526153382657203, 125943137857169, 145276964043999}, + }, + { + {4258045666458167, 5238362362206654, 4758242557133921, 3658013106441212, 2491103563202933}, + {2466539671654587, 920212862967914, 4191701364657517, 3463662605460468, 2336897329405367}, + {1619678837192149, 1919424032779215, 1357391272956794, 1525634040073113, 1310226789796241}, + }, + { + {4248523125120879, 4096142580252307, 5489055327836539, 3417724495086206, 4815108317240624}, + {3292563523447371, 1704449869235351, 2857062884141577, 1998838089036354, 1312142911487502}, + {43173156290518, 2202883069785309, 1137787467085917, 1733636061944606, 1394992037553852}, + }, + { + {4449014387058033, 5297853724611810, 5533789687884231, 2519432329227148, 4292277862887871}, + {670078326344559, 2807454838744604, 2723759199967685, 2141455487356408, 849015953823125}, + {1812516004670529, 1609256702920783, 1706897079364493, 258549904773295, 996051247540686}, + }, + { + {5827060326775227, 5766290385251485, 3123576947163146, 5563678522359472, 3964036703348132}, + {1540374301420565, 1764656898914615, 1810104162020396, 3175608592848336, 2916189887881826}, + {1696163952057966, 1391710137550823, 608793846867416, 1034391509472039, 1780770894075012}, + }, + { + {5101135942842208, 4543974686113080, 4194056217641295, 5689084272866427, 2564466095709391}, + {1367603834210822, 4383788460268472, 890353773628143, 1908908219165595, 2522636708938139}, + {1919411405316294, 1234508526402192, 1066863051997083, 1008444703737597, 1348810787701552}, + }, + { + {4132340278436948, 4005982088010057, 3308609415246807, 3692550296463618, 3956871570338410}, + {1096972188133236, 3816049499915451, 1251976741328773, 1219603529073670, 1078899265206338}, + {950202511700693, 1240039391743494, 1169033682725545, 1423696267961315, 86935143579550}, + }, + { + {4756214981813576, 5522632333569959, 3862983342357100, 4309495274365548, 5713360895956932}, + {2683363149107878, 1470385524874179, 725539084456484, 3271790833618750, 1222340934084308}, + {200587706310533, 896271240996831, 1147839003219597, 673448965331479, 548900916085084}, + }, + { + {3550032568832337, 4838968015489313, 4675889877479625, 3212531632461645, 4765584451232964}, + {1405860849520605, 738725235942165, 399531320766275, 3195580921007755, 1958618144816834}, + {94349687650983, 306368484955948, 1759034073892087, 2030110332880331, 1270749214795711}, + }, + { + {2967631947537871, 4383349957254579, 3922288445505558, 5226885511958431, 3995794596785200}, + {1753118377928377, 3368465588051047, 1755914948419738, 3441455854862245, 647766692547292}, + {2005162920381704, 1507493192705080, 1430523618875617, 131673490468702, 662093487452573}, + }, + { + {2747463689102953, 5007357876041009, 5072033195962826, 4670246809435049, 5673751346141763}, + {2718321167227969, 855141819034537, 1769780985173952, 3439183400564947, 1192259870209089}, + {747964066233340, 2037427400347459, 49693847757217, 2003202980691532, 2230561945728266}, + }, + { + {4747984612298188, 4723422270130357, 4628272886928943, 3839214906514725, 5200339299152060}, + {1424576382204282, 350051250024461, 3895326653518337, 3070821812734749, 3346444741017048}, + {2021002858021100, 839958875652478, 2080082610761570, 1282995787185392, 313106058533657}, + }, + { + {5293324356940491, 3886891387640488, 5386021427475165, 4491415749098830, 3988924707585306}, + {2136145829133251, 713070507515938, 1951333115623761, 3770252317439440, 1824831508473442}, + {2203533335083089, 2130417962449796, 217179607020589, 153498131255469, 1884913426826060}, + }, + }, + { + { + {6357530995067419, 4511707601241201, 4853814131499793, 3027006748267833, 4004117462852039}, + {2102881477513865, 3822074379630609, 1573617900503707, 2270462449417831, 2232324307922097}, + {1417148368003523, 721357181628282, 505725498207811, 373232277872983, 261634707184480}, + }, + { + {3519916180986434, 5063756715513304, 5306226466970938, 4461989750290959, 5633593412950483}, + {2186733281493248, 2250694917008620, 1014829812957440, 2731797975137637, 2335366007561721}, + {615183387352312, 917611676109240, 878893615973325, 978940963313282, 938686890583575}, + }, + { + {4051478965894094, 5415732403270882, 4529567395411473, 4935730075960955, 4778168617632490}, + {522024729211672, 3296859129001056, 1892245413707789, 1907891107684253, 2059998109500714}, + {98698809797682, 2144627600856209, 1907959298569602, 811491302610148, 1262481774981493}, + }, + { + {5721409450692386, 4425747098618406, 6490527463642820, 3639914744810785, 4516285758530664}, + {1791451399743152, 1713538728337276, 2370149810942738, 1882306388849953, 158235232210248}, + {1650875518872272, 1136263858253897, 1732115601395988, 734312880662190, 1252904681142109}, + }, + { + {5306746809205765, 3120741251682392, 2568099116674910, 5447095217001045, 2823024101589818}, + {2624786269799113, 2777230729143418, 2116279931702134, 2753222527273063, 1907002872974924}, + {227742695588364, 1776969298667369, 628602552821802, 457210915378118, 2041906378111140}, + }, + { + {3832015885289562, 4129797318027691, 5360746788631408, 5207122354148972, 4434563787896849}, + {815000523470260, 3164885502413555, 3303859931956420, 1345536665214222, 541623413135555}, + {1870080310923419, 71988220958492, 1783225432016732, 615915287105016, 1035570475990230}, + }, + { + {4881216209018060, 3833780216763759, 5307643745501116, 4286182636729437, 5147443675842680}, + {2982787564515398, 857613889540279, 1083813157271766, 1002817255970169, 1719228484436074}, + {176957326463017, 1573744060478586, 528642225008045, 1816109618372371, 1515140189765006}, + }, + { + {2695191990687280, 4737393024215632, 4451306435997662, 3263658520201184, 3226476650748376}, + {1888911448245718, 3638910709296328, 4176303607751676, 1731539523700948, 2230378382645454}, + {1846351103143623, 1949984838808427, 671247021915253, 1946756846184401, 1929296930380217}, + }, + { + {4257691815043557, 4587099125055339, 4378829326829150, 4530783676112038, 5088169500723328}, + {2633154847819111, 2373317802678415, 4226812651282694, 3531985668346704, 3254298087102270}, + {1896123626988797, 1131351092678624, 1831358114864483, 1263257519094555, 153161823153575}, + }, + { + {5013999188326350, 5342051120597129, 5658875547575315, 4993589587822012, 3418484323529615}, + {2875848054604140, 2609079967536269, 3221396114275243, 1330649045956928, 1828925625187427}, + {85523512650066, 1145743424577874, 270900922559567, 1781500837265517, 1998986005265292}, + }, + { + {4300315009401728, 4620112123771453, 2612760971016545, 3052063778972094, 4706549333122035}, + {2904227921845290, 4267364811643403, 1994336236107343, 2172724361186958, 2854607055726693}, + {2127639189718319, 2205729457048157, 1849555339256920, 1751645797856968, 1883138982486949}, + }, + { + {3989916020510698, 4741941595447558, 5214589701377240, 4351148330446081, 3428672470823222}, + {762600272699964, 2753498328779892, 3316416370655704, 526788695246361, 3062867170941268}, + {1503368613839734, 2009362771486879, 495897391474535, 1905468005297555, 272387388531978}, + }, + { + {5813046901089551, 5050432868964283, 4705275668110217, 4196337029208819, 5257156494192722}, + {1830890930331365, 3828112268992685, 3895633691902557, 3356965264729727, 2386741853982022}, + {995710478389517, 1430833880042694, 1172677663947400, 1545257382741759, 1798260148494462}, + }, + { + {5205850356707429, 4686811868434220, 5616916192509070, 4494846080958018, 5419646380822597}, + {1276458355120913, 2527187906858810, 1130163473530636, 3533175711581762, 2161750040536619}, + {1025062667466023, 43711902086443, 2210112172846377, 233136450830559, 1412931651896051}, + }, + { + {3560341629038503, 4545538003102686, 5283269045082286, 4816839347899222, 4801547130939062}, + {2448047678851139, 599053419172738, 3080495073729726, 1198848441856844, 1359787207816262}, + {555971766815523, 2160228751293088, 266579216919501, 408880354152864, 2184471346102790}, + }, + }, + { + { + {5195617294728737, 5226905206197221, 3889841953548511, 5251818933360801, 4838188827894395}, + {849646212451983, 1410198775302919, 2325567699868943, 1641663456615811, 3014056086137659}, + {22893968530686, 2235758574399251, 1661465835630252, 925707319443452, 1203475116966621}, + }, + { + {3154905071699595, 4930741522303542, 5064786644540271, 4136130058087200, 4165945522107466}, + {3053098849470395, 3985092410411378, 1664508947088595, 2719548934677170, 3899298398220870}, + {1344191060517578, 1960935031767890, 1518838929955259, 1781502350597190, 1564784025565682}, + }, + { + {4168985401048642, 5601942199123232, 4509535428414908, 4252327476037085, 6042239923552064}, + {2925523165433334, 1979969272514922, 3427087126180756, 1187589090978665, 1881897672213940}, + {2495540013192, 678856913479236, 224998292422872, 219635787698590, 1972465269000940}, + }, + { + {4698182657338567, 5017916408838259, 3081477769920918, 3928215500558329, 5313704211766335}, + {271413961212179, 3604851875156899, 2596511104968730, 2014925838520661, 2006221033113941}, + {1980510813313589, 1948645276483975, 152063780665900, 129968026417582, 256984195613935}, + }, + { + {5300264442994823, 3794960652558197, 6004497419208260, 6170915605358895, 5102903504401205}, + {1860190562533083, 1936576191345085, 2712900106391212, 1811043097042829, 3209286562992083}, + {1151480509533204, 2136010406720455, 738796060240027, 319298003765044, 1150614464349587}, + }, + { + {5520821677598445, 4505587343518853, 4486119403320947, 5124882310463887, 4384352945448272}, + {1731069268103131, 2987442261301335, 1364750481334267, 2669032653668119, 3178908082812908}, + {1567828528453324, 1017807205202360, 565295260895298, 829541698429100, 307243822276582}, + }, + { + {4341766796632437, 4105940157601428, 4403780572905254, 4391581105946996, 4661670073235412}, + {249079270936229, 1501514259790706, 3199709537890096, 944551802437486, 2804458577667728}, + {1338766321464554, 1906702607371284, 1519569445519894, 115384726262267, 1393058953390992}, + }, + { + {4136644411018817, 5105079697639574, 5123803130450031, 3331327213803161, 3453876506817262}, + {3616421371950629, 3764188048593604, 1926731583198685, 2041482526432505, 3172200936019022}, + {840922919763324, 727955812569642, 1303406629750194, 522898432152867, 294161410441865}, + }, + { + {5565570118069330, 4591619629413879, 3505524267391659, 5911065393515679, 5626780252302286}, + {2954349327665336, 2875421537282295, 1177907047549607, 2315244756624323, 3303388475971642}, + {1193532613439179, 1341357357703238, 1857522674746129, 587336359047056, 1462817734082691}, + }, + { + {5032608083579310, 5556680383291862, 4639031978972564, 2550751933150061, 4661900946642239}, + {981709001326388, 2228829982452486, 1195252744174570, 1961335123791201, 473922585791741}, + {158547452916311, 1806851940249257, 1888549274109445, 1234535032385844, 755999937979748}, + }, + { + {5099505633219587, 3654947652195304, 4632839805758299, 3516983533390311, 3156502843280841}, + {2235936902666817, 1844821659342916, 4255944160143733, 2705728103151199, 1360010073190141}, + {1966276380904262, 1243659846916250, 1230287549611464, 1790496592504769, 385075881855087}, + }, + { + {5102974111125320, 5352605641984611, 4254853167292498, 4166876022626639, 4692858050734664}, + {808958715657412, 2787760179369277, 2812754371047796, 3109195163271007, 3174221799565416}, + {1970356456788069, 1887106101566224, 2120741856788965, 1887465058487327, 166078852378175}, + }, + { + {5268074145727905, 3102961204581063, 5775739741243707, 6623549226998551, 5355512520264473}, + {1475882426726637, 2923995069592105, 2595116660588037, 2134573872614909, 2857982748479313}, + {957649428811476, 1521919451665798, 1487878569331559, 1715152263604455, 2000934618350472}, + }, + { + {3462276468747197, 4403243110229213, 5274708467449337, 4946143993185919, 6100123938510411}, + {2624197675552195, 2160845895419703, 991891416996825, 2705836223851003, 2307139020684469}, + {231885416467149, 648441606302746, 1371491506634443, 193373311482025, 2106953050161716}, + }, + { + {2408565470230034, 4633147941257550, 4425551739809483, 4183865634168848, 4784444305258783}, + {2307403528152576, 3136574081495182, 3694424861021853, 1950918571001278, 1747697954472435}, + {931185174846608, 872635055344100, 1155298897916392, 1344438153479985, 863698029056587}, + }, + }, + { + { + {2611656183523465, 4684513982859178, 5365326100017121, 4722407564633480, 2827426586917747}, + {2605560604520539, 1598361541848742, 3374705511887547, 4174333403844152, 2670907514351827}, + {755467689082474, 909202735047934, 730078068932500, 936309075711518, 2007798262842972}, + }, + { + {3236138991462016, 3067527600191131, 3896954399398994, 3910874778063800, 3938401465669403}, + {1609384177904054, 2614544999293875, 1335318541768200, 3052765584121496, 2799677792952659}, + {1697863093781930, 599794399429786, 1104556219769607, 830560774794755, 12812858601017}, + }, + { + {4108730476499120, 5181690479373092, 4171978954440413, 3511327647445115, 4559140599266006}, + {1168737550514982, 897832437380552, 463140296333799, 2554364413707795, 2008360505135500}, + {1158643631044921, 476554103621892, 178447851439725, 1305025542653569, 103433927680625}, + }, + { + {3077203098880308, 4396008401246031, 4177351818329890, 6418777467377480, 5519551756318358}, + {2176793111709008, 3828525530035639, 2009350167273522, 2012390194631546, 2125297410909580}, + {1807108316634472, 1534392066433717, 347342975407218, 1153820745616376, 7375003497471}, + }, + { + {4732167545780233, 5368693586150714, 2609883700135802, 4663217517029815, 3612437739977844}, + {3234860815484973, 2683011703586488, 2201903782961092, 3069193724749589, 2214616493042166}, + {234147501399755, 2229469128637390, 2175289352258889, 1397401514549353, 1885288963089922}, + }, + { + {5617390325210756, 5554766767336738, 5549530285921438, 6514965868913137, 3937966638306001}, + {3363562226636810, 2504649386192636, 3300514047508588, 2397910909286693, 1237505378776769}, + {1054097349305049, 1872495070333352, 182121071220717, 1064378906787311, 100273572924182}, + }, + { + {4607833422014698, 3800719604873494, 4476341726952553, 4306709190801725, 3295603202700400}, + {3558210666856834, 1627717417672446, 2302783034773665, 1109249951172249, 3122001602766640}, + {216762189468802, 707284285441622, 190678557969733, 973969342604308, 1403009538434867}, + }, + { + {4847405480488793, 3554016671099447, 2818672356908788, 4302938753224251, 4825028485754775}, + {3530824104723725, 2596576648903557, 2525521909702446, 4086000250496689, 634517197663803}, + {470067171324852, 1618629234173951, 2000092177515639, 7307679772789, 1117521120249968}, + }, + { + {4032307292940140, 4855742012511787, 4007061004220393, 4186026976205829, 5188147460015837}, + {1726290253928048, 2108179153379055, 3599306339052623, 3804322907336713, 740669388116407}, + {1893601910775915, 1893561171028788, 174914675480509, 2073460144115735, 250678301747773}, + }, + { + {5696478198308385, 3135077959467853, 5039986204304988, 5696739636381970, 5163380137461980}, + {1473356281060031, 1850501243620073, 559809451272168, 2164039335364390, 2799937740729438}, + {506406583155327, 1903499899096002, 445887262445598, 866962765497367, 55809365421254}, + }, + { + {5290224396694939, 4705669579710662, 4614921349557141, 5027610124814334, 5088773866023979}, + {2009707214072007, 3490160897828618, 275706542492147, 1283471147003836, 2026672645131195}, + {1123457689056584, 2213608670005209, 1379370540202855, 2074314852377531, 864461310144552}, + }, + { + {5111150460891680, 4275734012505621, 4206718452855061, 3888755110807716, 5005016151412877}, + {2967787444233740, 1413004988964951, 690605351712577, 3813861694171786, 728516486273669}, + {2016155040846069, 1480238949730910, 882386999623863, 1367342654128568, 589184047321896}, + }, + { + {3850772783035735, 4143292076634522, 5556861502206409, 4279143658707597, 3550043180479289}, + {3493927566017921, 3571431901909570, 2627286406743953, 2047641118374561, 1730233493072697}, + {272317805124786, 1812925138663726, 1217316351219782, 1182300795957412, 1252963393607199}, + }, + { + {5371799854215572, 3393967588858477, 5067027508227680, 3852577519740789, 4734905175716170}, + {3515527020405104, 2159318542704715, 1058260913419646, 2981918447395233, 1340478002453928}, + {896362445577855, 1547885531466434, 942263962614365, 1148475609702329, 2122889133222112}, + }, + { + {5312477093520487, 3952229351525915, 5253212242457428, 4756871683292235, 4134773488559657}, + {2735014629385533, 1581591485505255, 1720528958990566, 4161950575359359, 2332085424554487}, + {704970088806441, 1168889861388831, 354811087636935, 1536113135588939, 2212112893107236}, + }, + }, + { + { + {2828809211088312, 6295039889156786, 4429443549656884, 4678145777282455, 5916104705152820}, + {2529951391976704, 1810282338562946, 1771599529530998, 3635459223356879, 2937173228157088}, + {893719721537457, 1201282458018197, 1522349501711173, 58011597740583, 1130406465887139}, + }, + { + {4766083398225008, 5494110682478710, 2778685366456944, 2823464210331405, 4857685817649218}, + {412607348255434, 1280455764199780, 2233277987330768, 2265979894086913, 2583384512102412}, + {1820352417585487, 24495617171480, 1547899057533253, 10041836186225, 480457105094042}, + }, + { + {5647768329980203, 5108044017780681, 3796340935441384, 4177115363811274, 5130001056264497}, + {2023310314989233, 2889705151211129, 2106474638900686, 2809620524769320, 1687858215057825}, + {1922168257351784, 2018674099908659, 1776454117494445, 956539191509034, 36031129147635}, + }, + { + {4561842048916374, 4287612509327089, 4370291679808170, 5695284091186768, 4550521144824593}, + {2796444352433270, 1039872944430373, 3128550222815858, 2962457525011798, 3468752501170219}, + {272268252444639, 1374166457774292, 2230115177009552, 1053149803909880, 1354288411641016}, + }, + { + {5697036697171416, 5404706777075284, 5503272547981905, 4981184452172701, 4867839206068339}, + {1857910905368338, 1754729879288912, 3137745277795125, 1516096106802165, 1602902393369811}, + {886299989548838, 1538292895758047, 1590564179491896, 1944527126709657, 837344427345298}, + }, + { + {3561647617580592, 3713951676498321, 4714970494042065, 3796394966388927, 5531291426324585}, + {3006358179063534, 1712186480903617, 3955456640022779, 3002110732175033, 2770795853936147}, + {803217563745370, 1884799722343599, 1357706345069218, 2244955901722095, 730869460037413}, + }, + { + {5199950995983500, 5997984878609744, 5241636760987426, 5139985135222038, 5431082849981900}, + {2941099284981214, 1831210565161070, 3626987155270686, 3358084791231418, 1893781834054268}, + {1949114198209333, 1104419699537997, 783495707664463, 1747473107602770, 2002634765788641}, + }, + { + {3320700462489453, 4258691810757797, 5637648896716044, 3890560459865337, 4307195898311025}, + {1607325776830197, 2782683755100581, 1451089452727894, 3833490970768671, 496100432831153}, + {2222475519314561, 1870703901472013, 1884051508440561, 1344072275216753, 1318025677799069}, + }, + { + {4037612142179094, 2987286320918074, 5334840876971305, 3892287190264789, 5794263680951471}, + {471926402845486, 2814813543274642, 3620200888572759, 1728489506884653, 3177161343196207}, + {1819395223745913, 594758877920007, 1653753349717506, 242640844960873, 963869472910932}, + }, + { + {2936569169465705, 6049214516933086, 5963733906800640, 4231427100807371, 4853047066834829}, + {2548596925868729, 2662135700065828, 2088163736824992, 2331981460676031, 2771125203890139}, + {780634400476978, 637764048158951, 901014587909154, 1354805333992459, 2018934308296179}, + }, + { + {2797688906622325, 3428210403110380, 5022584852934687, 3295825468273441, 5705393166486691}, + {2111199241475135, 1851629318616336, 1992578166276991, 2095428925801999, 1218266125748465}, + {1810680242312559, 952287178947563, 681241246062059, 1252456339225424, 1959931529139639}, + }, + { + {4919536354167776, 4843044804249283, 4705930511557457, 5262690042745614, 4386984625976838}, + {3747081830160208, 1520760409479969, 1598412209810121, 1654404133831532, 437659257098574}, + {744124236937047, 1544378156616778, 715829909389559, 2120659842894185, 72002654880101}, + }, + { + {4563826663843359, 5185090504058247, 5145727029702249, 5011944329783380, 5313803489832094}, + {244278499662023, 2000287644883357, 3512120660608951, 1998820466139820, 2107051881706162}, + {1061541907539207, 1129143356143074, 459133314948729, 1177985907118634, 1224368687812524}, + }, + { + {3152842550820126, 4081984728409524, 3254259750651619, 4604329179757860, 4471438744025494}, + {2383716445654654, 2845501105364248, 3179274641918483, 2181012191586748, 4055424112922904}, + {1792270341351139, 2065266134997868, 51895527839218, 798734893906822, 992253836606399}, + }, + { + {4950351600164207, 5298895157252043, 5150281689404603, 4544152582549862, 5356669996354042}, + {1927020266981541, 1747143248428675, 1588706088137551, 1077596294054796, 1170976366872068}, + {1001666581039191, 1742276948383877, 1379478310433234, 767654427573973, 2047968425937961}, + }, + }, + { + { + {4511412834337187, 4698043828798044, 4323205223211753, 5569204703546807, 6149086417101785}, + {155711679280637, 681100400509288, 389811735211209, 2135723811340709, 2660533024889373}, + {16625790644959, 1647648827778410, 1579910185572704, 436452271048548, 121070048451050}, + }, + { + {4694164895067901, 2924655519713304, 4842396181739721, 4841286895864398, 5356846476062228}, + {3289062842237779, 2820185594063076, 2549752917829677, 3810384325616458, 2238221839292470}, + {1763863028400139, 766498079432444, 1321118624818005, 69494294452268, 858786744165651}, + }, + { + {4869852729848717, 5029275869879305, 3701410808950684, 3435100659007430, 4689559933862040}, + {3543856582248253, 1456632109855637, 3352431060735432, 1386133165675320, 3484698163879000}, + {28315355815982, 460422265558930, 1799675876678724, 1969256312504498, 1051823843138725}, + }, + { + {4558284163736209, 4461809852221468, 5698584425525803, 5038838655144199, 3768154892986607}, + {2408714813047231, 3857948219405196, 1665208410108429, 2569443092377519, 1383783705665319}, + {1484387703771650, 198537510937949, 2186282186359116, 617687444857508, 647477376402122}, + }, + { + {4662985813836019, 4129426407048187, 5122336824431007, 5530273911701301, 3409921574477931}, + {2147715541830533, 2751832352131065, 2898179830570073, 2604027669016369, 1488268620408051}, + {1744544377739822, 1964054180355661, 1685781755873170, 2169740670377448, 1286112621104591}, + }, + { + {3854053602374273, 4943141672260381, 4472148111349729, 5161477038123364, 4661051199882732}, + {2333777063470241, 3919742931398333, 3920783633320113, 1605016835177614, 1353960708075544}, + {1029287186166717, 65860128430192, 525298368814832, 1491902500801986, 1461064796385400}, + }, + { + {3437283298068479, 3608139386273800, 5088531994686943, 4605732407316964, 6296522248487285}, + {2660016802414475, 2121095722306988, 913562102267595, 1879708920318308, 2492861262121979}, + {1966196870701923, 2230044620318636, 1425982460745905, 261167817826569, 46517743394330}, + }, + { + {6233793835087996, 4935389669690266, 6335114860649961, 3623880366453827, 5578113556752255}, + {2358877405280588, 3136759755857592, 2279106683482647, 2224911448949389, 3216151871930471}, + {1450880638731607, 1019861580989005, 1229729455116861, 1174945729836143, 826083146840706}, + }, + { + {3994140066248694, 3181522224560048, 3364322700715335, 6108496090134019, 4266308196944062}, + {978398934730796, 1804963209584982, 2902083217855803, 2011728779166715, 3070976799182328}, + {494691910923538, 1903565874798025, 2115181773831520, 2000771501496645, 2163753695162256}, + }, + { + {4499039401984510, 2919282610904813, 3371698570925682, 3170519001059914, 5250127479378489}, + {1654039515014884, 2484661430680993, 2620692000541228, 2669599656280070, 2398652280696967}, + {2019971150480802, 2112841493625261, 237154577131804, 1674207955014809, 1389703158284583}, + }, + { + {4706814366157303, 5336609175411517, 4757963599977030, 4060364649415927, 3640669095240911}, + {780624938414169, 3404608320205059, 1982958325444026, 3570514777233615, 984254926012775}, + {1463658959517057, 1983397723547684, 41055560978805, 424638764130418, 491755157953272}, + }, + { + {3257295355011901, 4096776962011503, 4487597369409850, 5876979850901767, 6030505591690325}, + {2935104701953453, 3989681641092319, 3306366339882358, 2374391350196501, 1896075761392399}, + {1262337399368722, 1039133447611747, 917288766852537, 1931663063827599, 386956994697158}, + }, + { + {5865485955051801, 4898975626365390, 5709055439582716, 3072783210395629, 4352817622936409}, + {2724577252043037, 1050316213165918, 2370342271552724, 2792859709284319, 2760145987712013}, + {1677351910521822, 152891770438727, 738510373109788, 1296476386064424, 1219545250565005}, + }, + { + {2955221061271345, 5973180148171190, 3740903689178612, 4255579446112404, 4178816467357894}, + {1908022307626643, 2469819122662084, 1583327987932656, 3442462106139746, 599498145240366}, + {220308000962909, 460573332431611, 732078470162760, 467340602781483, 1127652895548970}, + }, + { + {4256843681823156, 4695170685669586, 4012905106498514, 5492595949894092, 4822219141250098}, + {1289113762003406, 2808167474320130, 1666802361626320, 1051654028271354, 1724653376239634}, + {1695390634076771, 1517610099990508, 1248456812719894, 2178282202616225, 905038523003109}, + }, + }, + { + { + {4388488268525257, 4351308814649541, 3942600308931722, 3469443492260723, 3080520458769465}, + {1899935429242705, 1602068751520477, 940583196550370, 2334230882739107, 1540863155745695}, + {765548025667841, 462473984016099, 998061409979798, 546353034089527, 2212508972466858}, + }, + { + {6305035755313584, 3986236631593136, 5772327717715563, 4670602724441205, 4485397579520202}, + {2298375097456408, 3144370785258318, 1281983193144089, 1491520128287375, 75847005908304}, + {1997562060465113, 1048700225534011, 7615603985628, 1855310849546841, 2242557647635213}, + }, + { + {3608844722049986, 2980930458947685, 6266068700289474, 3617433430563704, 4684882533775436}, + {1161017320376250, 2744424393854291, 2169815802355236, 3228296595417790, 1770879511019628}, + {1080413443139865, 1155205815510486, 1848782073549786, 622566975152580, 124965574467971}, + }, + { + {4272336182688229, 4705861119105631, 3304969482836130, 4308331792957791, 5281765142064806}, + {1184526762066993, 247622751762817, 2943928830891604, 3071818503097743, 2188697339828084}, + {237404399610207, 1308324858405118, 1229680749538400, 720131409105291, 1958958863624906}, + }, + { + {4785126936528543, 2288770346086770, 3118706734562790, 4474082416637981, 5793198356960377}, + {2767383321724075, 2269456792542436, 1717918437373988, 1568052070792483, 2298775616809171}, + {1278207464902042, 494742455008756, 1262082121427081, 1577236621659884, 1888786707293291}, + }, + { + {4316050955753838, 6170021230760201, 3671071179000687, 2720567588588102, 4695134757737078}, + {353042527954210, 1830056151907359, 1111731275799225, 2426760769524072, 404312815582674}, + {1716987058588002, 1859366439773457, 1767194234188234, 64476199777924, 1117233614485261}, + }, + { + {4802445580021739, 5669686216323056, 5683496153608928, 3599612573083939, 3664745203781455}, + {3236091949205521, 2386938060636506, 2220652137473166, 1722843421165029, 2442282371698157}, + {1143239552672925, 906436640714209, 2177000572812152, 2075299936108548, 325186347798433}, + }, + { + {4921698295511420, 2966865811406529, 3723715952061302, 4420370150973604, 5441412310007539}, + {2972824668060020, 2936287674948563, 3625238557779406, 2193186935276994, 1387043709851261}, + {1043584187226485, 2143395746619356, 2209558562919611, 482427979307092, 847556718384018}, + }, + { + {6539978005364395, 5005405360675302, 4390281321854973, 5817765520609028, 2885569505406129}, + {2401607320460403, 912267207660896, 2797776548107885, 1401692837350636, 2770414290856347}, + {904627574235583, 366582160013268, 1919276459982818, 683852563070972, 849013528013132}, + }, + { + {4382884022719489, 3331418080941236, 4472875449005139, 4019500438389598, 4463034067898545}, + {314313360314847, 1556311374160012, 3420403310565817, 1814168775579274, 3865931899404825}, + {2211811396782717, 1987727116500422, 1201194143426517, 1988979712261853, 884086138400803}, + }, + { + {3928195125806252, 4506628847593763, 4871806493038737, 5468133301160088, 4718975813247195}, + {3157237349544610, 2087027997220233, 1635119994381095, 1685873597006198, 3264645977099821}, + {554990822829571, 1043610604169755, 239155874009083, 1207029530220679, 1248980877883503}, + }, + { + {2330609380614712, 5282631639681642, 3679411410269759, 2770673432637308, 3778717181908177}, + {2321085204756486, 3204498878947842, 1897195179818497, 2221896934640248, 2249233024322127}, + {1100828805329651, 38323682820671, 233339076341529, 570439134676859, 373923102906827}, + }, + { + {4822469807205745, 4578534577854527, 3814578293772758, 6210971875752572, 3469875307698085}, + {650556138336187, 1140806781381529, 1319490550148986, 2443218412602398, 2092597895198457}, + {24874372349398, 672413878008022, 2109618619032869, 617580455983017, 643082448965145}, + }, + { + {3702942502950483, 4221261673998955, 4525315300848625, 5031967728773077, 4411934662665867}, + {895116466708821, 2311360532554913, 1331906084934491, 1442649827370867, 985339602059253}, + {1101806460504208, 48906420814555, 455540794156723, 777238833441277, 678815750013174}, + }, + { + {4956217544664282, 4411017504484405, 3654474138314413, 5155000128389593, 4413650344518487}, + {1203258470211606, 2883266356628027, 1508156827359997, 3638270983429361, 1401834110583505}, + {928961391578986, 832907369443124, 468987297840672, 1558723144077997, 1418280592841651}, + }, + }, + { + { + {3309129437554730, 5123933694799617, 4965300486638528, 6516081243872351, 2549068382794184}, + {1248731221520740, 1465200936117687, 2792603306395388, 2304778448366139, 2513234303861356}, + {1055352180870759, 1553151421852298, 1510903185371259, 1470458349428097, 1226259419062731}, + }, + { + {4550600281784187, 3256554237859110, 4119844627242950, 4676836561429904, 5092370827107509}, + {3744788603986897, 3042126439258578, 3441906842094992, 3641194565844440, 3872208010289441}, + {30498470091663, 1082245510489825, 576771653181956, 806509986132686, 1317634017056939}, + }, + { + {5619235959382811, 4106140804649401, 4587392324740009, 4223977265679267, 2709254929742834}, + {2672107869436803, 3745154677001249, 2417006535213335, 4136645508605033, 2065456951573058}, + {1698968457310898, 1435137169051090, 1083661677032510, 938363267483709, 340103887207182}, + }, + { + {4745319008032005, 4813628148687644, 3467681137065440, 3660014790178871, 4392941970152610}, + {1995325341336555, 911500251774648, 2415810569088940, 855378419194761, 3825401211214090}, + {1315157046163473, 727368447885818, 1363466668108618, 1668921439990361, 1398483384337907}, + }, + { + {6557196758364187, 4276231499541578, 4485350770690107, 4264207089194792, 3124346806789687}, + {2326829491984875, 3267188020145720, 1849729037055211, 4191614430138232, 2696204044080201}, + {1217269667678610, 599909351968693, 1390077048548598, 1471879360694802, 739586172317596}, + }, + { + {4384302481090479, 4717978973545909, 3754548127453306, 4211871514743047, 3605771636328385}, + {3970118453066023, 1560510726633957, 3156262694845170, 1418028351780051, 2346204163137185}, + {319394212043702, 2127459436033571, 717646691535162, 663366796076914, 318459064945314}, + }, + { + {3198885719919217, 2575084544179354, 3737578377662447, 5232176448882889, 5405183975072780}, + {2657789238608841, 1960452633787082, 2919148848086913, 3744474074452359, 1451061489880786}, + {1575783124125742, 2126210792434375, 1569430791264065, 1402582372904727, 1891780248341114}, + }, + { + {5242752265626106, 4326735213088803, 5009083294116390, 3863683170199334, 2880454449080125}, + {3090232019245924, 4249503325136911, 3270591693593114, 1662001808174330, 2330127946643001}, + {1822054032121349, 643057948186973, 7306757352712, 577249257962099, 284735863382083}, + }, + { + {3757294655239106, 4149870483813681, 3943074023634421, 5011331412913659, 4204233544524725}, + {765300458944758, 1962420935223063, 1006865922596525, 556125259357651, 517324314261719}, + {947503289917657, 1503416272497360, 836151367440855, 2025240512839119, 1506056841382176}, + }, + { + {3987605469554571, 4216854847559852, 4606485208582710, 4025002076531210, 5771502720173311}, + {789866795586711, 1219783998007690, 3399339961859034, 1430246873258510, 2263938746297911}, + {272907227620417, 585056874977936, 374400386458564, 1047259762290717, 466584497787787}, + }, + { + {4513305810099276, 3713543936920641, 5881885803512264, 4985359422621344, 5854329220017841}, + {2489594831593530, 2868670421452777, 2653264259914146, 778139640543916, 2896054888052141}, + {67965761977879, 1140658137927248, 1433664110101982, 1907417172350895, 1009746387131234}, + }, + { + {4657525718512496, 4017020332264511, 5032007516852528, 4196574218153666, 4558814287479470}, + {3191788312902362, 1662632170533261, 3849731434302862, 816384760006536, 2103376627071646}, + {98516339668203, 1987095201806236, 109825731538912, 249333174781555, 868887613476084}, + }, + { + {4551570896172554, 4811478172541458, 3661911804185849, 2859956435208139, 3775782540863495}, + {4251836217943410, 1527544805122594, 1416199226269029, 2604023934400523, 2761395386595757}, + {1642831683324706, 1693640639567753, 543897185448748, 1014750779914025, 2000933536049400}, + }, + { + {5616692888384001, 4085181778999311, 5359480780192985, 4168165762634953, 3706985665716275}, + {3046363118074651, 1033878254661623, 1432711896868579, 565399048183279, 1486610644259929}, + {1956000744629083, 2124722115672587, 1869890027060221, 1779425010763214, 2251549887150752}, + }, + { + {5403435201118585, 6603374055023538, 4448450050924979, 4204020352279014, 3319690980306662}, + {1147686993699695, 2183664403489392, 3736291649220767, 3475178747642004, 1656820196694734}, + {993108364179144, 45592857828226, 1223718961690034, 1931120528549047, 1402978202475587}, + }, + }, + { + { + {4707745854342560, 3882311012719969, 4467035027860010, 2426465723968789, 5459727301387711}, + {3618358370049178, 1448606567552085, 3730680834630016, 2417602993041145, 1115718458123497}, + {1562934578796716, 1070893489712745, 11324610642270, 958989751581897, 2172552325473805}, + }, + { + {2875482372335866, 3589666323156759, 5493912977577144, 3566036429447715, 3416572787955522}, + {1770564423056008, 2987323445349813, 1326060113795288, 1509650369341127, 2317692235267932}, + {223256821462517, 723690150104139, 1000261663630601, 933280913953265, 254872671543046}, + }, + { + {5739703102637456, 4089685696952464, 5529672212600950, 5529465141325467, 4053764715117380}, + {1969087237026022, 2876595539132372, 1335555107635968, 2069986355593023, 3963899963027150}, + {1115241013365517, 1712251818829143, 2148864332502771, 2096001471438138, 2235017246626125}, + }, + { + {4621952399709001, 5571208339175198, 5938396303563992, 3935039984233637, 4734466397277932}, + {3551068012286861, 2047148477845620, 2165648650132450, 1612539282026145, 2765997725314138}, + {1850689576796636, 1601590730430274, 1139674615958142, 1954384401440257, 76039205311}, + }, + { + {4398511437540326, 5006878555391994, 2877652875936652, 3360921192078354, 5537453437282356}, + {1723387471374172, 3249101280723658, 2785727448808904, 2272728458379212, 1756575222802512}, + {571005965509422, 2005213373292546, 1016697270349626, 56607856974274, 914438579435146}, + }, + { + {4021767746362864, 3947693133441663, 5655463017046415, 4032842598082935, 4903887401788780}, + {1346698876211176, 2076651707527589, 3336561384795453, 2517134292513653, 1068954492309670}, + {1851867764003121, 403841933237558, 820549523771987, 761292590207581, 1743735048551143}, + }, + { + {4789545034251916, 5151774024717947, 3350203576317227, 5870147068473486, 3757676696824463}, + {410915148140008, 2107072311871739, 3256167275561751, 2351484709082008, 1180818713503223}, + {672095903120153, 1675918957959872, 636236529315028, 1569297300327696, 2164144194785875}, + }, + { + {3867157095427632, 4907857238986876, 4412001163466224, 5664547006559450, 3829838433234787}, + {1902708175321798, 3287143344600686, 1178560808893262, 2552895497743394, 1280977479761117}, + {2013087639791217, 822734930507457, 1785668418619014, 1668650702946164, 389450875221715}, + }, + { + {5139170412209073, 4498594321446990, 3403045096731472, 3523999116931205, 4892973820656308}, + {3100339582931283, 3780065035763732, 3107854667684806, 1176538847728659, 2470425204007084}, + {1439699951361262, 2030141811121675, 1327540074439450, 98760879510567, 2124055188161162}, + }, + { + {5069757928527025, 4269771696870248, 3491008216607494, 2929486207919899, 2963259194922213}, + {1719771161855965, 3899474813414394, 1311077187368436, 1710977333891379, 2936225820601205}, + {630007537003875, 1879755431232807, 1841434412649072, 139825159320909, 1444684178970403}, + }, + { + {4165024628959566, 3986473160684857, 4482720357638229, 3477188964410991, 6063532098390286}, + {2735367442263082, 3037388464741161, 708840305892227, 3376016746983163, 2424461132835430}, + {1692345998026512, 1336264953003836, 472200476738834, 443198297543894, 865332172690922}, + }, + { + {3583240374232032, 6672838339902029, 3302719127491245, 4817707424315947, 3846209753841235}, + {1940518928195986, 2204192709398575, 2559878786338619, 1240694154295451, 3150360999940643}, + {978334155462452, 259156758770697, 1998397384612038, 868981902819036, 526720567050341}, + }, + { + {6295419175112392, 5922842429035919, 3280130237310527, 6154864010584464, 4672381744259604}, + {2495384380697450, 2529087473815087, 3152074437283087, 2705660594301054, 3756859018180124}, + {2829664309620, 1216345963700610, 1352213880784545, 1343440385603407, 1678896558555000}, + }, + { + {4462327178876654, 4861692839162759, 4026088282699843, 4559864737475196, 4141921357362458}, + {970323584385428, 1841886145157987, 771455069751873, 2995416444511372, 1381697279273918}, + {833881464516252, 722547189080954, 1385674139934263, 1947516117258013, 237073770273705}, + }, + { + {4933913084823421, 4670123363141682, 4900446203904881, 4055286352327374, 4290448492223496}, + {2942776662601173, 2578009269314716, 544737250664645, 2975699597442162, 2099680134205576}, + {452946908538500, 838029561099231, 448300214621162, 402872419278705, 704999550269611}, + }, + }, + { + { + {5798682425720784, 4343644325181242, 6354948599958312, 4506974667055090, 5293040366083331}, + {2705718263383616, 2358206633614248, 2072540975937134, 308588860670238, 1304394580755385}, + {2083069137186154, 848523102004566, 993982213589257, 1405313299916317, 1532824818698468}, + }, + { + {4034211192773531, 5600324567335276, 4531193018091912, 2794041663976599, 3792137612125120}, + {3747761112537659, 1397203457344778, 4026750030752190, 2391102557240943, 2318403398028034}, + {693543956581437, 171507720360750, 1557908942697227, 1074697073443438, 1104093109037196}, + }, + { + {4735029189573542, 3778090050106418, 6524974691396918, 6024554123028535, 3058137605210362}, + {345288228393400, 3351443383432420, 2386681722088990, 1740551994106739, 2500011992985018}, + {1079623667189886, 872403650198613, 766894200588288, 2163700860774109, 2023464507911816}, + }, + { + {3748938635589832, 3296620064200837, 3994393700108731, 5740803740117332, 5352647078187481}, + {854645372543796, 1936406001954827, 2403260476226501, 3077125552956802, 1554306377287555}, + {667962773375330, 1897271816877105, 1399712621683474, 1143302161683099, 2081798441209593}, + }, + { + {3324209478486170, 4398737310762775, 3760579922605898, 5439367229755348, 5616400060914562}, + {2378947665252234, 1936114012888109, 1704424366552046, 3108474694401560, 2968403435020606}, + {333549023751292, 280219272863308, 2104176666454852, 1036466864875785, 536135186520207}, + }, + { + {5689714689958878, 4503409610653732, 5602544085249448, 3404912574886620, 4043425317102514}, + {2625466093568366, 2398257055215356, 2555916080813104, 2667888562832962, 3510376944868638}, + {1870078460219737, 2129630962183380, 852283639691142, 292865602592851, 401904317342226}, + }, + { + {3798100817109506, 4962694127433334, 3349468332060557, 6283897397500138, 2972563107372854}, + {1361070124828016, 815664541425524, 3278598711049919, 1951790935390646, 2807674705520038}, + {1212405311403990, 1536693382542438, 61028431067459, 1863929423417129, 1223219538638038}, + }, + { + {4842650611581872, 5104986353880267, 4917334859504562, 3217991068822474, 6343075526828654}, + {1294303766540260, 3435357279640341, 3134071170918340, 2315654383110622, 2213283684565086}, + {235605972169408, 2174055643032978, 1538335001838863, 1281866796917192, 1815940222628465}, + }, + { + {6283914285320299, 4538885684827819, 5272821644392905, 4741145486323262, 3695595414404375}, + {2328903345630831, 383243669352281, 873975569357849, 1167517986625404, 1819176154401511}, + {1015569285123052, 366271559910559, 607712860974980, 1151136439806917, 1092279314442070}, + }, + { + {4644837603275095, 4182486257496369, 5680847280055574, 5281364304268108, 4017310458808244}, + {608363524539665, 1518910856395189, 2487752246555640, 1408491254860196, 1242950972146918}, + {724510145626490, 1990648995683735, 1234513756420164, 776971151906420, 1819715569230741}, + }, + { + {4025210576522653, 5037391877366464, 6220723743247171, 4107687904850403, 5536810198272054}, + {1367586897505451, 2009604536185136, 2660752171350541, 2665866783498593, 3368014404783418}, + {1205287993924177, 1639266049462139, 1103796806037893, 1538960177870822, 829889727712499}, + }, + { + {4793558625576028, 3882027570562344, 4207241179173547, 5281023204511977, 6361433483438371}, + {3281892459792280, 1933131048782198, 2351228493867205, 2032809616708977, 2534356983068777}, + {909754464411828, 785219392684958, 1338541457752162, 826789969638535, 2048189131938215}, + }, + { + {5399590275296719, 3849598676683261, 3407829328170797, 4201689601652353, 3895190733841783}, + {1015687460377127, 2173401063127799, 2017987633047477, 748955581941445, 630511527938929}, + {2101074774193018, 2001243087608708, 801641610437734, 1519697986446082, 594845713523709}, + }, + { + {4827244732148509, 4706350784965857, 3625459412499055, 5917778693464512, 5372808769862558}, + {1452942110247071, 1201823364506117, 2330240170803201, 2907618912660148, 2069141053434694}, + {745779946397307, 916664696261756, 1535477642186117, 1334763610638931, 1366843744138046}, + }, + { + {4176014068905464, 4252766041468492, 3589174288259552, 3776062686798003, 4986282119113185}, + {1092579010212274, 1203724605936750, 2270767453066752, 2458071886656347, 2443647576082745}, + {318795329870799, 185430882319687, 1286511919273276, 657817007383756, 40641447918263}, + }, + }, + { + { + {4538870843995520, 3964150480707053, 5487263883039355, 4602170887743532, 5736245235930330}, + {1632352921721536, 1833328609514701, 2092779091951987, 4175756015558474, 2210068022482918}, + {1998172393429622, 1798947921427073, 784387737563581, 1589352214827263, 1589861734168180}, + }, + { + {5350015016975595, 2997963309224426, 3081458566511327, 5095667333327441, 5460842165191887}, + {1733739258725305, 2283515530744786, 2453769758904107, 3243892858242237, 1194308773174555}, + {1758148849754419, 619249044817679, 168089007997045, 1371497636330523, 1867101418880350}, + }, + { + {3965982201013836, 5981456109444663, 5078495317312678, 4410918223912516, 3807332263401822}, + {2578433797894864, 2513559319756263, 1700682323676192, 1577907266349064, 3469447477068264}, + {853828206885131, 998498946036955, 1835887550391235, 207627336608048, 258363815956050}, + }, + { + {3753463041754121, 3606679279252159, 3696232489183494, 3149612277537848, 5358662226124843}, + {2392941288336925, 3488528558590503, 2894901233585134, 1646615130509172, 1208239602291765}, + {714380763546606, 1032824444965790, 1774073483745338, 1063840874947367, 1738680636537158}, + }, + { + {3423450128487239, 6070685071936072, 3705460605693651, 3009714346694508, 6123110970148691}, + {1640635546696233, 2884968766877360, 2212651044092395, 2282390772269100, 2620315074574625}, + {420958967093237, 971103481109486, 2169549185607107, 1301191633558497, 1661514101014240}, + }, + { + {5625132717515116, 5524850964392681, 4614069623317915, 3762859588443640, 4361835721816909}, + {3158923465503550, 1332556122804145, 4075855067109735, 3619414031128206, 1982558335973171}, + {303213233384524, 2061932261128138, 352862124777736, 40828818670255, 249879468482660}, + }, + { + {3697491154222530, 4544214010492622, 4905703930515359, 4988733897248726, 6163038950957920}, + {856559257852200, 2760317478634258, 3629993581580163, 3975258940632376, 1962275756614520}, + {20057458979482, 1183363722525800, 2140003847237215, 2053873950687614, 2112017736174909}, + }, + { + {2961281310713750, 5035281843536219, 4820563396802425, 4066115702139011, 4762159869794599}, + {2228654250927986, 3735391177100515, 1368661293910955, 3328311098862539, 526650682059607}, + {1053447823660455, 1955135194248683, 1010900954918985, 1182614026976701, 1240051576966610}, + }, + { + {3576347446000839, 3504021369715234, 3286921249007623, 6268908633911267, 4898262353027354}, + {2053850994061963, 1755999209417110, 2842496597997123, 1978798188794297, 1107741233360060}, + {1587558591633082, 1224310153016076, 373416710356490, 733639236443698, 365919571874338}, + }, + { + {4922046667787666, 5384603941382862, 3355282705253058, 5052638190916511, 4442324355401649}, + {716350205934888, 1153032590403764, 2797021656648850, 1143194352934997, 4271302979058629}, + {1588274760900072, 933817618340883, 731655082380959, 688238385999711, 637984915480250}, + }, + { + {4217060480329358, 4374528391636951, 5478312030233942, 5051281083802439, 5405881257383323}, + {413138784837996, 173345891427747, 1873100191622562, 899752727618929, 3454430648436331}, + {830072102529414, 1185948406051604, 1521170049452316, 1259798181998483, 735064905966282}, + }, + { + {5515669600102047, 5759134783811579, 4357089500282138, 5244472517255288, 5695631524373921}, + {2842166480737527, 2947367283673209, 2706356593419314, 2971106642583260, 2444234893549177}, + {1396164055858898, 2228551364195726, 611382817170935, 1662418665433346, 1079098567119990}, + }, + { + {3828208352345746, 5742603493540025, 5912515684826959, 5415942702105867, 4409414272784258}, + {2895166868245672, 3153594867376981, 2883799413649215, 1877187137914547, 1124004944737352}, + {1249379796419407, 1201460644559526, 1259226742776869, 583948750717161, 1178519968480157}, + }, + { + {4715510278636375, 4324771002227588, 4218850944267831, 4037187367673896, 4505301806813551}, + {660737143139077, 1635830759165556, 795647058595473, 2117049403264300, 2692853476865573}, + {1654844956375931, 767321709128720, 475080629455448, 116932684758291, 96451917556060}, + }, + { + {5797033177541322, 5021581754974953, 4978830133961786, 5973534325336756, 4105099431310062}, + {1777561190222404, 3757586069945925, 2868096822929350, 1968746982919962, 1089633650980574}, + {833672890421142, 647759906668054, 572517465546269, 402134952667751, 2083275174687780}, + }, + }, + { + { + {6352542060466074, 3833809696215741, 4101092554705390, 3320298136988035, 4253202043484731}, + {1957943897155478, 1788667368028035, 2389492723714354, 2252839333292309, 3078204576998275}, + {1528282417624269, 2142492439828191, 2179662545816034, 362568973150328, 1591374675250271}, + }, + { + {4265077968872559, 2914460285039701, 3045781039391514, 4915306233356239, 5308090560495285}, + {2411826493119617, 2484141002903963, 2149181472355544, 598041771119831, 2435658815595421}, + {2051892037280204, 488391251096321, 2230187337030708, 930221970662692, 679002758255210}, + }, + { + {3713635732994642, 4207056293821675, 4684465815183558, 6055578880035022, 5061343489334444}, + {1530723630438670, 875873929577927, 2593359947955236, 2701702933216000, 1055551308214178}, + {359179641731115, 1324915145732949, 902828372691474, 294254275669987, 1887036027752957}, + }, + { + {4324702538941745, 2563932266428659, 4813530513012704, 5499843939988947, 3842301114037549}, + {4295071423139571, 2038225437857463, 1317528426475850, 1398989128982787, 2027639881006861}, + {1397254305160710, 695734355138021, 2233992044438756, 1776180593969996, 1085588199351115}, + }, + { + {4202522275076530, 6411445226225292, 4074557295320773, 4373367518435491, 4577411558841716}, + {2692366865016258, 2506694600041928, 2745669038615469, 1556322069683365, 3819256354004466}, + {387139307395758, 2058036430315676, 1220915649965325, 1794832055328951, 1230009312169328}, + }, + { + {3379372614866712, 3476543574256943, 5779819517217769, 3781538535387827, 3841619480557100}, + {1765973779329498, 2911143873132225, 2271621715291913, 3553728154996461, 3368065817761132}, + {2181229378964934, 2190885205260020, 1511536077659137, 1246504208580490, 668883326494241}, + }, + { + {4227237865914097, 5575401147370301, 5098251926594813, 4129497466354055, 3741435180672532}, + {2689666469258543, 2920826224880015, 2333696811665585, 523874406393177, 2496851874620484}, + {958592545673770, 233048016518599, 851568750216589, 567703851596087, 1740300006094761}, + }, + { + {3792569420294954, 4400089757531324, 6101403783497940, 5734203344054362, 3067223272494699}, + {2014540178270324, 192672779514432, 2465676996326778, 2194819933853410, 1716422829364835}, + {1738560251245018, 1779576754536888, 1783765347671392, 1880170990446751, 1088225159617541}, + }, + { + {4447695422728303, 2418292515870024, 5595971144063629, 5081870838292807, 5209525481880645}, + {2916521632160477, 2343112140697014, 1601700300762337, 1763148914953177, 2708190975156259}, + {1339021042945816, 1840804708066696, 877961221559635, 1281458842745501, 1950851850845276}, + }, + { + {4786922334540966, 4955024641438784, 2989160972656404, 5186429632708936, 4984389249074409}, + {1020393680308960, 3834711966547082, 2322726956159582, 995949551108034, 3035172379117141}, + {2248087612518599, 173333799263920, 1744928838552182, 957368524885377, 1722980339454003}, + }, + { + {3826226586501329, 4985391470235567, 3706778387862153, 5001039432994919, 3643485069381971}, + {2453664361158331, 3658664111645897, 2133047286876873, 2891246599919261, 1077039773701841}, + {1403674776792037, 176114870970230, 204752269254815, 823265703401663, 973549049711641}, + }, + { + {4428694302478430, 4279516097530892, 4558829707092394, 4506689423374814, 3060727770678082}, + {3511507258617268, 2341694334736402, 3023178443373630, 4119452783133958, 1541883672814480}, + {273175012476053, 353915697751570, 1920076197363975, 2096923665433891, 694182114426694}, + }, + { + {4184692084971979, 4134060280811983, 3170779668973105, 4456307003709940, 4308299286729100}, + {2273158812011175, 3253770145986191, 1455430838863125, 1701216872600126, 1994907074166318}, + {854928709890819, 247698160098706, 1293104197995963, 648230677212306, 784063325867838}, + }, + { + {4504036913969323, 5450574207835078, 6042071388766678, 4918868602774744, 5356088910233627}, + {2995726671480383, 3106924626287182, 2718750693945174, 3268809265740618, 1129470954185503}, + {2104894828289916, 873144584667742, 506537740149646, 646077767532773, 1966868865211605}, + }, + { + {6048446108790732, 5524115631172029, 4165751037432881, 4331639016561072, 5291322591785068}, + {2269347023399866, 1910686315635227, 654955394153571, 2857416503175088, 847850165913280}, + {836953051260559, 1769743545147988, 699239118029628, 825806019782225, 1990070083297713}, + }, + }, + { + { + {3395265304118584, 3783994539881306, 5596876372865192, 4984641333486582, 4373205247246409}, + {2911103727614740, 1956447718227572, 1830568515922666, 3092868863429656, 1669607124206367}, + {1686424298744462, 1451806974487153, 266296068846582, 1834686947542675, 1720762336132256}, + }, + { + {3458195995174227, 4836757775805549, 3654433306506668, 5623690819092521, 4197273928235755}, + {3141016840074207, 3295090436969907, 3107924901237156, 1669272323124635, 1603340330827879}, + {766720088232571, 1512222781191002, 1189719893490790, 2091302129467914, 2141418006894941}, + }, + { + {5441759705376431, 3673576132738420, 4193443048427021, 4683601810691313, 3666180150435792}, + {2671463460991841, 1998875112167986, 3678399683938955, 3406728169064757, 2738338345823434}, + {398001940109652, 1577721237663248, 1012748649830402, 1540516006905144, 1011684812884559}, + }, + { + {3248461355092589, 5959477015323422, 2996112620542523, 4642813523567241, 5503882535918283}, + {1653276489969611, 2257881638852872, 1921777941170835, 1604139841794531, 3113010867325889}, + {1450817495603008, 1476865707053229, 1030490562252053, 620966950353376, 1744760161539058}, + }, + { + {3213965769821056, 5620199287619286, 4685689805377309, 5959205094392245, 4699653216173778}, + {2811528223687828, 2288856475326432, 2038622963352005, 1637244893271723, 3278365165924196}, + {796863823080135, 1897365583584155, 420466939481601, 2165972651724672, 932177357788289}, + }, + { + {4468743695984567, 4898440950560817, 4474456712004917, 5061786181321024, 3329036690710436}, + {877047233620613, 1375632631944375, 2895573425567369, 2911822552533124, 2271153746017078}, + {801118384953213, 1914330175515892, 574541023311511, 1471123787903705, 1526158900256288}, + }, + { + {3726318200450545, 4012593435854444, 5660999417843231, 3874664121744144, 4669027921793287}, + {3201417702772463, 2207116611267330, 3164719852826535, 2752958352884036, 2314162374456719}, + {1961673048027128, 102619413083113, 1051982726768458, 1603657989805485, 1941613251499678}, + }, + { + {3486506407007189, 5586943518586412, 3150073788000181, 3892658932084745, 4661178025941644}, + {1401939116319247, 2587106153588320, 2323846009771033, 862423201496005, 3102318568216632}, + {1143483057726416, 1992614991758919, 674268662140796, 1773370048077526, 674318359920189}, + }, + { + {5249032546684913, 4376477734728695, 5192833668695386, 3879528383130666, 4673544232718438}, + {2001586827113779, 3745189534067065, 1944288247515270, 3801531181100442, 2035001711257644}, + {1821331151892312, 1302058705892077, 1823533497142581, 1477427445977593, 1256884978338733}, + }, + { + {3816568398797501, 4280523703434080, 5575370580457579, 6556193442157265, 5400032142723120}, + {3676887960291627, 2721875544375886, 1949386962401535, 2062484445640651, 1831148391448868}, + {1098621584553762, 479766126028979, 50128556582829, 1793185955386011, 957643491878541}, + }, + { + {5624964178025902, 5881679035334285, 5337334188128135, 3373245272349238, 6030340196395357}, + {1686491261026354, 2930481776329103, 2527067703865047, 1879410757156738, 2416602562794561}, + {1954783342191961, 1776196854323048, 1073865783628317, 126006585556188, 551111053703277}, + }, + { + {5863020639436884, 5014608403303800, 3487461172336056, 4625089084538493, 3002443292699384}, + {1844293295362196, 3776383490821424, 1827935191421176, 1761145652561373, 2654244832682184}, + {2163920127813722, 1809848067831371, 1226486593520438, 6568253441272, 318658165188350}, + }, + { + {5229528028782988, 3740161041125714, 3628427289315213, 5072860979211871, 5962952384148406}, + {1112209403436618, 3603724598892882, 3004743983803641, 1636637612372587, 1910870598142670}, + {1139920697586991, 989775023258908, 1562720488536799, 1457380545841604, 910097567659210}, + }, + { + {3041059796685021, 3926553231646481, 4587262528244901, 5282743084605635, 4777345624727557}, + {2431004626164709, 3854783312160059, 3273298459729433, 3386841277003151, 3777213922766615}, + {295894405919626, 1325594150172422, 673838771367222, 604280180076012, 485577818727658}, + }, + { + {3793091552131313, 4374989255749447, 4298473526457935, 3586546830561382, 4785727997920673}, + {3556189185732659, 4013352737062889, 2854416081619439, 1896415948116520, 654670146226537}, + {139962000945005, 2246840272939065, 40902718655534, 1533074280944617, 1032382655251714}, + }, + }, + { + { + {3758431901841840, 4379281609207426, 5017412546860750, 4644243343298864, 4946076247670812}, + {1835401379538542, 173900035308392, 818247630716732, 4013900225838034, 1021506399448290}, + {2056683376856736, 219094741662735, 2193541883188309, 1841182310235800, 556477468664293}, + }, + { + {4597695873914911, 5426082008537486, 4528117456116057, 4391230322227749, 4348938857916251}, + {3566819241596075, 1049075855992602, 4318372866671791, 2518704280870781, 2040482348591519}, + {537697207950515, 1399352016347350, 1563663552106345, 2148749520888918, 549922092988516}, + }, + { + {4827183563480027, 4225372812262903, 3444018843651805, 4582954431755768, 5877642652930841}, + {1747985413252415, 680511052635695, 1809559829982725, 2846074064615302, 2453472984431229}, + {213277331329947, 416202017849623, 1950535221091783, 1313441578103244, 2171386783823658}, + }, + { + {6124178045615487, 5044634958558963, 4487585538139111, 4406665622773445, 4226427082437073}, + {2440888617915079, 993969372859109, 3147669935222235, 3799101348983503, 1477373024911349}, + {1346805451740245, 1350981335690626, 942744349501813, 2155094562545502, 1012483751693409}, + }, + { + {3326465926121696, 4752879014110088, 3426137740310600, 3810813345691727, 3724087589204368}, + {2107080134091762, 1132567062788208, 1824935377687210, 769194804343737, 1857941799971888}, + {1872620123779532, 1892932666768992, 1921559078394978, 1270573311796160, 1438913646755037}, + }, + { + {3280128640868324, 3962843103655104, 3602632284060180, 4174964503289574, 5999255996217406}, + {3089190001333428, 3264053113908846, 989780015893986, 1351393287739814, 2580427560230798}, + {1900828492104143, 430212361082163, 687437570852799, 832514536673512, 1685641495940794}, + }, + { + {5679936010824454, 3977277108025017, 4516300250042949, 2929815522503454, 4666323705890374}, + {3094432661621646, 605670026766215, 290836444839585, 2415010588577604, 2213815011799644}, + {1448049969043497, 1789411762943521, 385587766217753, 90201620913498, 832999441066823}, + }, + { + {3515424710267724, 5606202029043823, 5029901811084866, 4403815652814045, 3735639122175257}, + {2767886146978542, 2240508292484615, 3603469341851756, 3475055379001735, 3002035638112385}, + {442991718646863, 1599275157036458, 1925389027579192, 899514691371390, 350263251085160}, + }, + { + {5324956849177719, 3429271620480873, 5513927382492506, 4069478768490913, 4487763984887828}, + {1005736577196489, 1703778335600507, 1256787933200658, 1273583601164519, 4154995520392582}, + {1181460621741892, 515102888370257, 660560226785527, 1121970691511835, 1609869229541589}, + }, + { + {5276536763892090, 4684953471965519, 6139261731383556, 3763310979241977, 3999629994843744}, + {3197840386614072, 2673429719431285, 2328666993391622, 1601604658039797, 754388419948612}, + {2189230067083086, 574898679774723, 1093556583385601, 1590603941933467, 1876625616519950}, + }, + { + {3739860822512771, 4605148533211466, 4174048138272099, 4387338734269228, 2880424850917010}, + {2359748764236743, 2750393191088290, 1526008165088803, 1669725971211966, 2233234520219112}, + {42208074517808, 919916618772548, 1864146060012263, 405874007551625, 167276017170589}, + }, + { + {4682022353746882, 6009429539947866, 2947942480787000, 5087407628431820, 4667285753466106}, + {1939674698340922, 2060465757190214, 2418157875657274, 1687699771189262, 236132178171812}, + {674205207435332, 837990472116301, 1170756550883494, 611962296440926, 1446026806940794}, + }, + { + {4797835609201808, 3649645875831679, 5195894411777247, 3424984715982399, 5322304250778016}, + {3454576586408064, 2256192384569215, 2864444376813541, 2134820396191597, 1047034985188490}, + {1582224761030916, 260261512990929, 1131518591198333, 94648525453241, 270083062170054}, + }, + { + {5595107036983877, 4494054900752656, 3263812520261324, 5044525307237686, 3722017695712965}, + {1188525422166779, 3589855283768506, 1782193012394260, 2155228647422980, 3120862178456839}, + {1981581840102891, 142303636665554, 2039535378650111, 1181156234198923, 1967834468546111}, + }, + { + {5706915977082882, 3753081378072469, 2510190141605996, 4045103810631250, 4992176450645285}, + {1947964231400572, 2169451112529873, 2463002605422706, 3228930307152278, 597158871609891}, + {1385883488372791, 1890958046379947, 2126979282588918, 17215697802179, 562809648160246}, + }, + }, + { + { + {6060806645993160, 4844231320170097, 3729525723161433, 2866535765304666, 4285036937432013}, + {1689713572022124, 2845654372939621, 3229894858477217, 1985127338729498, 3927868934032873}, + {968764929340557, 1225534776710944, 662967304013036, 1155521416178595, 791142883466590}, + }, + { + {5626780938473300, 5189175572245936, 2759405279195173, 3664390275802720, 2819817138913873}, + {1487081286167458, 3244839255500182, 1792378982844639, 2950452258685122, 2153908693179753}, + {560258797465417, 2193971151466401, 1824086900849026, 579056363542056, 1690063960036441}, + }, + { + {4383124982462505, 3428436472114155, 6260522268883476, 3642043430861258, 4218124990723630}, + {1918407319222397, 2605567366745211, 1930426334528098, 1564816146005724, 4113142195393344}, + {2063958120364491, 2140267332393533, 699896251574968, 273268351312140, 375580724713232}, + }, + { + {4285699823073660, 3996702683556035, 4442379901602887, 6453074611624616, 4734649381664242}, + {2024297515263178, 2668759143407935, 3330814048702549, 2423412039258430, 1031677520051052}, + {343868674606581, 550155864008088, 1450580864229630, 481603765195050, 896972360018042}, + }, + { + {6032529693711055, 6108603534430070, 3306860895022921, 5961918729318160, 5737795472583636}, + {2151139328380127, 2566545695770176, 2311556639460451, 1676664391494650, 2048348075599360}, + {830430507734812, 1780282976102377, 1425386760709037, 362399353095425, 2168861579799910}, + }, + { + {3935550130401342, 5155878315656623, 3473598574878785, 4149160495161916, 4823257793397838}, + {3407562046415562, 980662895504005, 2053766700883521, 2742766027762854, 2762205690726604}, + {618808732869972, 72755186759744, 2060379135624181, 1730731526741822, 48862757828238}, + }, + { + {4481933078376341, 5067550582461519, 4294715789111644, 5330913983663967, 5175628607523309}, + {3714971784278753, 3394840525452699, 614590986558882, 1409210575145591, 1882816996436803}, + {264204366029760, 1654686424479449, 2185050199932931, 2207056159091748, 506015669043634}, + }, + { + {4317070754263612, 4535076723640848, 4810021506483985, 4685558271307180, 4158905350371329}, + {1784446333136550, 1973746527984364, 334856327359575, 3408569589569858, 3275749938360725}, + {1496516440779464, 1748485652986458, 872778352227340, 818358834654919, 97932669284220}, + }, + { + {3850207796558603, 3727422831028406, 3797434477252654, 4293213262701836, 4516227523843066}, + {2048146359190201, 2164495845485630, 1987127118350888, 3702022928556186, 1248356726771194}, + {1517919028451878, 1390653207300047, 480997424969526, 463880049786815, 1566994328535414}, + }, + { + {4207292859242158, 4439237956877375, 6466630861755493, 6117169411664878, 6203775439423042}, + {2630289459558480, 2051409995957989, 2137890426251559, 2865150520767226, 2183646505352378}, + {250950165450403, 2108575357747549, 1858230594483734, 184468003072844, 1358638013010624}, + }, + { + {4795165927742161, 3556821674590553, 4452234877886028, 4063350508177236, 4357194618603124}, + {1363161060275889, 2019577584627825, 655391965916958, 2833727353647238, 2341948580614770}, + {1778982619924496, 1328609079558951, 1163827266617015, 1019320353990254, 830400209170522}, + }, + { + {3688756718408583, 4561393289356786, 5750092980695080, 4477840229539135, 3932387371938841}, + {891039147350711, 498786796467410, 3025350790192290, 652448826471937, 3394872208963829}, + {913282769158846, 347533899935257, 99606006705773, 1452035970297517, 2212487011762079}, + }, + { + {3066351608928554, 4959266561713426, 3505484480779672, 3313237988086280, 3214107063996871}, + {2440372328053980, 3986555651364494, 2478020726949882, 3029257951861872, 1322928669372349}, + {1259703414196061, 804804682694258, 2147323977049515, 252131006189623, 2246814133555350}, + }, + { + {4603288585029083, 4275494842669350, 4559975392494094, 5326825482142171, 4885471931566349}, + {616470521493849, 390707946935204, 1334622907385598, 2029831529830923, 2813735341554671}, + {1307353080865175, 1065210115652369, 1698012640184922, 2095589265946492, 688919666182564}, + }, + { + {4119409763828209, 5174415249772511, 6589359183715483, 3474134685034925, 3261800548024222}, + {3800663179733707, 1510662538907767, 2305029203181277, 1120480520235783, 2745749397969076}, + {959187641997964, 1919963359331922, 1067802756608566, 851276549968152, 2180947835690309}, + }, + }, + { + { + {5516816602304168, 5042521547053092, 4167576536206804, 6246422068954372, 4138350501601902}, + {2723435829455580, 2924255216478824, 1804995246884102, 1842309243470804, 3753662318666930}, + {2094270000643336, 303971879192276, 40801275554748, 649448917027930, 1818544418535447}, + }, + { + {5719674169295574, 4553720561304003, 3817628817819056, 2973527969819827, 4852805692036683}, + {2241737709499146, 549397817447461, 838180519319392, 1725686958520781, 3957438894582995}, + {948617110470858, 346222547451945, 1126511960599975, 1759386906004538, 493053284802266}, + }, + { + {4357186931049660, 4248263218811680, 5806608241664995, 5355507743318703, 5857341677159129}, + {1454933046815146, 3126495827951610, 1467170975468587, 1432316382418897, 2111710746366763}, + {750300956351719, 1487736556065813, 15158817002104, 1511998221598392, 971739901354129}, + }, + { + {3486884278433110, 3417910960117329, 3997194671566838, 3657316287568287, 4508063131522112}, + {1874648163531674, 2124487685930551, 1810030029384882, 918400043048335, 2838148440985898}, + {1663810156463827, 327797390285791, 1341846161759410, 1964121122800605, 1747470312055380}, + }, + { + {4458441089863460, 3942387623406751, 3851973436510373, 4407895911319668, 3358622222233463}, + {660005247548214, 2071860029952887, 3610548013635355, 911703252219106, 3266179736709079}, + {1344788193552206, 1949552134239140, 1735915881729557, 675891104100469, 1834220014427292}, + }, + { + {5125820669443841, 3461946287724414, 3994046236028930, 5907438988749520, 4920789118266230}, + {1920949492387945, 2410685102072778, 2322108077349280, 2877838278583064, 3719881539786256}, + {22727256592983, 168471543384997, 1324340989803650, 1839310709638189, 504999476432775}, + }, + { + {3589266475777094, 5791244982040267, 6521619274146678, 2903981043059491, 5401611380582210}, + {3565040332441556, 1721896294296941, 2304063388272514, 2065069734239231, 3056710287109878}, + {1969792547910734, 779969968247557, 2011350094423418, 1823964252907487, 1058949448296945}, + }, + { + {5777164948769480, 3890309495649820, 5262835493859430, 5169614751717201, 5401583088313899}, + {2459143550747250, 1118176942430252, 3010694408233412, 806764629546265, 1157700123092949}, + {1717263794012298, 1059601762860786, 1837819172257618, 1054130665797229, 680893204263559}, + }, + { + {2942680342150880, 4278613828995852, 5350213167690156, 2989120782966715, 4123142629949771}, + {2556444502235146, 1613361869622030, 1402717375340694, 2348339985765731, 3489511500408293}, + {1426750262638336, 314863572574246, 1394348337483702, 1967765724676815, 1262927622887481}, + }, + { + {4948972567610721, 4760459340435499, 4508373064131856, 4400791580495755, 3326118030989422}, + {2602109836867459, 1003276938441793, 244450874677932, 2495574856155249, 3110870831093824}, + {1089876164348856, 610853718362589, 290946077126125, 1189633635903067, 238116851513210}, + }, + { + {5818313990376412, 3745131403850386, 4984633161305300, 4588134365279068, 5605706152381173}, + {2574353462387544, 1744531678913296, 2081810750651984, 1255482175291668, 1579377192487289}, + {1077984189936462, 1101581309304165, 229118769946835, 213129071862971, 1105903869282826}, + }, + { + {4244657319305304, 4848112240284328, 4808999745724375, 4645297205085174, 4469873257565411}, + {2568686941901236, 1277107033850968, 2743723193537219, 3580901504461986, 430697021449829}, + {5110283730621, 236925008060043, 590130982419942, 541274580551940, 2155487465178420}, + }, + { + {4504922761302740, 3620992509914934, 3198533798350925, 3770782329534318, 5363163230411568}, + {275387113122210, 3501532982637668, 2704624275342757, 1489585626413894, 3573009822045302}, + {1859877583133149, 1445451213294944, 309288119160981, 1843441717427399, 584114977316234}, + }, + { + {4103673694186728, 6461574165907240, 3718162222127163, 6247603847194471, 5772831446786927}, + {2087653679988656, 2238424089144458, 2130407033226307, 1889280872742259, 2146873922212313}, + {500701236542790, 1839091700792145, 218488889984877, 1301749778593414, 614810966957821}, + }, + { + {4649730463510780, 3151390162038927, 5365410818081747, 5007340477551264, 5551016597277571}, + {2300360039943938, 1529233553127717, 3500096717284879, 3664531564773424, 3173693672061933}, + {882756809520167, 998774482479105, 593908492257531, 1132796830151366, 1780707297956298}, + }, + }, + { + { + {4583071810090063, 6354729884420668, 4077544622618353, 3073467147166315, 5285394920882441}, + {2237039662793603, 2249022333361206, 2058613546633703, 2401253908530527, 2215176649164581}, + {755822026485370, 152464789723500, 1178207602290608, 410307889503239, 156581253571278}, + }, + { + {3747179848085639, 4828649103787668, 4549946522264427, 3805208654040102, 5332579729206178}, + {3669985309815545, 2736319981413860, 3898537095128197, 3653287498355512, 1349185550126960}, + {1280337889310282, 2070832742866672, 1640940617225222, 2098284908289951, 450929509534434}, + }, + { + {5758557848470941, 5656835588370337, 3194707518654080, 2888905217772639, 5652892897517762}, + {2659503167684029, 2378371955168899, 2537839641198868, 1999255076709337, 2030511179441770}, + {894249020470196, 400291701616810, 406878712230981, 1599128793487393, 1145868722604026}, + }, + { + {4956087140669123, 3603920362709815, 3425295697596203, 4250911519607256, 4870927757824721}, + {3749755063888563, 2361916158338507, 1128535642171975, 1900106496009660, 2381592531146157}, + {1717539401269642, 1475188995688487, 891921989653942, 836824441505699, 1885988485608364}, + }, + { + {4274232174887052, 5592415718055546, 4229643212225114, 4106634029575971, 5067838489399852}, + {3493583935107776, 2439136865632830, 3370281625921440, 2680547565621609, 2282158712612572}, + {938868489100585, 1100285072929025, 1017806255688848, 1957262154788833, 152787950560442}, + }, + { + {3546872176125197, 5434827532059909, 3607531246326933, 5425835363204530, 5395826856780703}, + {3119119231364171, 2872271776627789, 2477832016990963, 2593801257642876, 1761675818237335}, + {1680989767906154, 535362787031440, 2136691276706570, 1942228485381244, 1267350086882274}, + }, + { + {2787309244260446, 2798685347422569, 6028275236918294, 4389895566536949, 3512537903582074}, + {2617818047455756, 2684460443440843, 2378209521329782, 1973842949591661, 2897427157127624}, + {1159906385590467, 2198530004321610, 714559485023225, 81880727882151, 1484020820037082}, + }, + { + {4265412029331945, 4082570389605622, 2787935123905079, 2861072139265641, 4774283971865508}, + {1377485731340769, 2046328105512000, 1802058637158797, 2313945950453421, 1356993908853900}, + {1237542585982777, 2228682050256790, 1385281931622824, 593183794882890, 493654978552689}, + }, + { + {4433747840806046, 3721621780348463, 4999137013220096, 4950695012032930, 2963731882329120}, + {3700733741689868, 2019165860436683, 839545028551310, 954045289946680, 2857671609142350}, + {2031235379883797, 946220755552074, 1457648474415011, 1222951728743327, 1610191601040290}, + }, + { + {4162295633314539, 4747504508371898, 5420102803358852, 5241263790326999, 4652112494046944}, + {3713236670706339, 1708249553383010, 1441184960961852, 2138372449656361, 2208801341603864}, + {743176047113998, 1210025633688996, 1298930577649249, 2241929289171655, 319185600078644}, + }, + { + {2463674019917897, 4802840710289795, 3812247475965604, 5281339404908102, 6114735096224475}, + {2361755477281753, 3920079557094249, 1772761852174940, 2188727617473580, 1972330964627961}, + {2224894613062235, 459022333460366, 853633232091964, 42662368548958, 1428459390829900}, + }, + { + {5876939711261840, 5483557082287477, 3340896169956977, 4741202975388493, 3246978129870096}, + {1888400628800904, 3246442970371919, 2048876033526183, 418388094414663, 2174354817875660}, + {1865410028261408, 627467389699032, 146077987303115, 1698467014229834, 2014393109530681}, + }, + { + {3339126822971782, 5967460547143544, 4911389289674917, 4202215034765918, 5578073611339204}, + {2670644791837462, 2651763434193316, 2285020046276825, 2227807589256768, 1464013488829088}, + {1806473647942365, 538787999504182, 512973154409687, 1944932181085518, 1069910541821032}, + }, + { + {2634758329364868, 4859512915801802, 4928387675794414, 4438135586288705, 5912306986153546}, + {2593937978996354, 2409464365976668, 2076140577147016, 4427101675063297, 1879995664155906}, + {407209884855019, 2088464831333939, 2111856537862679, 1631244096914416, 1074707055277992}, + }, + { + {4379690451347501, 4147722372858437, 6043474882489476, 3830885552726038, 5483938823325814}, + {502401202015803, 2110371415921011, 2529666734456328, 2767243204597450, 2341774206366416}, + {1547018311600067, 615783499206767, 485547569767288, 1517514580034299, 457611163959317}, + }, + }, + { + { + {6197629798333913, 2753838380751446, 3942959878910714, 3201428133247434, 4778709814063561}, + {2299141301692989, 1891414891220256, 983894663308928, 2427961581972066, 3378060928864955}, + {1124515748676336, 1661673816593408, 1499640319059718, 1584929449166988, 558148594103306}, + }, + { + {3540740886557976, 3183587715724649, 4694330636229537, 4258659768352436, 5509531109592197}, + {1784525599998356, 1619698033617383, 2097300287550715, 2510065271789004, 1905684794832757}, + {1465551264822703, 152905080555927, 680334307368453, 173227184634745, 666407097159852}, + }, + { + {4674947851286115, 5166365727170883, 4965938571130991, 4970517390710808, 2908711106554361}, + {2111017076203943, 3630560299479595, 1248583954016455, 3604089008549670, 1895180776543895}, + {488623681976577, 866497561541722, 1708105560937768, 1673781214218839, 1506146329818807}, + }, + { + {5492578995360943, 3611529141261548, 3553634070931276, 4797740788199803, 4532947899647969}, + {2412225278142205, 950394373239688, 2682296937026182, 711676555398831, 320964687779005}, + {1434382743317910, 100082049942065, 221102347892623, 186982837860588, 1305765053501834}, + }, + { + {3443537155111802, 4098841848663610, 3634013358734303, 3291752209395695, 5292412486267354}, + {2205916462268190, 2751663643476068, 961960554686615, 2409862576442233, 1841471168298304}, + {1346965964571152, 1291881610839830, 2142916164336056, 786821641205979, 1571709146321039}, + }, + { + {4996047770903428, 2555904966356003, 4013566981986303, 4737382312068285, 4233095136791335}, + {787164375951248, 2454669019058437, 3608390234717387, 1431233331032509, 786341368775957}, + {665807507761866, 1343384868355425, 895831046139653, 439338948736892, 1986828765695105}, + }, + { + {5356490725342733, 4068788685039808, 6047372383097019, 3426510449207690, 4705728718095123}, + {3007896024559801, 1721699973539148, 2510565115413133, 1390588532210644, 1212530909934781}, + {1205281565824323, 22430498399418, 992947814485516, 1392458699738672, 688441466734558}, + }, + { + {3538981275120648, 2874522279215958, 5384551777942367, 2992835507144444, 4815164902360267}, + {3302427242100220, 1955849529137134, 2171162376368357, 2343545681983462, 447733118757825}, + {1003649078149734, 545233927396469, 1849786171789880, 1318943684880434, 280345687170552}, + }, + { + {3979319739304371, 3173810108641712, 3480574285526200, 3800294424979384, 3983333585686372}, + {2754253003222887, 2275532945921888, 3105484814506120, 2795714951112672, 3618146930096140}, + {247596824353536, 285396193673154, 686289557053653, 399468081949262, 249109087231255}, + }, + { + {2723125664053674, 3464927193948491, 5445834280101391, 5612124161635761, 2933099654237696}, + {2672303537844268, 2038791134455123, 3285678115022383, 2900519586434405, 1978453542160588}, + {1705147526637648, 1274613803517124, 1602845665731412, 1064073198174681, 1486788069078519}, + }, + { + {4077390367222227, 3800932136610666, 4160144924974108, 3561238039866711, 5997919559096945}, + {819031393505739, 2088275424107290, 1796234646803442, 1388708737598893, 2937136216710939}, + {944757498200715, 2015594302768299, 813220261760372, 867002775164821, 501734915431717}, + }, + { + {4424498381651951, 4370145165962473, 4303795913232316, 4673352990886468, 3539252307041619}, + {4258052207216187, 3760480385682185, 3206156011228824, 4088908699869294, 3011569459811111}, + {1187304510804619, 1384816718516187, 514455602674227, 392638325371554, 588228521113051}, + }, + { + {4219797873858933, 4958627631706417, 4511020049341415, 3218925652522905, 5097166154822735}, + {2789655568104153, 4038602698967181, 1701909246528643, 2824012136983963, 2400715389506309}, + {1130277769648576, 1946206888578836, 1343266549795147, 2083590873042325, 264064594409097}, + }, + { + {3196954689864360, 3706526534080788, 3004981697061754, 5970179548131185, 5036616655131901}, + {1526130015031824, 3071067159569878, 2312643039801922, 2400491084238785, 2092334718179931}, + {1720808849496600, 410920656934828, 864594478015792, 229141760159822, 2037677155881017}, + }, + { + {5749040666310109, 2431937887261040, 3580364244969437, 4752008191428386, 4786853370158738}, + {1789863266178839, 2202012677135000, 2680121806416879, 1722812656485926, 572531509973556}, + {2175782751601278, 1608407337873936, 816706054544173, 258225706360159, 1478818623198000}, + }, + }, + } + + @(private,rodata) + Gen_Multiply_Table_edwards25519_hi := [32]Basepoint_Multiply_Table { + { + { + {4593529082752461, 4913481494458327, 5105340091484689, 3450213179198615, 5857240422918567}, + {1412482364088803, 4062389850048069, 923779398567547, 2023841154802081, 2607705760638543}, + {1825728698698411, 497946242397168, 105715611816086, 968568072676853, 592999326381074}, + }, + { + {4495184218325789, 5289073944532264, 4218636788579151, 4988461406676953, 4686478434934441}, + {2949190053601679, 1979948019919136, 2471186112468189, 3573963359061221, 2216896082446061}, + {743917567567859, 870447381138646, 392196079309387, 1786878704882853, 1520161635991866}, + }, + { + {4744444857419634, 3144662423000833, 2994206879871174, 4901643262699391, 4923693546628412}, + {3089537977529994, 1888948267748045, 1789290739253972, 2597750135306899, 3142762081370390}, + {1764333363430455, 898309455329908, 1381444383468949, 620561614151766, 158377983927494}, + }, + { + {5941345963042037, 3413323930288462, 5115763723871020, 3248416926384114, 5473315945632476}, + {2269111888817457, 3231588657429924, 3123230781695332, 1299656894822778, 1180051671372258}, + {407953783981, 1647278360877740, 584504284208188, 906066565536232, 1341016264992694}, + }, + { + {2432346762050178, 4412970725632038, 3922648159237080, 3005442494216723, 4442116552336937}, + {2381425302937802, 1387820520945502, 3125986768243210, 2463732477189113, 4185413214185067}, + {286790540720370, 376171092666609, 1535083117539001, 143466475958698, 1595136426572043}, + }, + { + {4277560779811042, 4605632954767560, 4619246140475080, 3484505719110307, 4989421629835765}, + {2829089547178292, 1790256014216198, 1797656649279268, 2562891052522691, 493980515519391}, + {62004126799683, 1668357417723485, 402010966421038, 827662362499868, 620754241677270}, + }, + { + {3919396572999125, 3838658814915336, 3750839246192093, 3726674239012627, 3831212626851778}, + {1227888687423439, 2913177985394946, 2412294236854021, 2805130984485539, 1308360976872086}, + {1643929373822818, 59659873139317, 1165353313134798, 2003225793255085, 1953102130608543}, + }, + { + {4114999970343247, 3274056679568382, 3954123294817179, 3769263204026901, 4245068682986802}, + {898618711827587, 1314215296781160, 1302503840208753, 3496738988099889, 1698289814254750}, + {1392999845620760, 634309693840701, 815492400002072, 340703897996290, 2038693787178716}, + }, + { + {5214250944985254, 5214298257940112, 3933846341585754, 5894386249523842, 5770685254784336}, + {1934541077562988, 2222946897208970, 2251242179056732, 1591285457544104, 2747813687509638}, + {1016675746743198, 874873189324170, 1360411561434916, 1581878592793672, 1548505102984557}, + }, + { + {4769452847684060, 4913417142027999, 4139599914472574, 5727971436547121, 5162246544117082}, + {2615904366263746, 737197398316645, 1602932940462504, 2167985252180769, 2559960808783062}, + {1882565165016312, 1581434850744420, 1900290919378503, 1985953844470085, 2168995994538833}, + }, + { + {4554120491153816, 4069860035617982, 4340413640826432, 3211862620694644, 5818608637282174}, + {1544885394173400, 1572082853154176, 1022098019061266, 2766927411109582, 2094149897716596}, + {1565161503379169, 1009067677698409, 1758464151571027, 1604769367828030, 1207412426608003}, + }, + { + {4015717287484591, 5253478309058146, 4070204443357591, 4445835852409645, 4665111518123177}, + {2854833619490147, 3573568625503236, 536183518454769, 2263990573554737, 4044861757799243}, + {1398840935273285, 790488576331737, 33415624257391, 1637374533896247, 2205752015162110}, + }, + { + {4260625486568009, 4637770924690903, 6480430642402074, 5542751059832424, 5622960391176990}, + {3715812780985479, 1012232238437221, 2466752896497024, 2611001871592954, 2143269004082900}, + {1886046851462393, 702395341735300, 737389004224425, 943477665979721, 723064819201181}, + }, + { + {5226062982149706, 4477280967632100, 3095356746333787, 4567645348066962, 4846495995079660}, + {2444351104229624, 212638631228834, 2148034812459853, 1041500100514044, 3853826660522166}, + {273084620529389, 1358348733025497, 1143735162114047, 1683813303234668, 2163735276562013}, + }, + { + {5320556456798805, 4779694419891170, 4876824494496501, 5903452387913251, 4729985500450036}, + {3477960290395163, 2468183980355970, 2936794001231177, 2308108181814059, 1969019168758558}, + {2160310767797410, 344164523453241, 83129919763985, 1315117733435601, 945559910324390}, + }, + }, + { + { + {4363327446469061, 2701839972520523, 6527685309871122, 4056456213766895, 3880569128224647}, + {423177393665983, 2333545232306939, 2028971153113312, 2728157354019203, 3777730507929771}, + {1435691822393684, 1850026012837208, 2218717487026642, 81859254010196, 244808221751742}, + }, + { + {4151019106002309, 4804743010530635, 3757223421954400, 4766036153424381, 6107544569595961}, + {821837003520359, 4010299059749559, 2863227431802226, 4078726431091997, 2442551264358059}, + {1428688544729295, 109069749881410, 270830364539996, 1755181768867140, 162349670944771}, + }, + { + {4642027397896088, 5510058210884768, 4553756231196669, 5068441159437344, 6370925538331183}, + {2639121586131590, 2408957406336796, 3986248100020063, 2989795052558558, 2164082093074357}, + {309881142350067, 2106019349943259, 816133263871674, 2018031260992166, 1563425406132832}, + }, + { + {4395494918929745, 3011447404605211, 3917145931603942, 2759967153620848, 6379442527779295}, + {1498799085180043, 1744340656397133, 2064851197592072, 2429833814776112, 2145324400616903}, + {614788980313577, 1501513053451003, 1472055221710495, 1920317897819127, 2208964791748263}, + }, + { + {3560784093342680, 4994362478801752, 3255476397621627, 4445556105981925, 4954471675599246}, + {2150595732685700, 3115920468099904, 1640951315905191, 3465930332728019, 2707896919197916}, + {612249867445962, 159208429955777, 563950177277347, 561041393363217, 1270750549218661}, + }, + { + {4520180469529123, 3948074172686157, 4376189225516076, 4643310756673520, 5392469157863016}, + {2055033216205027, 2461832572574425, 2742691255886072, 1052243367900374, 2752099767668600}, + {1827261746419924, 1468053133723229, 425022050209163, 1161272199376693, 589189496874922}, + }, + { + {4438522896195229, 5675329383977909, 4882438618733149, 5825827678555036, 4497535703422370}, + {2005207463235253, 2001528853385595, 1602253387656095, 3101879903751894, 2375325873201006}, + {847469444462207, 318959830531389, 408429171873782, 1661514071773102, 909441091898553}, + }, + { + {4102243665939998, 4215863334856383, 4408378320450327, 4622977479151665, 4039328475229204}, + {2174491994328136, 493557282042709, 3602705188549813, 3249913558677235, 2748481399349512}, + {758760864397232, 1830650226770835, 326981597370189, 1345979301472296, 174985669849506}, + }, + { + {3114038058163888, 4115257910705954, 5304962337604028, 4942520420915651, 4570979005352829}, + {1616868525778916, 2685769941228860, 1500533033491414, 2505164168102999, 2558430770009979}, + {2210398167996316, 2029125611734957, 1527318329127090, 226535237621728, 757747276478551}, + }, + { + {5660830910412470, 4039716640180729, 3468207460119772, 4614076381392168, 2442548670982292}, + {2039774403824382, 3183946537620297, 1982095153858182, 1293586830098836, 2438708503064038}, + {1357360519318812, 2045548381976834, 1766860667272665, 994521972889149, 393185631961961}, + }, + { + {6365035791876788, 3957527440519852, 4079038689927398, 4319831229004816, 3943934873019078}, + {2354388502926730, 2133757859975250, 3747940319461896, 1050624714408746, 3528225787559372}, + {1423510913950154, 1407788039482417, 761922275972375, 1783557942644647, 464730646959110}, + }, + { + {5146524748212414, 5035960985653238, 5028883959266913, 3282581313444735, 3905335483972979}, + {950694750709616, 2909132113066654, 2692353349246129, 2659905077175497, 978201784181073}, + {1078796318026741, 2070782433025097, 1700702188087909, 1447652546515478, 2144027848464236}, + }, + { + {4464099897473286, 3120477039861599, 5276369827125764, 3567131403687606, 4968190256098962}, + {4085811716920468, 2616309657099343, 775638006452370, 3253232221169984, 2587485588949578}, + {1012423034220617, 2045371869775344, 1260737445157584, 1833095526522043, 1066294173319533}, + }, + { + {5773192417487042, 4517701999097386, 4655557572427803, 5616698382540752, 3371552871839388}, + {2877566362774786, 4401330265553408, 3208625757371899, 1399785720487456, 2531340752609210}, + {1640471888126382, 1014801052117284, 1178704129888297, 982929852576812, 981292318502343}, + }, + { + {6476452238344334, 4693003674971858, 5211751500997938, 4121351294551163, 3152533251509898}, + {2011936343019114, 1133486795463590, 2647435457385352, 2628952425675517, 2374701464984626}, + {1245374341789768, 946202302464214, 1370924353088231, 682015131982855, 1275473548530510}, + }, + }, + { + { + {4235275101318885, 4886666925763093, 3781172458925008, 4774837350787537, 4519905633498379}, + {4159636855200485, 3150221611558687, 1363421772307006, 4120947913313657, 252053503603381}, + {45902352975738, 1246446699820833, 173320410042641, 1542230462600972, 692910725375140}, + }, + { + {4486356754653352, 5011982731057698, 2800477110646540, 4053556040992402, 5267180761554575}, + {710084928405448, 2105676789486896, 2420643007484910, 2605134634368896, 3302669631199693}, + {2191680341805656, 1972509245077282, 981795995975654, 852454486043614, 1189735660434765}, + }, + { + {4897930998338676, 4879106310620971, 4682586750207620, 6132197307461033, 4233426591406375}, + {3995777047683048, 3833719910688599, 2444044754441170, 2232313400412571, 1420975603500953}, + {1931343025077052, 1393738210614177, 622857924319466, 1123524882306454, 1963513295012502}, + }, + { + {4596722267439639, 4583990247552416, 3156713638372258, 5382313953040853, 4261038954366871}, + {1850504730697909, 4381679472853618, 2011448898092860, 2090154061858281, 1857166627539261}, + {1509035496076582, 1583601071466027, 421912810565136, 1678479534084506, 2033502297510813}, + }, + { + {5152283091655165, 5421718026722430, 3997156174417042, 5001987993936945, 4470112047504242}, + {2238137325796915, 1165391281982950, 2048774700033766, 1309041739154703, 3204681887791132}, + {520151332809519, 1588829471961614, 2166353389460390, 404024831468766, 1335244071323823}, + }, + { + {4644249663336450, 4507701753581319, 3592182426303562, 3683130545837732, 4598992005732335}, + {2528474489315892, 2071299735249833, 2619224970187272, 3271465188079442, 1519932762444249}, + {1935180256227856, 250757393177447, 1959439731378182, 1297506762666169, 575184640324100}, + }, + { + {3998007896814392, 4789639746579090, 5427007329099910, 5561733860472916, 4408133776555178}, + {3563813919863414, 1486712601904120, 2979081810490774, 1807789883906314, 3546555493967378}, + {1438068615152094, 34949160848567, 1911746456436447, 1412684293826264, 1046374507505090}, + }, + { + {3358198622960838, 3580145032458308, 6285906454262483, 4413045221104222, 5178477068028319}, + {1493476678908308, 3319155065445914, 2088667670293411, 3599225826407670, 3126758502479837}, + {1428599160764785, 602821281250279, 1877258833313507, 333285098655770, 740310036947361}, + }, + { + {4437738381533964, 4511430215080912, 4623800711093479, 3858159170572748, 3792114250503483}, + {2569231089452712, 3770152139328302, 3269539085929031, 2383025095054982, 2248498609425137}, + {375535123602711, 924645774628115, 2045840727994073, 766250909414083, 1069698092749769}, + }, + { + {4435294130703604, 4934879817377642, 3598080452693711, 4396369088299832, 6194434176750643}, + {3899859044211942, 3058237431324156, 1669265990252613, 3808823766704698, 1861135005644935}, + {1352954153117419, 632457759471481, 85028188501619, 1852310027888311, 1569233778435479}, + }, + { + {4994607739226691, 3549890051462689, 4602469939135293, 5262974664864567, 5829540047772287}, + {1177033227220429, 1414982090591775, 1722841418062421, 3232176376002923, 1625133154241833}, + {478074309368979, 623121553345246, 885068774570210, 117698677138481, 109006840646140}, + }, + { + {3228583777446740, 3685494966163883, 3859895584510878, 4132565491795209, 3602518465644145}, + {1476961150268616, 2321154243603617, 737795879830106, 3409730959236147, 2062873179003703}, + {1329749333731727, 46254713998516, 373767480531871, 1933047124368118, 430092326122748}, + }, + { + {4068619402415723, 3955796447715502, 3724578346370833, 4337532310052478, 4252452058492903}, + {2483442550312325, 3615812911108800, 2858427288312835, 2135393495237610, 596254727540093}, + {8959488931169, 1768025271694380, 2157573235225770, 292082063715064, 330646837880843}, + }, + { + {5129020796146722, 5575913156701592, 4643684154507286, 5052753294034768, 4627882199658166}, + {1682783588724042, 2651474877391040, 965357158907406, 1910483514645702, 1644451034905796}, + {976078747227308, 1952905065031031, 949292862704054, 1492592732072346, 1010921457352162}, + }, + { + {4006410514827696, 4367363852356865, 3108174070644550, 3399842446392251, 3651405461962036}, + {2963842949036336, 1110443523197923, 2370466150687958, 2051405852060769, 1998735788124574}, + {629291283140720, 1484410172308977, 1230690465849055, 1563468011476927, 1425159147311735}, + }, + }, + { + { + {5585239563455525, 4610636723895044, 5486382712767880, 5982393863492935, 4225244847092674}, + {2874785617528993, 1037465406252872, 3296887051144680, 2286839599744315, 786748793374778}, + {1152063960223905, 1495207756023516, 403624329924470, 288757773501508, 634701074033280}, + }, + { + {4288607522123402, 4846896146524989, 4707359298406332, 5135207568875886, 3789334229842457}, + {2917883701302634, 2925085599109681, 4014710226846848, 912132719741982, 2714081319314151}, + {204576686258175, 1916354881141604, 2182213405559566, 836541881049164, 1393662576855498}, + }, + { + {5759444997810940, 4193440837630205, 2993247029494710, 4574723038696780, 5462384317223070}, + {1429326167011008, 3849536799125309, 2267296904452424, 3653618160132546, 2008400870233860}, + {1583200791922713, 581155064879634, 776749520692821, 82151283071376, 1733847968592305}, + }, + { + {5824219020582313, 4082583579489045, 5236716515955319, 4695754388607834, 4087929633004663}, + {2723457493421297, 2288104271131495, 1889807602666693, 571526543144584, 2151183507738315}, + {216379584390389, 359329711860756, 2220840445637019, 1935487238453911, 314381139238943}, + }, + { + {6324432942393073, 3866303010803999, 3020114267775140, 4943018510078408, 2696166744880915}, + {2134908988986295, 2962507202980067, 1681144354786142, 1678261855220080, 2165079891714277}, + {839191618399610, 151822034158330, 65272611705697, 938153274860627, 14360318777459}, + }, + { + {3118414549517527, 4750668024533744, 4389573074356623, 3687569756425714, 5338903547055573}, + {1473478682616257, 3633382583874766, 1909784146543313, 3349986706799106, 993668408613515}, + {364270308207016, 667227739516977, 122427551474936, 957177061876827, 1110258403339423}, + }, + { + {4256211953323020, 5655880769308112, 5147711084133693, 3515346496193909, 3997285326966523}, + {3727619641010474, 1181551732606964, 2600588673325403, 2469054944509579, 3385365618247725}, + {858909692206820, 61057235030988, 1105898533486092, 2202030785898301, 1422234761465688}, + }, + { + {4566369519147140, 3936942479708331, 4946651352770194, 5597737572220025, 4038789996699983}, + {1354120322856538, 3567014996875285, 3125649205892726, 3221576024570935, 3804405204938131}, + {758252632702114, 914226082256766, 434171717412081, 779505540917105, 51590353584795}, + }, + { + {4416135541622855, 4651530410104026, 3833614791957416, 6714310821280595, 6038964345007539}, + {3122819969959355, 1154192626573742, 3197914057178582, 2213609121110881, 2415518693959367}, + {1900133378602138, 577297894556411, 1975904780443420, 367702995667978, 971695605371773}, + }, + { + {5691739211507754, 3947360890016266, 6002902486092077, 2925962297163746, 4016189592321792}, + {1294948213915982, 1859247234048810, 2826079115120605, 2717796469093276, 1254328736376524}, + {1309911522909577, 1419436642934017, 1066858837800204, 1932820656369018, 1183788306261091}, + }, + { + {4373293771099146, 6029412334349101, 4603988300239160, 2779063318785645, 3538182001391078}, + {354784062716014, 2960996156215287, 737478213901140, 2448765213738437, 2443710778345986}, + {37327849111839, 283459044945755, 353933224898901, 1645288254358965, 1295375429334450}, + }, + { + {3677292170794769, 3117650463171591, 4719239493455234, 4362161261080430, 5717636534074846}, + {2663608264759869, 2105855808111831, 3795920549032608, 3588992239888494, 2806554331792318}, + {2036310356419974, 1862941437683537, 2122628002305950, 427826430955887, 291402007632220}, + }, + { + {3100956993836596, 4149163064979557, 5785693523916593, 4751072583726928, 3316412298207139}, + {2400585099524078, 845178406557315, 1712123121349035, 1518690883002826, 2049951197688491}, + {1805653877101595, 2041224626272278, 851063029095866, 1497753468187708, 1406228898239886}, + }, + { + {5260996583106547, 4838608075273405, 5366327117123850, 4982440029922063, 5698050109664171}, + {3676073115087797, 2883668558141193, 2503071760256012, 1640618939206309, 3001604944016599}, + {463897193543924, 852129647033757, 2185610432355774, 914719594057928, 342067349817283}, + }, + { + {3765905247379871, 6338723143452534, 4484328730824797, 5536719681008311, 2764639921823257}, + {1030797243840613, 2110720517661432, 1415230398470209, 2977956931886379, 1982287306571007}, + {2180738906930659, 1806951067450075, 36005005692651, 303238055099928, 190139573853343}, + }, + }, + { + { + {4025496086329564, 5028184343166740, 4304607245262868, 5977861543210978, 5975943712754890}, + {1773953341907106, 1826809791300708, 924874532383668, 2964289914628984, 3000051694532148}, + {1048828262296911, 626018299495748, 1536855937015065, 557005099579827, 205000143299648}, + }, + { + {3686649646834702, 3431735540864864, 3540678075266127, 4755119958422340, 4426577953698517}, + {941815577996700, 1930911276112812, 3001621068228165, 1967675522206374, 892948220720651}, + {39364207708032, 54077643340559, 47072300438335, 484490203728205, 330170579231628}, + }, + { + {4702834568738627, 3291678731018536, 5642230899808367, 3758646432111623, 5155137589229851}, + {1020447780607279, 2803044870250806, 1618835409581889, 2925650123847541, 2605959132875331}, + {1190283817822151, 29815862110548, 1401771831527381, 1814017508050437, 751331585591881}, + }, + { + {5109595606310342, 4551817631663576, 4964640045962167, 2568185324125768, 6484076393091613}, + {2159866514586362, 1758376548473728, 1635569740383557, 2443910752037966, 2023235829583533}, + {535848012622913, 543536404720769, 149076814975879, 1567757637416350, 1002851193383852}, + }, + { + {3815561875504886, 4987304354260221, 4882489851059671, 5118054256243381, 4641807084989976}, + {850247344591352, 3894610597706487, 1974409276090169, 1605973976114297, 3601811238228268}, + {66796032196982, 83108349878636, 1058512765854606, 355785880766958, 2173660513649027}, + }, + { + {5137434473036957, 5769675136285847, 5436511544403722, 4264839407576387, 4266175067727596}, + {1941123290917747, 2316977311376991, 2913763383192580, 1172954226263395, 1951085968954154}, + {1331723279107642, 360406964548232, 602431788387748, 1292398959539176, 347247628588850}, + }, + { + {5432516922132898, 3078886318864995, 4583513191179486, 5867019372106709, 3411264839291911}, + {2170226002806030, 1739335733478471, 4017472424997012, 2918660155665329, 2793865679796361}, + {245885669910192, 255454579697350, 869246923980317, 823008017430135, 2047987637517532}, + }, + { + {4988197221931747, 4124266159815332, 4025663002514467, 4403069876409057, 2825978174946111}, + {3615548446949869, 2386240595324376, 1969460953567929, 2939417927358269, 1831662708850445}, + {1325588019367749, 1763566216507756, 445592400440775, 1009027711126237, 1471076108623188}, + }, + { + {3535455324868691, 4187842716980314, 6000482158112321, 3740505414106560, 5271856051582847}, + {1181816564414671, 1156678021972118, 2682384137206273, 2260248858296388, 1100324256765571}, + {1487590095774723, 277659353917859, 1381509894936782, 1061130669028904, 1364761503808628}, + }, + { + {4778189969823672, 4001451898457449, 6113563635354943, 3279804336055010, 3551539211588960}, + {3358253142401746, 2070882729090991, 2076758122179069, 2612730216279296, 2875157527961954}, + {1082784010061460, 1534894036268453, 1852407202514802, 2109696474131863, 1530718911157644}, + }, + { + {4923904010378051, 4401333064112293, 4345896142363128, 4462036896398403, 4199434117360330}, + {3404425764066199, 790431937118435, 2117892820897492, 1747418170252123, 2322149428381644}, + {1548552607325007, 2020524571521392, 198565314654983, 490668591018400, 531050967405176}, + }, + { + {5145969570912646, 3496492300608685, 4069590843971303, 4335556955800239, 3325377629546533}, + {2623126033999932, 3437252355580701, 1673392257908819, 1954440682865467, 2560737733895255}, + {516406018439380, 1624367135427190, 1319745729116992, 1076628515910554, 819495581575694}, + }, + { + {4005978810673255, 3160053273427578, 4474659303213566, 4173935427495701, 5201857712754300}, + {843136030895887, 1929944939303616, 884551308418834, 1356687291240061, 2259204804361506}, + {1461715846997541, 2038281458208083, 2119767535863762, 636224052565171, 1712721429371389}, + }, + { + {4975731433879692, 3888553624589664, 5228917373823987, 5038386998880250, 4707655682255612}, + {3409114563124612, 1820064381354618, 2421007346773091, 3239920960596314, 3726969650504610}, + {475869807928836, 887669112822100, 481835223948027, 1468799954696850, 1370247723645687}, + }, + { + {5954383345631578, 3742995524386402, 3611065523713845, 4447231480190211, 4725820376570018}, + {1943063487159002, 2890245371286974, 2837035330843453, 1080549927676027, 867285909606140}, + {1413582027032622, 1273926892909999, 726179076119442, 699229594605794, 406422835715518}, + }, + }, + { + { + {4513888950241631, 3212738446973608, 4558390526464820, 4859080230791315, 5273416148656656}, + {1326059070986753, 1683859889439034, 3052200172327874, 3805600625804475, 3687690452819464}, + {1081752225631401, 201284952113932, 1619339403526661, 1533363030164674, 1727571790703503}, + }, + { + {4206177554516483, 5468031785191800, 5978090949319557, 4899439545685678, 3929672195094815}, + {3151535789445747, 1741766716299828, 1742063303545331, 2027626928190420, 2245203856982753}, + {868012933261061, 1472665613225898, 1744063644616181, 1350305502884983, 2227467074628670}, + }, + { + {4669057309967741, 5650515638764201, 3042033906165361, 4078124455841206, 5666341739515191}, + {3587030559572189, 2850528363281919, 2974216851298661, 3227895056003248, 1349661756105253}, + {1313383948772993, 1074655824143287, 20040386640896, 305794891855170, 2123092901229151}, + }, + { + {4199945629383318, 3594320984526977, 4229880092041671, 6384664478996443, 4732837782434517}, + {2744443256254860, 1013874505344583, 1972732629285783, 1936827407065469, 1830481951704579}, + {634737804354539, 422989080575800, 1774993942417585, 688011718282303, 581542014403477}, + }, + { + {2816888940207091, 3903781507184007, 3616069829367681, 5525450216549915, 3780846206608878}, + {2517199667227667, 856367096857961, 2630571629218547, 1768604592283813, 3688963458794126}, + {1683677903016217, 2036167240589310, 262287609979509, 977873833112269, 433284640623898}, + }, + { + {5477402921384451, 3117269161199628, 6049837891653338, 6034999812243824, 5356551064760510}, + {1755760392036121, 2130115351478138, 2694425247498002, 2043622709923142, 2338295058055586}, + {1425112218383847, 329346717672590, 378517748485393, 1806152114945447, 1211275024279312}, + }, + { + {3594715588472482, 3844045487620198, 4484578538777484, 3113667148844230, 4337495224693479}, + {1968587687914188, 2881021730370090, 1429009633828432, 2770076641127580, 2012343565772575}, + {1629969809602186, 1106234784906336, 863587490378700, 1792807263239898, 1429043938024750}, + }, + { + {5737804770941067, 5078013196347608, 3898224610791405, 4804530531188967, 3180800540121608}, + {1973106012015851, 2593923400059844, 833516958919695, 2182197879897069, 1721403407106648}, + {1591076166555979, 849361769125080, 1443799738863429, 166584794343739, 1861773413238536}, + }, + { + {5730227718465208, 5596273386383722, 4195854427433762, 4069266668520101, 4524280540784068}, + {1968981310480276, 1950975116204498, 2592307802896060, 3813918534870745, 2620661073133464}, + {936764653391291, 1452448249608980, 1312847510424692, 1846051928374105, 531372961271999}, + }, + { + {5549943196407418, 3432818760073271, 3449244033859606, 5283577488399029, 4864604608008479}, + {1733819728686816, 2936024966547233, 1590816041651632, 3163811004299109, 2676757470677367}, + {1319097278964637, 787422552977413, 1599496421811883, 1959379193761008, 1506646670818903}, + }, + { + {4227254412838170, 4548570321204425, 4285644009760393, 3751016940211786, 4098838617641914}, + {1732471582908700, 1866076266304485, 2819215151172481, 3074745073420508, 2774887501545996}, + {717261628309176, 1858796230699344, 551077134877547, 149402535309098, 2105648961714394}, + }, + { + {3871916223505114, 4749816457502813, 5358561311326743, 4112663885073414, 4137415642080692}, + {1127279535151728, 1199265744257977, 1248562495202825, 1868357952639788, 917052103965266}, + {25664888255034, 1628004430886188, 1439984389498414, 1961957176184883, 182596205772698}, + }, + { + {4179077756813138, 5647690538147405, 3274850245594335, 4319226212135161, 3864148139899748}, + {1739387701061410, 3112148637704823, 3028846916651989, 3700388643798173, 2412185850016002}, + {975143220058337, 825243809988211, 515186464897625, 1179464291552333, 2112614471328036}, + }, + { + {4947873049161087, 4901033700427489, 6675583808729484, 4941667050946228, 3120269525234559}, + {2996598747660015, 449189546044795, 2197501482114022, 3158206489499126, 2705800926920583}, + {96737353895103, 1534044505139178, 563303281603459, 407703386650348, 1821870774469537}, + }, + { + {5049500432849751, 6040441932911013, 5618655093441099, 5061587505104794, 3837175101097290}, + {2654088892951999, 2871006956063187, 1742690076584393, 921899537851044, 1870021525725886}, + {1637444308641066, 1472124432669136, 741811397216072, 1252880060061292, 423564866101658}, + }, + }, + { + { + {4796818337004571, 6222611117014093, 3083419469630983, 3862822099971652, 6509664209117283}, + {1171837083014025, 2516532715963947, 1770010974323603, 2517908022038722, 2020794083615321}, + {762321251771152, 1460210191529427, 2248797163104578, 217468651569622, 63003536153574}, + }, + { + {4259858178043342, 5554955317979561, 3911791110113593, 5525892988208900, 5545696994818748}, + {391588043113892, 2202456919563943, 3869688632614537, 2945959779196464, 2143606811138354}, + {719793864170869, 1411477466905009, 1515019021063010, 1483421690183889, 1704042941619334}, + }, + { + {3034963268199750, 5870224135513779, 4115305817554936, 5421579290342892, 3835694901998808}, + {2769635787032504, 2958323523618463, 1537480429839772, 1483278086593314, 1378968978067758}, + {1315034452637574, 1172434640681242, 1135533609020364, 253349230877293, 161211572823476}, + }, + { + {3942650253210285, 3918824117103583, 4001647299508483, 5240554545879312, 5035373070605317}, + {2659408003097885, 2049444491227493, 2594690944032877, 3421228755254048, 848234126951057}, + {437225545901468, 888271756229202, 903344393515123, 162913205438885, 1475178706291532}, + }, + { + {4287921885063088, 5041248821201299, 5585484729625036, 5534367719396511, 4532272822475758}, + {3707293450173872, 751219268219695, 1525065253586106, 2054680090861517, 1393874745922970}, + {1910711495320594, 321017884248758, 1651671690842787, 527123817162741, 847944616444202}, + }, + { + {3415231495445846, 4190597015532201, 4905073239386883, 4940927269911495, 5980840029199164}, + {1474221667712446, 3068688770339565, 1358088375247373, 1853329794010803, 2931295009606082}, + {70084211861389, 1248863300280704, 1009402227613886, 1445171656255193, 728732085908498}, + }, + { + {3340501878764401, 5410923356778271, 6030788584012822, 5594611759355304, 5267577702264329}, + {2869750492870027, 1153392601340917, 2754776472841130, 1100510641818700, 2870221151280913}, + {1481950048975238, 97096668186528, 429204027887699, 1510003697018425, 2114825823462494}, + }, + { + {5159850395392603, 5067743945456882, 4551909910661973, 4393814096795878, 6145580658249508}, + {1440929316705129, 1633730452330828, 3657204567294737, 3657918436987822, 2561724546723194}, + {809017030155597, 1831934834657405, 58189812416765, 1517873507099267, 889681994437792}, + }, + { + {4153444167566628, 4372997703941365, 4839161526733376, 2653398635504610, 5324373835991045}, + {4007354401668216, 1201450641763461, 1526795422335006, 2273741230894754, 2130356372280991}, + {1057020591512462, 1324094020999413, 655956927766596, 659874727272243, 2024954110083652}, + }, + { + {5839605326568475, 3831434019746100, 4883240784156331, 3880003889048305, 4841910074653809}, + {2844236939823231, 3043783621566488, 3890227240890757, 3800769469380331, 3175183419371011}, + {863608592350445, 1111828464904337, 322487356734403, 60843367779474, 775147863897458}, + }, + { + {4129677439236364, 4363616958764152, 3255333433286932, 4071265658640216, 5527560633207578}, + {3501906805856088, 2995655036831742, 1989943322549290, 3334534687075832, 3371315397704424}, + {471893887981193, 1459834432249674, 229072407724256, 1165980516905022, 1036865507138076}, + }, + { + {5587927329012785, 4196019533185475, 3488244055775669, 4788679066807545, 3936797203887245}, + {2334971095120001, 1054095219722721, 1729452124624259, 3446754994849569, 3835890504040419}, + {883720982539262, 2126174835830047, 1858128110066030, 1402309396930944, 1358212283922371}, + }, + { + {5437236132245684, 2619202868264644, 4266616048403094, 3779544081061673, 3472381895789909}, + {1158559475833858, 2227035258871772, 2170552210791850, 1087363571520417, 2867304161007231}, + {116357390237056, 38114324586368, 853586347213800, 1638943134635811, 1882124412005945}, + }, + { + {2871025108215057, 3893039278529517, 3878244260089116, 3893554424872522, 4708186328386966}, + {1760242418163439, 3855738944127473, 2877581036561996, 3253911846338252, 671018190326366}, + {1641735698439468, 1630160111859414, 1920036824528970, 346120100914920, 385076471695398}, + }, + { + {3934974918427731, 3807320560303621, 5860456491598573, 5199210868384009, 5781319959443384}, + {819456425532597, 2215390016559513, 2301197053109143, 771274648900875, 1303516882225152}, + {1530178090161037, 1646502716614548, 1058228190532635, 1522572712238470, 991147078780643}, + }, + }, + { + { + {3763364100157977, 4436158450653533, 3664705850096563, 4592883978910063, 4855668048892712}, + {3431442042489897, 3670457457720097, 2927483669898581, 2847896260114069, 3422237175305894}, + {1907217462504765, 679044428705663, 1371479879514675, 1420793148384765, 190685345044087}, + }, + { + {5140896563326095, 4954544354938625, 5148671791011404, 4813313238272129, 4814788700593711}, + {3528505813008031, 3913030166310689, 3457534787545946, 784019563379975, 1449546143149561}, + {2213525665395526, 146358659614731, 1573034916169973, 1131167148341295, 1194403623212224}, + }, + { + {3034590507214084, 3771531416844161, 4279939895181473, 5778619660734332, 4308244183318381}, + {2105305689409168, 1932040296635725, 2559301608776867, 1653053081843050, 3498476220207615}, + {1916484225176, 1896106466807315, 1279953155660650, 1725386140841619, 757101416534772}, + }, + { + {6555214085737347, 2980588876755702, 4785845115539682, 4430693817238987, 4107141749770380}, + {2133488547373079, 2884934342093682, 1652284377802152, 4287340267215791, 2741073463083472}, + {655928016394658, 1087485647128905, 1281789693328119, 2088439151211398, 1863153332596984}, + }, + { + {5220143354789533, 4303392603719785, 3697665521216293, 5367115036779017, 3354674257103145}, + {2461817469666051, 4062983661511151, 1323101412046937, 1360571080713195, 1716626899554003}, + {1790273650925445, 2180187262630477, 28219260774301, 1951582862584504, 1059160821201578}, + }, + { + {3706860118974125, 6182298149062642, 3206841902738667, 4986080379139384, 3223876357324169}, + {3108934357344473, 2823383892309930, 2709776767813967, 2732378265738840, 1695118712507849}, + {95538772778706, 1914880923031197, 417513632407841, 1767845086605839, 832379724270193}, + }, + { + {5132941124964776, 4798553016886828, 4052101096460607, 4475816634870178, 3176602159556433}, + {1456443406045738, 4161184975160682, 816382632051403, 3678387736600146, 2166890266198131}, + {393110820654303, 662371396172458, 1370237312917823, 2034119121136113, 904928937827}, + }, + { + {5075422185081409, 4699433492834214, 5948286955155472, 5933498265459676, 6441657203628461}, + {1257344135899307, 2776494249972420, 1637109398723534, 1801319038042246, 2082644998926031}, + {189274223123103, 2188109173279445, 1461570511269332, 151886143484743, 1557837550414982}, + }, + { + {4365365818590957, 5180206223815189, 5035374537630803, 5955216889373899, 4177347431591518}, + {4105224954841159, 3814048291702159, 1805828417935849, 1548444252518409, 3761242775865814}, + {966697507230426, 1689614203301123, 867370120071235, 563108996765880, 1552869095947518}, + }, + { + {6190612622769392, 5262116783421509, 5770823033954832, 4892678801476142, 3789326136184388}, + {2680510164419078, 3125272296703659, 2480535210869218, 464721098622880, 1141684153257222}, + {1871952745325912, 144470913279784, 434631777342778, 552837449330893, 642852750438644}, + }, + { + {4755508755993467, 3653868693631672, 5880862524139354, 3244860344044728, 4481011039901531}, + {1809358219650823, 2339660560948574, 2410584439137912, 1286742564054194, 3633419878206029}, + {64765075641768, 68764899017819, 1968408548264810, 2037002115471749, 211556643344747}, + }, + { + {5543625841706618, 4560629261024327, 4731751483103768, 6307249547601622, 5012757099435702}, + {3301009531661216, 2677459079264873, 2707326467220240, 2261655438430016, 2962646350850358}, + {1579401584164790, 1951017356653076, 1801209077919862, 1153368800641031, 1775772413220140}, + }, + { + {3556317598507403, 5934251293404526, 4176527831714322, 5239968931380200, 4506603999756496}, + {2798836099557035, 2002468979873228, 1132424890166086, 2388404451698808, 664387721246094}, + {1947208168676528, 1750536949518976, 835780038339521, 1802624114603814, 1867663782159356}, + }, + { + {5351331441108046, 4901733280572801, 5434846723443585, 4372148225205494, 4376250516119689}, + {2519667781375866, 1132412577764719, 2322930879998983, 1660817657158452, 2806576583179867}, + {1273923691469553, 1862566872300733, 2236121435313308, 274949363314112, 477088969758259}, + }, + { + {3358480296518006, 3814827118577810, 5033804317047304, 4803399909431456, 4940637069622359}, + {1965761504739774, 3200209926214852, 3722168784530754, 3464219522306102, 1953662369491229}, + {1946412430894973, 2031215026716789, 1150845535883051, 749273986980949, 1433091314912259}, + }, + }, + { + { + {4565135018699993, 4952235844716789, 4332776238462736, 3944983589420527, 3534528668424353}, + {875483311206731, 1070293195031859, 1281389774974538, 2234860500431395, 3030484939064537}, + {2191861413872447, 1998107865473216, 135161483760725, 1133778951112075, 2177808149908975}, + }, + { + {4472607877838387, 4680291079417999, 5266381476904463, 5448529984859500, 6037873358663623}, + {1355285592679599, 3216332013847453, 2858567121370219, 2432376038574376, 2734263724238645}, + {449706520184472, 2214233011551797, 684523848529734, 431843026966950, 1758835924810462}, + }, + { + {3413242279346498, 4524603375434282, 2637627437993422, 4373910262118552, 5420094068912965}, + {1617166089281188, 448710947316786, 2017034644293574, 1886691422085664, 2375442150405559}, + {1239614751060180, 254449956067847, 1915952567259905, 391989559805324, 853553448301328}, + }, + { + {4142542119790983, 4675453183245373, 3888287250251838, 5522078723840086, 5552692716915124}, + {1381495390544381, 584763141985101, 3131504846670548, 2565162572339012, 2037973653370614}, + {762375715838646, 553562190209386, 1146347552263484, 824188464596685, 1830942666102590}, + }, + { + {5823375217862555, 4240127004291848, 4611065015006224, 3518908128296096, 4915429068500234}, + {1348374701112873, 3953700554194482, 3402331094627540, 2804779645909956, 2204826476892034}, + {2119092558617159, 1045482671389213, 690197889240825, 471826136635342, 1637923217880356}, + }, + { + {4059066650158007, 5141565698162354, 3733026015817812, 4875063676054927, 2832005231346927}, + {2181081937454965, 1121830291087960, 2832579231299976, 3124836269482413, 2225668708158199}, + {1193994157146400, 1628108083694642, 1021885296427132, 816068909639879, 2088480068848711}, + }, + { + {3180618525607636, 5342429333917474, 5008239417572170, 3506064373977331, 4538653079573275}, + {1673050054377632, 1765054067091528, 2962973405879830, 2339273872052899, 3950931503569149}, + {2229241184614921, 2107352800266199, 77312115078922, 2151892262530718, 947910914861383}, + }, + { + {5320544374459840, 4141095319362425, 3313360370605015, 5185507100540960, 3283266576250376}, + {1528297312537716, 2187935649407647, 2967731417391411, 3155021192657576, 1577434241618944}, + {1385713524190245, 153942078459639, 747467190641094, 1446053675113471, 429215290527338}, + }, + { + {4130033413775598, 5253437474448919, 5186743122906330, 3072446418934431, 4486276088811881}, + {3865635552262096, 2111934227084997, 1803460783795098, 2595364764305293, 4294038033412459}, + {1939054538963024, 1515892461529143, 2145315228101212, 206131396483318, 1207808442703235}, + }, + { + {4285235833599064, 5004869505494285, 5398338412388895, 5145057161859867, 6219558308357834}, + {2122251221692966, 1686529461497383, 3592144721245791, 946103181235971, 2261774551055452}, + {1519512635495115, 1879830706415200, 631994832099345, 90552542491442, 1074938948794598}, + }, + { + {4349405123860786, 3135193611243628, 4214940643324649, 5373877724549797, 3499285433136967}, + {699708361184464, 2781323063917462, 1664177773796467, 2129061781951253, 2929310224293355}, + {881819301152893, 1404208553713523, 1706641996539966, 685345252606027, 879987031868371}, + }, + { + {2629920833708073, 3077736686198199, 6153945246604194, 5109883364128321, 4007866927409167}, + {2201062670972485, 2517508956278887, 2681660437016124, 2026769404043331, 1562746334284849}, + {2029537774099989, 798336123274982, 962765795717174, 1441375461370721, 595792417755859}, + }, + { + {6147148440188849, 3255264873123981, 3737719663259093, 4820083084252873, 5252844759112604}, + {2825984342500049, 2739886905391569, 1677188826435105, 1932192000687991, 3155126576093338}, + {75347910850483, 59335245365512, 2051925237105745, 2044824231668461, 970303688628601}, + }, + { + {5763564504160432, 5421442243725773, 3588496091914407, 5369436266097375, 3995085142922692}, + {2488955180168268, 1799719498283103, 3012193868704087, 3191119683274303, 1313407450591024}, + {1669605168509235, 1046380333598262, 8317204728147, 1002144485955824, 1980712166998785}, + }, + { + {5208877095968696, 4101472145123500, 4547654469901586, 4596473001183302, 5108183921345691}, + {1614319198851918, 1592777501272444, 2078178842786638, 1134074463419502, 3406886179792273}, + {46520703266015, 1463053727782106, 1641431035629451, 1167993397224604, 1860200763335910}, + }, + }, + { + { + {3011332796830409, 3293305844851756, 4350706657635174, 6528175041183782, 5633500660447495}, + {1684548552982151, 2512680297050328, 2151565475089600, 2240257948464080, 2357334086387757}, + {2245889758290233, 1304556815701186, 1427348922813143, 221464961710041, 2149077757654506}, + }, + { + {5021889171679330, 4462128123863397, 5496067810219064, 3884382915013647, 4592260500935750}, + {1200977971745538, 679604753110803, 2370440117588934, 2264961098110051, 1017048311556208}, + {1190992926530423, 1046016291129455, 1934369009614752, 958221374199446, 762751542850234}, + }, + { + {3460977055305417, 5402529018730102, 3060601098222640, 3497142554641379, 4775614304897016}, + {1196600994744545, 1547369290503378, 2035231477477616, 1257032246257935, 2729013549752394}, + {1316355169784636, 2159471323343549, 195437001734225, 1784725127680235, 23628188515854}, + }, + { + {4414887133757738, 4702915728776787, 4098231006823107, 4707645820548353, 4031420634244190}, + {4034197670769956, 2299895540249251, 3720313013014369, 1169924369129605, 1452708652401532}, + {246845927125542, 475207520380026, 1495857355234583, 1332907410765356, 1137190823002655}, + }, + { + {4619638086363716, 5112231939480403, 3430351651754637, 4072797244384643, 5452815353333736}, + {402770419372162, 3130948749709529, 2422951975073025, 1521258543891683, 3268450338566556}, + {122249525311324, 1126352422834922, 929325077009082, 782368628240853, 94217591211022}, + }, + { + {4962635153104108, 5274135403834507, 4755774461820061, 4383546262262835, 5457666487690905}, + {2990995606289826, 3021922427972001, 302802129599791, 1502244105829111, 1773114045409669}, + {156241863414061, 496518516536107, 402847929676013, 1139792271454333, 1977247161507402}, + }, + { + {5032814130431534, 4760678921877281, 4442869438253961, 5565429687944605, 4317400766530169}, + {2463323770855702, 3896470221755473, 756431515781897, 3201672938286523, 2288460277235041}, + {1855056967762827, 1495181328549832, 966278130514841, 758391654071223, 467588501531856}, + }, + { + {4817034814919500, 4208076967893683, 5868839484739037, 5852497340094076, 4630054499608831}, + {2436900424213206, 1954148435588967, 1712385658617173, 2723793304425402, 681838917243489}, + {1439947543028469, 885225692302481, 1285222886469976, 1588398795428018, 1298691185892088}, + }, + { + {3166915207030205, 4221727132556131, 5745276646060520, 5830694990900872, 4237998343894079}, + {1368851636374513, 585540725726993, 2239345036245042, 3124363364569248, 2914970196697053}, + {1206666555409985, 1789371104267935, 1925466428785716, 378678703847709, 378978574609534}, + }, + { + {3049990186077834, 4282707068721497, 4031467457902549, 5045270642251952, 5619239366726696}, + {2247218341382540, 3733105160936895, 1542123681165149, 3690639696246556, 2686757663719606}, + {1131525507915411, 151967851358587, 1334045685598637, 1807594577522576, 1666949318203671}, + }, + { + {5317642436905001, 4262905497079623, 3806587609027544, 3162214737577195, 4598325819108034}, + {2322709256244499, 3364701239080335, 1085438519194966, 2211341194954781, 2734280485747362}, + {547075051672667, 1927631982974242, 603999740914722, 1974345687792190, 310412755046628}, + }, + { + {3092260334664458, 6358353190373839, 4150234089958180, 4141601803005412, 4164851538431420}, + {2480565549840732, 2510439995547619, 2534702111260990, 2561344597955166, 619102460354386}, + {1996829248620682, 1059563669319507, 2240440638640706, 1599145288747177, 407659118560947}, + }, + { + {3115383537041122, 4344887992692310, 5501863024972572, 3993241570720752, 3416751871823654}, + {1717619697579090, 3621794853637170, 2666986311609642, 3029150476191498, 2414353362640396}, + {2142003785026841, 2167906365984504, 1742773278204754, 812925480008831, 429368090247755}, + }, + { + {4184856094603567, 5404235283771230, 3764176438258862, 4280121628742729, 3445790640140600}, + {2656068733977443, 2976637537776442, 1238993222325972, 1554795161393303, 2131523863405492}, + {1574345185045103, 2079161140310195, 2092484433153763, 1408980124437971, 44981420431371}, + }, + { + {6193742471986890, 3621814037880206, 5498721010846514, 4536848636334539, 4762288817182267}, + {2703599140394458, 1961129680427764, 3192043467883058, 4259887504588631, 2455375021790255}, + {1758602597767485, 709830862658938, 931608374711636, 2198476269423406, 69272189710304}, + }, + }, + { + { + {3960691793618422, 4697205665896081, 4233023106925560, 3551947497905370, 3667490775726784}, + {2716251404526112, 1631117916585969, 4014857913931082, 2213037729836094, 1396521499150134}, + {296206175452724, 658879322369119, 97943562265366, 1761747874053347, 665498744562262}, + }, + { + {4542146017866057, 2313615921887147, 4181202139006694, 4414799599657545, 5341405847272363}, + {1200760264207189, 2304738880112015, 1927960174691144, 1569518880089323, 1152309979337507}, + {2038947849479643, 237162323211423, 2065816839891168, 419806183479203, 384865548997533}, + }, + { + {4632532202820720, 6679838284939842, 5003934316625137, 4209971835933588, 5519581415427037}, + {1152764853239608, 2282089860477202, 1601380253073465, 898105377854964, 1583948862629235}, + {1558193059260245, 1778073808602536, 402624851529717, 66752783641769, 824353727713740}, + }, + { + {4121947878564012, 3974762513146561, 4400688676047089, 3750758292493538, 5582121141429898}, + {1987770197713484, 751549594590657, 4130774294058181, 2772087960475462, 2398377455469772}, + {1021194340773145, 2214506742467645, 1946787888944335, 2047968106648641, 1821857137920583}, + }, + { + {4817011285691457, 3821500381976103, 5867746283021767, 5892999478528259, 3614975724251316}, + {520345345283715, 993525428347841, 3082505540027545, 1401316007351695, 2524441889115400}, + {540709883326476, 664748033877723, 77460650157458, 1882229467398241, 1217186023704288}, + }, + { + {3888704843022071, 3022592939512474, 5839771089230787, 4705593175556810, 4617871784452989}, + {1148904473568401, 2292434344833748, 2860017655924869, 896886146116790, 1793557015614071}, + {738867948290551, 1113067062951318, 2239418068162676, 2235388618772922, 321946428440080}, + }, + { + {5186369799189058, 3697173555759488, 4262727107695046, 3185380591286776, 4149807772745719}, + {2507278187062390, 1965300287234722, 1455241861966706, 2358026574953040, 2356583034323921}, + {1141974899967420, 1197500508248512, 1725264994009043, 1639228663875285, 1766256613674282}, + }, + { + {4859130511022316, 3438619274603782, 4274393918753007, 4542539306472407, 5021829178357491}, + {1473307785816396, 2183888493524504, 3592230148429221, 2872086545946123, 718894511556159}, + {200438687964996, 1579389594103736, 1144999901302662, 1292188560016150, 1342060233269448}, + }, + { + {5322785092917218, 3564464821553428, 2465159528975281, 5838118438127962, 4862308511365583}, + {2206232904105334, 2908798660147806, 2169658158959269, 2724132358944628, 392390928972895}, + {883459081700629, 1602090588151437, 768552508263143, 1181944834979084, 1796139787109480}, + }, + { + {5591293901585158, 5161437494483979, 4307878889760969, 4546298250229339, 4189604893397730}, + {2182554744233356, 926666458178889, 2790825304990041, 2529147957716171, 951582391464256}, + {187571578269437, 1207365261045700, 1671287753495621, 128062601272884, 1097620007687094}, + }, + { + {5979255840859055, 5170212343908976, 6251571908864416, 4044340797680332, 5873982661311143}, + {1856097540852989, 989253754708050, 2232404724159712, 538127825012338, 2301974812680125}, + {875553341339604, 2202671771469035, 1916683928798488, 1628926854796717, 2104927509529811}, + }, + { + {4738081053584946, 2875665464097852, 4082354471082712, 3079977082389326, 4643006842643895}, + {4085499965974240, 2403823491084742, 3352533311494316, 2981802103584372, 2409154352569497}, + {822917758900752, 1019777701975664, 1564136027018780, 1218107309963297, 1014127758290355}, + }, + { + {4211670720265322, 5260586114139374, 4117778612287885, 5761523698172883, 4942445429900242}, + {2233928901439648, 3249090656816698, 2685023842449397, 2515328324903077, 2780554742949852}, + {1119507853423473, 902873322434013, 1683813506511239, 99271672214794, 1043609318229518}, + }, + { + {4881172173279202, 3599812968457896, 5389450859587312, 4590538673755018, 5926347639505399}, + {2643454724039014, 1385194776028482, 3573341970152704, 2554149121763820, 2626184303949707}, + {1041863798926969, 1989079677249410, 910600041636905, 172639986070412, 958797345271109}, + }, + { + {4102514793801097, 3799057862785664, 3089506143944932, 2968464716766741, 4933382932746089}, + {2671084000631505, 3069928136724336, 1615118202102194, 2860128525830493, 1072943882334681}, + {2239551548278550, 1569208624262185, 270318489599140, 666224807173956, 272660472277513}, + }, + }, + { + { + {3788400011322929, 5238791757709216, 4201438471307196, 5718998504437804, 4699660978114753}, + {831848399557275, 2203944328508070, 1205773492199750, 2947899883606056, 1258775953756159}, + {801855642469056, 1726062700700587, 1064722548099106, 1128997468587175, 1368420390253860}, + }, + { + {5220756346668707, 4207778951928942, 4451591079714714, 5561602467108901, 3701332347939515}, + {1095027470911861, 1309452919940954, 2417363745862806, 3417231569067727, 1895316643922203}, + {2142749866659158, 1962490102531981, 1691447155265793, 1827079035266074, 3803331638058}, + }, + { + {4981668826515757, 5644770367578110, 5443857182354756, 3149391452129516, 4066238206100559}, + {3356282538281353, 2251921811216688, 2887149285344786, 1384857237573084, 4057072468959031}, + {399619403797256, 1517816986720610, 1503473770785461, 1650204761619743, 2016574488970872}, + }, + { + {4082671840470154, 3874834197714005, 4437883298126266, 4222220664757293, 2316031680718393}, + {1452497321657782, 1539338328736177, 4156757905713634, 1587402592924883, 2189645592400953}, + {481460971838645, 495603062939192, 2081146895236470, 971761350637757, 742727604094484}, + }, + { + {5515673501962670, 4546389793895825, 5000269413610660, 4603828815474748, 3900836987569214}, + {2460924811417180, 3521984551624439, 1511404974611240, 375249799211988, 3782407540620780}, + {2048665788177445, 1408893800498572, 1918636993246022, 317961445367427, 656800592778138}, + }, + { + {2426976075633155, 3651600221015543, 3234264849290625, 2473309309095632, 4407296503206636}, + {2422350949934017, 943103623278343, 1291301021890213, 2346315203451818, 4112725099426082}, + {269878912827170, 1290670313639785, 2170448731381563, 1730590899024060, 665688666929019}, + }, + { + {5000413361992888, 3347912965056552, 5787242209541388, 3819792442922756, 4847625000360540}, + {1580177441875156, 2506058297611016, 2934789696579346, 1061310370544480, 596660656376680}, + {1957905575869340, 963138800079095, 1346185076450932, 33814819376238, 1624717058267694}, + }, + { + {2861980301667765, 3354887551296141, 3948074513800240, 4019265998902801, 4754514631586968}, + {1661216359883315, 1198665005326425, 3475476495296842, 881743418686047, 635325796191538}, + {1196599610725063, 2100294611545468, 412113633351820, 925880965367657, 519930913383517}, + }, + { + {5571468672275863, 5188072583684019, 4251873319339365, 2576514881889354, 4045293404267572}, + {2133507738629437, 1327217318093765, 1889369311142453, 2479101608310052, 4045149986308216}, + {703846410484025, 1348842341032186, 1685275777321460, 1615795108904065, 1475415532006380}, + }, + { + {5398949984609248, 3762655856514160, 2412712349948059, 5169973908847336, 4334869322214508}, + {2999632416625302, 3110726069588902, 2228895586394623, 2800522251491198, 2224895404394358}, + {1399061587160944, 1205421803029276, 519683572464804, 340023786200115, 2172700699519595}, + }, + { + {3574689489677767, 5335925023065998, 5369256661040087, 3129592424352108, 5388737531811449}, + {2700892402458353, 2743476698281872, 1953844576554527, 1836651043988628, 2962536972306493}, + {1357694877428531, 1765161852606993, 1167042823088862, 1400958578522448, 1847208195529391}, + }, + { + {3867728253589687, 3773111053869328, 4368860594965835, 6133882052967679, 2533060702765705}, + {2290736769578191, 3757556884488538, 782075793204873, 1953945334364505, 2306213589322841}, + {1820300206186415, 335405661683482, 1092574996911739, 2062461927997493, 39506950020151}, + }, + { + {5534612992751919, 3746157517504511, 4108089392798474, 5131771932089590, 5617809945843001}, + {1342645331878441, 2000053418116353, 2168383944146424, 681027567941522, 1213562615764099}, + {379321638440622, 996302411355145, 1880571763884906, 1004856333759537, 501836588196832}, + }, + { + {4231662813561705, 4640318983129989, 3064518357303150, 5343343094006261, 6450142130522077}, + {1145892199839501, 1078673486712789, 3022417549910920, 1612895247211701, 2324179764588241}, + {1972676776834949, 44492199500322, 1456097929669866, 211262343295697, 1045510624803264}, + }, + { + {5968931973016112, 6019428128447854, 5757013441564652, 4431402751536781, 3192943415309330}, + {1480229165025206, 2054505377286776, 3099784048655970, 3055900157449953, 1375885673210420}, + {1812738520892942, 2084676765238369, 510773948276259, 934572202757904, 537600238103234}, + }, + }, + { + { + {3613080834135665, 5774088788979550, 4480966629462376, 4981692702949983, 5531898286124606}, + {1941100238292769, 1530763972357988, 2941717574786124, 517834246099701, 3268301290369396}, + {402477551873128, 1206353712079331, 1931900782149571, 353151698548753, 227661813611943}, + }, + { + {5770945118915754, 5544555209532203, 5448202195803091, 2841016429831070, 4428081881985983}, + {3042160696267866, 1193039775906917, 2708874250955853, 1880772252763310, 1647664574467171}, + {1801318854301087, 529217444026518, 41439150499132, 1819497139150034, 1914318279506430}, + }, + { + {4617843866085510, 3963473780045850, 4530695843220841, 5152831422757274, 6255165884461126}, + {3653392334037390, 2119290268348412, 1662789932544495, 3712853444146946, 1761023449047586}, + {1892648843913435, 1079776332626104, 1111039290977790, 1827479485396386, 859677304170245}, + }, + { + {6135115193251795, 4578420287793605, 3485955900327480, 5405600312155654, 4983545824887909}, + {1955745180210457, 1703319703537271, 2019166049085294, 3363246542620192, 3873119138750761}, + {1700391063795585, 361747633083750, 1216968456947850, 1993842710713264, 601267006969711}, + }, + { + {4925286822096059, 5955810075280268, 4224518592023607, 4497079033823924, 4700697585549198}, + {1335348453199749, 2692696552964594, 3243268312448681, 1958567111536422, 1194502970771976}, + {1656217138482787, 491628805607466, 1679451179466805, 970181505842258, 1534105889461948}, + }, + { + {4204969625278834, 2839735694548476, 5311815348914771, 3424730456556302, 5437312551033891}, + {1051919605857270, 2689758516764280, 3195630903391853, 2321619474659180, 1445811115388039}, + {1160289603260459, 1956223108351205, 1733312353955470, 208731931777063, 2163609865075088}, + }, + { + {6171922307530267, 3416689909413961, 4398780048782414, 3348704297294309, 4794281577167533}, + {2605760676899691, 2518935989171471, 1655039766011588, 2352706753121153, 1606429966007503}, + {1142834714776341, 85770505106288, 713866520631433, 440023537352050, 178697006218663}, + }, + { + {5369775152479351, 2976619105904851, 4320166487861154, 4349283416973378, 5052617030572584}, + {1815823837273367, 2562753791013569, 1539789395052836, 3647749880076906, 1631063017998020}, + {534961844628464, 1393583055120721, 1748351260324708, 1375538226727024, 2193309623120304}, + }, + { + {4362511965756519, 3334861441534551, 3560279110881819, 4504033277345817, 3695270180099552}, + {872424258749169, 3269419467389617, 2236476348626173, 2024356220545311, 2898783963621386}, + {1239822839121281, 1734625037061034, 1644113104753887, 838912630061655, 2165081997489666}, + }, + { + {4719668160615989, 4954232553381592, 3407504093515639, 6056696583065019, 4080126483053229}, + {2648578609770085, 3690844259333424, 2082598280716609, 2564691042641275, 1346520144951773}, + {1979149515238517, 717801405945362, 2104011649567412, 1561125545440573, 2157118688047562}, + }, + { + {4177174713439601, 5431484182531219, 4912403072956818, 3423215719262779, 6067629588380508}, + {1808742790957793, 2747803311617739, 3845306078978452, 1924084822718509, 2264852519642740}, + {1767189866398838, 835676264200014, 201596448765126, 1979907908451931, 1442810524651041}, + }, + { + {4409296057792696, 4346067875211154, 3459237364299404, 4853798679576266, 4468808308660588}, + {128841748532646, 4150186054273698, 3256924437045680, 4019614742906956, 337338633748078}, + {1077226425497346, 607378044682866, 1485491791574172, 1074180848747199, 1023053128705595}, + }, + { + {5804603278915694, 2796027819585631, 5011026665884139, 5833743165576011, 5103566912764066}, + {2493359374165148, 2464080592904187, 1933101226851633, 1880342534882667, 2417917477223840}, + {1284426144747169, 2005093245564178, 229493920382094, 1642769566056222, 1596652614163344}, + }, + { + {4478501502615841, 5105996638711000, 4307245809257853, 2912192821294412, 4442483575340114}, + {3490678780709549, 2722972627744756, 4141726367382933, 2626667232874306, 3706338015195278}, + {978951056774557, 1610590016630807, 2160020521521822, 2222969528403014, 1290838415735858}, + }, + { + {4233395101645091, 4760048839668621, 3419853204404814, 3555462417010423, 4295491197124032}, + {3136023326660957, 3195581484142287, 2364500047372050, 978391045278571, 2088093684065312}, + {319754006496675, 2078141843592369, 1381704035073408, 2135424637477137, 1217419566529670}, + }, + }, + { + { + {5290773769928918, 4793813444262905, 4720763845546248, 4081316225438835, 4093406366409350}, + {2219813055094868, 3751054103166673, 764148091645988, 3042364539660805, 2174498914560536}, + {1346839273131020, 1947175237418499, 2130499171815608, 841760904333801, 793011313347544}, + }, + { + {3890099439122631, 5436725454634839, 3526358179473960, 4130205528836253, 4143183670329231}, + {2705685430041151, 1931337763813343, 1867986078235466, 963301853857219, 3203544659615889}, + {548016394257586, 1770170736821935, 883041007523403, 1244492123782548, 1874837894534970}, + }, + { + {6107029440448048, 3899130796270571, 5350832732145407, 5288086135111572, 5016688224136320}, + {2322745137203416, 3712079434453421, 1656136902347805, 1063047643279494, 2347290530652372}, + {1585044732618145, 79674660750176, 2047172033863331, 558016866726219, 1811700039750197}, + }, + { + {2903508896190354, 3572836747669154, 5671992452104047, 3145254132994495, 4870698970274559}, + {1980868732324310, 2459850087283418, 1500353534094477, 1977074025846907, 686785408890947}, + {1977199595236300, 927859862391871, 2045825765550850, 1189431662969386, 451125616133550}, + }, + { + {4264958907260919, 4637613300323186, 4723189721727247, 6439587034668993, 4270210266819895}, + {1981177153373343, 1776706813610008, 2956634306768875, 2113399644330229, 364175990188877}, + {1473984112024647, 2212143402178000, 1913009700964560, 489799262080055, 1390546130501803}, + }, + { + {4617432771154388, 2768922884406316, 3194759053322417, 3846588214005790, 4684848439540931}, + {3696338004009516, 2296500736839486, 1483385825107721, 732704435299560, 4093200809844903}, + {781495195344331, 819872919567170, 2058369589741763, 131552040816437, 1143952030551876}, + }, + { + {6045398880892501, 3274164683120730, 3537206235588588, 4953070760072151, 4494335279262109}, + {1632591054957791, 1584029964350608, 1679919371947982, 3412378076716233, 2572356071530817}, + {118276417181988, 2048136038162801, 1736078553924029, 677257986431580, 711847529279284}, + }, + { + {3634115225339518, 3407128374975375, 2997970212274081, 3493862836273928, 3535607408159120}, + {3574732327388664, 2600283522407089, 2877235052318169, 1647316986471086, 1495874784707614}, + {889518489432828, 1216748566987677, 2027061052060458, 268044074097160, 1539610510772867}, + }, + { + {4611501240201625, 4770963666624495, 4338415201879424, 4860883825935208, 4028006785359735}, + {259543849715615, 3116307281996357, 1555340861337048, 2140193697629416, 1035789313751911}, + {1026218773492650, 930245039288082, 1822875264087643, 479782375672284, 1931812455503119}, + }, + { + {4148807861057856, 5812728864755237, 4601316267327746, 6043565150382029, 4199151665681887}, + {3394871127325058, 3191785534223821, 2085795470524552, 2385926585602461, 399655200529949}, + {1057229833653287, 1828041669558530, 1006577782987596, 2162474092618005, 1568476132284973}, + }, + { + {5547684346917888, 4989218016843942, 4586613652979209, 4863124308009928, 6207570019680129}, + {2566237642336854, 3970491812994094, 2598212316441047, 2240782240471054, 2552742376593093}, + {716486226259134, 773421749453144, 1784612269854183, 1741938572500414, 1834164482186148}, + }, + { + {3117421109623856, 3461685839753353, 4955306417606165, 4558294861196235, 5602064404959934}, + {2273224772261066, 1223111129900149, 1584682650834635, 2022200125401455, 1373728084078920}, + {913182622593832, 2001872744868184, 882970207556847, 299806317329996, 1726046908726060}, + }, + { + {6249588231739606, 3368998262120903, 5239047789721372, 3406210943086424, 4754518606052966}, + {2248618336554706, 1339184282498129, 769038678141320, 3217160515726744, 1715873134108166}, + {1976228100247818, 1272400462149307, 1572190226615598, 852044049472028, 1055275428347366}, + }, + { + {5284373775928701, 3618431820022764, 4020557586503952, 4433032839002146, 4171326821228907}, + {2417108732168755, 2170003784635000, 3518440054867754, 3152772966589030, 704341378948759}, + {1290493724571150, 2122276831263561, 1747969631590180, 1399718798480988, 139803941068636}, + }, + { + {4427994415528072, 5149611644022833, 5193849655888518, 3398788549762908, 6113634201730634}, + {216319500947386, 1455486684654953, 828483179169328, 2183296040357724, 2625210482982860}, + {478303205586551, 304131100485205, 248369703081454, 371320991720787, 1635813582756365}, + }, + }, + { + { + {5252346966668309, 5639208782676701, 4075417215389880, 4364690112290244, 3384680235809138}, + {2429491642409009, 1283094434250487, 3316839113847160, 4229629869361324, 2675780619596520}, + {2176454779743876, 931093459142961, 2244697379845986, 723779257225747, 962795008037376}, + }, + { + {4164637625281563, 5566305816206016, 4655415916130208, 4180775155367792, 5707768410211632}, + {1861517597691605, 1772481620932890, 2629476438960640, 2705827759458320, 2107910124630170}, + {683279446283480, 2167544438614321, 1975855992985379, 780955320484514, 780910621778643}, + }, + { + {3955544259328322, 4458238333874171, 5864190420414532, 4345033257929994, 2857162289792042}, + {2686358254975148, 4179751356732233, 2499687248272490, 1241163995738960, 2778131269016956}, + {1074884828909420, 432905047961772, 1185537826254838, 52144045776742, 1826277929133963}, + }, + { + {5684453359674447, 4877177488298427, 2422407833284604, 4605478777171110, 4729984701613103}, + {2156715047802967, 1276772803921323, 2380233522537438, 1960794365816568, 2680384519257273}, + {1862177374063425, 1873700738552432, 308885709393483, 2100622082080360, 1104535253282502}, + }, + { + {3931149063775879, 4254429699498962, 6662929352488607, 4079587572542558, 4855364761755442}, + {3711640686247983, 421582154826228, 2220646689506683, 1208894292386914, 2152820272048462}, + {1565335522994081, 54406341126738, 599331788389250, 1486039135212823, 940991227185565}, + }, + { + {4398457498029638, 4929754658751446, 3952574300737926, 4493043596943885, 5305461811863411}, + {3849064215739384, 4001520908708098, 3463231867051918, 3642198741522237, 1030072339730421}, + {225800753248600, 1001289196776939, 1570695157447337, 474142387326152, 1860241406570283}, + }, + { + {4817367953033495, 5599987240264127, 4736311445242884, 5430531336232182, 4460173530026570}, + {1052973111938531, 2823516883980375, 662638871434014, 2738994056625648, 563864123356550}, + {823857549390635, 2207592640971793, 1855512257490888, 1911413747439725, 1853809846918105}, + }, + { + {6194718989753531, 3626032976625365, 3751630707315810, 4477700840286220, 5452904257109698}, + {2036109024667887, 3040585821349743, 2780985384011476, 1970818175728284, 2968438634461420}, + {695616701038646, 20368455765111, 619664083096696, 723635083382804, 1023760209767255}, + }, + { + {5008707213573776, 2859949901187285, 4290065003741713, 5151870738966180, 3127611889915462}, + {574462324973718, 2125329428751385, 570545018291281, 1476031513731508, 2680835412613570}, + {1517596182333361, 1429983941782802, 1900615890395770, 1911469027059364, 1851356681596334}, + }, + { + {4891662727757105, 6078189791872620, 4341252688115798, 4009612276132060, 4158882628774497}, + {2178830616846417, 2794898270987790, 2339865206643716, 2923242275980220, 1745466521002355}, + {841969861771844, 1234567333486718, 2104638753106763, 1445233761721300, 2209267998342752}, + }, + { + {6440345201923204, 5723637287574387, 5903930483115066, 5778502423080164, 5079904071191760}, + {2035275243828198, 2745418930619871, 2632830605513978, 2519743098631716, 707209224772602}, + {2049800384050253, 382336843047910, 1465264697408643, 242728978654073, 1821420259893325}, + }, + { + {3385848358825911, 2850931104925851, 3458310588278305, 4579597908985563, 4607881337942919}, + {1816700573507985, 2213627388818419, 2637198541463171, 3087473887817081, 2837589033715179}, + {1073720617318924, 1636814037227948, 1227321319951543, 598345156599653, 544027576937438}, + }, + { + {3741365114761762, 3465142572701024, 4346453033629668, 3800732328304411, 5207004929940855}, + {3530134215235346, 1497788707695478, 3538247705814828, 1425334926184197, 3292646832985731}, + {368165631658486, 1427424960871770, 667823977725231, 123986789130850, 789476314816796}, + }, + { + {5183377371949700, 4172584964939172, 4687335701106073, 2534986101578472, 4297053492878574}, + {2375597255557748, 846038920993436, 1398943082722053, 2179038637021886, 325133433602556}, + {1814357252172511, 1812991482130874, 1545461112716185, 2228739665628687, 1030416912136148}, + }, + { + {4102150726478441, 5089888860858732, 3167069131929673, 3336166645247640, 4708635432875520}, + {1325239906989203, 2989936170895398, 2414201768248283, 1851733918704382, 3428546124237928}, + {296568059020374, 1937661788490502, 1994712548479216, 1341415580517821, 919259617560208}, + }, + }, + { + { + {6274182990169406, 4386048988056353, 4097025350643424, 5127499815238002, 5572164902186574}, + {1895408474337392, 1335954976788533, 3236941534902540, 2378721630147940, 1461766309882914}, + {1291953286798969, 2102679466898679, 1596002078575263, 1387588817990761, 2143444637427225}, + }, + { + {5996694561997207, 5683227612437284, 4899213524992592, 4856689735436656, 6404791836913969}, + {2772496102790967, 2917238652453944, 1731727230740742, 2247887220248582, 2143609474706149}, + {923819152192005, 1415712944791087, 1125410698033067, 788009900900011, 869993295869018}, + }, + { + {4786795669239288, 3398808358640920, 4513626939909643, 5985598090247291, 2945790096837940}, + {2456756643078196, 3060894189290238, 3759434421535873, 2442805763764489, 2819028797217160}, + {1757819380032415, 1458259160758992, 404747119062789, 1242483165113555, 1521264843142355}, + }, + { + {4457446227801342, 6427880138295914, 6656730008666805, 3937171933580687, 5754864538579708}, + {1177246463904108, 2488433613267172, 2328478208484747, 3802230570654315, 2344609059443716}, + {1519155588261854, 483899768651806, 1235345257217886, 467640517750393, 1224438957323827}, + }, + { + {5102603430061893, 3128470923287158, 5801341356388264, 4525678559978591, 4718363529583899}, + {1246208485680505, 2848653521425806, 2416405253631000, 3077610602170527, 831805919056409}, + {2045656886162419, 2245569838876242, 1361334406977685, 1370170063372453, 1784586163491838}, + }, + { + {4556063502635342, 5531207665521536, 4057497943029825, 4507014901377590, 3148382369498868}, + {737891874041388, 2451689755512888, 2972729929575783, 1153163677723624, 2631153364835664}, + {1021578499394252, 2003506226907156, 1906928204664703, 617432881327189, 487770381544088}, + }, + { + {2772215428108171, 4464024296635705, 4854458470465137, 4051326172605262, 4041843916653002}, + {1808240492311657, 683215352347115, 2786075502512133, 2784661866757750, 3917451132840122}, + {956648481954026, 2096247164218896, 1027480742584033, 928233599700570, 2122240338574709}, + }, + { + {4629946233006760, 5291553581528148, 3270843847622640, 6572477208034336, 6154625523788459}, + {629205712253428, 2948018954745502, 2240941577462354, 2419373201820060, 2682153541398885}, + {948811544154236, 95827271348811, 971972540788513, 1752656910961976, 1577613288465037}, + }, + { + {5687495579915904, 5920739705585144, 3623686905482864, 4279799360588693, 4937051703985742}, + {2733819029729102, 2941383700719094, 2344126789319304, 272099344396033, 3469931440006564}, + {1155109808876838, 498663775049656, 2009409241380161, 1654861553852237, 2195711930770443}, + }, + { + {4562514450276878, 3610360397280214, 3754786033717112, 6274151337271952, 4102082344471456}, + {3779237395015718, 2531855739502292, 1076300728317328, 2341702386635930, 2037036009072308}, + {357187236460800, 1343207422743391, 1557831743447331, 138875622916216, 2073308474766668}, + }, + { + {4318248447888802, 5457191060945059, 3575720381879889, 5537122891348075, 4658291618481620}, + {1058927027601226, 2097000197595935, 3018484019405255, 1294660112618737, 2932877913314978}, + {216145844764492, 1876995804123388, 1188737931982599, 1588244200049402, 1850009625550870}, + }, + { + {3352537291082093, 5839102984451201, 2319458858510810, 5312519694669356, 2539572161961088}, + {1971880260906249, 2590822963635857, 2283171542295386, 888730652847270, 2069077006720618}, + {986114249350619, 899447833294837, 753796294360457, 1686315816498457, 1484432111173806}, + }, + { + {5781412563046772, 2829048727661187, 4098529237644982, 5146692071916491, 4319033371720950}, + {2231959129524362, 2353147866489543, 1361542642038984, 3436571318049649, 613122764422636}, + {1553151906564201, 42706246613546, 1656634422023210, 337580524133816, 1382068281260380}, + }, + { + {4318188098974879, 4190975253205867, 5053353859489555, 3624409471895100, 5734877817656224}, + {339244995001665, 1760160432424305, 2510143032086917, 900873257630652, 1381243383153778}, + {1027887039599863, 645983151773049, 940633405940384, 791297293294468, 113951612418342}, + }, + { + {4421127861301280, 3227473132618256, 3897823766346675, 4531675054348192, 2597262173415879}, + {497984229256388, 1528193624284798, 3083402776323261, 2834076054300848, 2004534517066737}, + {707308783184531, 1723910086807466, 791458836921758, 441590831592448, 1945299136569002}, + }, + }, + { + { + {5139590791061503, 5074296034161507, 3861111523264964, 4286794753368429, 4613589462411916}, + {1370912655100557, 2279879075953359, 1535348789227130, 2242808749632369, 3061442465980918}, + {2128769772677977, 2142654242576520, 2016094652496998, 2132031230853467, 725434888027655}, + }, + { + {4677803618766960, 5273930469290190, 4617970826042730, 4133081282480847, 4583310983505940}, + {2135073895739904, 3472442449797848, 1493509767807810, 3843639135014989, 1420071562059334}, + {1420603492551010, 679640550295814, 1617533903828801, 780154362635607, 1319780020899258}, + }, + { + {3937068127551315, 5594824685351819, 4538337787238312, 3523378410763828, 5437114214061846}, + {3695575212053185, 2594449599707103, 2742930959436192, 1161286236132678, 2345020968733648}, + {194815921686333, 1256736762545940, 1408742447743650, 304562218341097, 2021464306176092}, + }, + { + {3212222966285493, 3266851872779616, 4336733687401440, 4794872810759007, 4424169619295461}, + {2759763070229743, 2724175318859802, 3031057691838938, 3431189823632909, 2961517144339711}, + {440075250919582, 694825884103652, 2159700403414911, 116894270435230, 1425927073727904}, + }, + { + {4841955313295828, 3461757100553382, 4305435906781420, 3691116875116057, 5298851817605162}, + {1064910415642974, 3095607189587094, 3908971853500052, 2189460887246833, 1354043476687700}, + {1262675707031055, 1219816744922490, 519257628155087, 1497570437960201, 1372594887264798}, + }, + { + {5466094472208141, 5012579346250577, 4661027376097750, 4434802656317810, 3968075278352583}, + {3315525263287981, 943900907578117, 1225723797770692, 4182671057889152, 2697481958411475}, + {1933555860608921, 1275569655188916, 234812135397482, 96042287368239, 386392083574324}, + }, + { + {3319477981428303, 4681888525996228, 6591617607940267, 2604452186053658, 2972488992219816}, + {2831773176554005, 3864996001314642, 2395563170308483, 2090271503443448, 1893990359510416}, + {1681588555670186, 980191207008201, 2154581399538671, 540872424183046, 1943954489289499}, + }, + { + {5977124761029192, 4538331973533215, 5533519881915667, 3479901172100047, 4656405250637608}, + {2363082790805374, 4242757803000485, 2669759818118169, 3333816374844969, 1325118659202748}, + {183359648873960, 382111728086623, 1969766109298473, 2071169946252387, 242935538497060}, + }, + { + {5188738692165469, 2664732629276594, 4968279324223179, 4960443399326301, 4436427572176893}, + {3490990196257229, 2560345203268680, 794851537166791, 1532423795715657, 621302931359813}, + {440189527159075, 2095498912423497, 1575373142262611, 744594360742511, 1157079567398109}, + }, + { + {4869958177792820, 3889970905101269, 4570550615789326, 4496205440964732, 3848931098885666}, + {3870071548603662, 3041096274835181, 2350925463456272, 1091637746528482, 1355815234248438}, + {927792763323382, 1304575354366273, 612939300770904, 1630367810979451, 174107168815644}, + }, + { + {6136927367908702, 5203222247970547, 4888252310796559, 4897189790028520, 4586519387439588}, + {2831448685067634, 1668205588574421, 3161976938852725, 1027424964992432, 2026369259616642}, + {1735694076750726, 1266349638286480, 1493849675863588, 296961022463490, 1483126610434799}, + }, + { + {4654087895073878, 3931119431920957, 3810992402627745, 4571904269427127, 4481981159091504}, + {2466558329032204, 2314404658847041, 2524639581935109, 805442192808499, 1270294344302086}, + {750996510156456, 401855193068398, 58073276915611, 87767580153872, 241880537805683}, + }, + { + {6336062814229381, 5495468976405173, 3085611334327622, 3929566749867368, 4056705138744772}, + {2170745323194467, 1059898966987983, 1821678094574528, 3224522071822304, 3177794562815748}, + {697769608468752, 1369430004061620, 1388586673198089, 909114275708814, 1146450457999407}, + }, + { + {4238043779316857, 3868604149115822, 3602737573195351, 4491948926777684, 2593111277688382}, + {1942420724187743, 1230266918978492, 2950156777850293, 1491177343837674, 2151732388834046}, + {1552628609460396, 385059438618066, 1935679554618991, 1586643703562239, 274738755241324}, + }, + { + {3708634080771636, 3376471647619972, 4144079859874091, 5260099970974267, 5044960426451952}, + {1260464362728368, 2320200151112594, 3280988120127265, 1454370155862373, 3222503455600234}, + {1286187906300863, 286639393218233, 960541512944676, 756511343610150, 732619979206969}, + }, + }, + { + { + {5720776037989329, 3408557855252881, 2836745411300455, 4905300285896935, 2440518813003965}, + {2216608521812979, 1133671267609171, 1886801270451833, 693723450681229, 2177664326279079}, + {2233307833752057, 720411965215730, 1519169695491573, 1249545629073374, 42274079495163}, + }, + { + {5289248568149457, 3817875509053716, 4457685664702894, 4876101051290378, 4294494794724040}, + {3280020244834293, 1318628129209810, 3119398368735896, 391516159010622, 618793687544686}, + {354305362086679, 1512134460741612, 359672307646707, 182487842123724, 70434142068276}, + }, + { + {3945557653570869, 3088092003227000, 5454351386185562, 3234451172420338, 4724702104276340}, + {3276624651778803, 2433844765263326, 2790865929084436, 1963658167580138, 3140414260467690}, + {46706548238824, 1986500518838735, 2027136585204085, 1143580830274421, 237034819567290}, + }, + { + {3929429576586958, 2793383744028645, 5887317021163886, 3203394573309402, 4670385004087593}, + {3462257554153900, 2215903401275259, 1545855048122212, 1560256833448838, 235678314205821}, + {1032532177573683, 1507169914894481, 893954872249259, 1464210961075811, 2248024514969267}, + }, + { + {2517873563818259, 5567259846017152, 4253295986752699, 5558170137710973, 4039120007239859}, + {2215196432839229, 1453988298479780, 3162959582154309, 1417180860727485, 1916001465630095}, + {1593076635649167, 613414152324278, 1398118686752976, 1550186634066418, 2024312475795755}, + }, + { + {4524027900175525, 4847878416694692, 3091409665235077, 4862578993236379, 5350599804185218}, + {1611115816843085, 1564686497935112, 2631443498765253, 2543391790063645, 1070282314438176}, + {1370619542022553, 13593976629245, 670888839522668, 29909561835083, 1113994299778657}, + }, + { + {2995680265327027, 5241715165954044, 3953258701883675, 3989602332635833, 3953848187775337}, + {2462467670415027, 3084380814586442, 979195344857407, 761623507948939, 2354116769190033}, + {1653806661942935, 798938977173667, 1204504651898865, 2012775328403335, 959133953735021}, + }, + { + {4988340255562522, 6250762111649497, 4210027774413747, 4281026073914171, 4124289570254779}, + {3308091097868222, 2438171792492677, 666572176305849, 2221533064225315, 1302577527793701}, + {2246982488380161, 704048527252770, 449031029656446, 2000971659049725, 1830758195793359}, + }, + { + {3190675561821798, 6722820056714491, 5018399111078811, 5991624407670525, 4249280343842061}, + {3052270247598664, 2252472217742059, 2434081171992329, 2672797197928279, 2602890651310523}, + {2144671346446832, 542864631780587, 1155108742000404, 1404732713614448, 240293866423412}, + }, + { + {5121381423145567, 4833873167604293, 4028173334112257, 5524034306881884, 6230562353876706}, + {1307308592059221, 784383479594685, 1720750519626457, 1912081034355222, 2024784929774716}, + {22174994285057, 375276401373336, 1210941030392323, 1903374444438123, 1011323371888298}, + }, + { + {4798470629258750, 3939993567755513, 3967862752630070, 3290332526819821, 3061464921693387}, + {2998794565294986, 2057935584763381, 2899577223808862, 1519188817940759, 1842063844888831}, + {892208073348264, 1880270486117637, 1866139692669281, 577642276098528, 159304923876906}, + }, + { + {4601033632870689, 5799253896657058, 5779104046600604, 4218473381777077, 5066296163965867}, + {3118817410699903, 1416293682313136, 1358642285736990, 4016697695252823, 3785048363131621}, + {841452637470330, 509851329084465, 315943768852800, 745051417948746, 1317978823624451}, + }, + { + {2960724265045759, 3581409910547792, 4757575913235420, 6009932939538924, 4725476498610383}, + {2216474880678649, 1883045416719140, 3557095587267860, 2414252121862082, 3019618269128831}, + {1790146986408439, 1266311794146205, 923857310756466, 2043374401317120, 726369229085659}, + }, + { + {4878312571596775, 4222794967531206, 3321677379160160, 3406594510676891, 4743132105473153}, + {1047639500605479, 3268483579465284, 2206428670313250, 1688287562131353, 1668007864663417}, + {1777656298881359, 367886496899263, 1134571758927624, 161297709883194, 864111924164392}, + }, + { + {4770637647109604, 5356580318440110, 6456410085143486, 5251963198009528, 4612863117603799}, + {3459496839496426, 1172866796116672, 2087657719164010, 3611579473502448, 2226199443508323}, + {179962092093812, 1434865358203901, 1509301171184812, 465007053005824, 1606826267425619}, + }, + }, + { + { + {4321570421086801, 5728967329483361, 3790752945733902, 4440201295898093, 4632192800649486}, + {477207916553285, 1488064260202941, 1661453866463954, 1141228074051855, 672072650786576}, + {916404312971536, 1000014350915647, 1498754584389763, 67530592482209, 1667646385756724}, + }, + { + {3838511633005352, 3067059108181153, 5859654687359949, 4517853996250692, 5491933645129578}, + {810369747020164, 2237618141036509, 2282241440976077, 396142955464532, 2314156456627292}, + {498205650210982, 2029447832739442, 1287708517665602, 2063154761502015, 592549403529808}, + }, + { + {4850172605519114, 4864656344540316, 4532814144934823, 3437824613452670, 4812474608554159}, + {1466752538541840, 2035538193320560, 138132610685025, 1256421706559322, 2431850955679681}, + {1297525937307453, 1360474818962172, 1057976529132470, 481516036122456, 1284896343639676}, + }, + { + {5776741280656995, 5103737594811281, 3360081478971068, 6111393754727746, 4779680024426854}, + {2645933668955707, 3274005597891379, 2656619141981518, 1746214054851430, 3053032647501696}, + {1625278703177771, 652272403287866, 1130860155562117, 1467718191751280, 170296377586353}, + }, + { + {5094219073783849, 5735075135248235, 5606322495206271, 3754059419692243, 4180105537366398}, + {1002349488419261, 3232903243006485, 1398184721429427, 3601262477434907, 4062926820203090}, + {1577778325058339, 2215369962281551, 1331723269758849, 1939632256423674, 52886968354553}, + }, + { + {4933187999581607, 5092493367263378, 3356435735616918, 5217407324510779, 5497406740649621}, + {2729077630033003, 1888615867921888, 2296393402013134, 839924021249031, 1005736290727363}, + {1035587952296453, 772571610990610, 1703146381743864, 447715678256778, 1714287687955168}, + }, + { + {3002761637349276, 4331640081948673, 3834120280377754, 5089609293083651, 3261373019366335}, + {2386307482062396, 240967146617557, 971317535064000, 2019271157069067, 1502539203059821}, + {1328811798417377, 1232170334974369, 1723370191641238, 2166559558468187, 1898556240276951}, + }, + { + {3941047590826269, 4239692035015583, 4490403838767533, 6564872456977192, 4670461766802655}, + {1386180360119611, 3273074614881159, 1729880193705623, 2228606406348098, 1592392117444361}, + {419731549689034, 1989626747750813, 1591278351630992, 1092786235861584, 177178675215960}, + }, + { + {3436683241673758, 3662206674778039, 4373967447323555, 4097363846812803, 4031597646782708}, + {2639672814451512, 3326947991249179, 1680625793199947, 2034248047548953, 721741001003862}, + {1591050698007192, 1091674239474205, 394086386458446, 652864259466208, 252826649880832}, + }, + { + {6202959881484310, 3301137131128391, 3338332791366416, 4386834101046813, 4586134902683138}, + {1761951583445986, 1682354370625515, 1311814077921538, 2232552485157187, 352715570060390}, + {1983847550347734, 1877133028995354, 991701922936357, 942306684083689, 199141297262892}, + }, + { + {4356558984118475, 5693420396107718, 2518386381195401, 4410955637518553, 6067546162903212}, + {748677842691767, 2802469894128656, 2167458034960803, 3580904381157207, 1663021749531972}, + {672345752527423, 987721649439917, 75559353638139, 1202381658061142, 2218885179346238}, + }, + { + {4510531718276206, 5025970311617705, 4298550255570023, 4702464919238073, 3154067300975759}, + {874026063340854, 581394977884979, 2805876061084699, 3945101577343195, 1873084195329207}, + {262642087469467, 394043452244726, 1877384193205089, 135064540003798, 932774458922892}, + }, + { + {3677176615657209, 5004677940509387, 5802006239792640, 4988806137854665, 3142553109499622}, + {2906530412387425, 538942497799423, 3006485045211118, 2701192894331127, 1774793046411044}, + {2163097510860120, 1657639324428092, 324536800194710, 2127826550215010, 1492179302504548}, + }, + { + {4271383757866077, 5161359851331481, 4409665194889791, 3535427764785290, 4743868535366280}, + {2870306695118697, 854883599481521, 1175220622088095, 2190379234235038, 2693308800279672}, + {1469265779048270, 1543845332050728, 2202017995300452, 1928013995331013, 1762032763505452}, + }, + { + {4636656908840010, 5500309513430418, 4897834655713547, 3941193903783821, 4553608952670061}, + {4333916659134460, 1850388591545996, 3627944035206357, 918659547384777, 3374247281351833}, + {2000039510485295, 1183834045401091, 1338556774925931, 1549179790309018, 394428288927656}, + }, + }, + { + { + {3733446780128548, 4970314905751830, 6278139198254466, 4792154002496454, 5723581693713173}, + {1185838263017942, 1658025814770644, 2664414501602854, 2015508295646822, 2967017530049915}, + {1569664128884381, 407663338845983, 2002256010544711, 671085899312035, 984282527793076}, + }, + { + {6341328981945826, 6310526850187699, 3023871274454732, 5578860681574207, 4775900505114104}, + {2574316560560394, 2331223963461233, 2542672004494602, 3174853647927431, 3104624426621216}, + {946711433665760, 2239987349934557, 803861660898522, 2156551410386926, 1502787654920122}, + }, + { + {5437578969471140, 5951179206758851, 5248530961634439, 6426502251854756, 4209704034918088}, + {1002763931894790, 2216555692070697, 3344391891538061, 2095372815347836, 831620519830306}, + {2050669866355306, 2190774465449013, 2058969733807763, 270320273862327, 1870514939355617}, + }, + { + {5155857617776227, 4397988213497465, 3243709928117524, 5944645730694783, 4773063750957235}, + {1975814150439887, 3149875793027583, 1261444197722906, 2760429640974761, 1552966352555279}, + {1633514016507671, 758793436105214, 1666766843388618, 1223902548045585, 233185566290059}, + }, + { + {6335824036525539, 5936753389140468, 4473577463180534, 4906816011267918, 4087654058111774}, + {2368975804221909, 2457041955704880, 3876216785098924, 563819279426048, 3675362390258876}, + {2039348563488973, 248927546652694, 729506739622176, 397171022735714, 1644628056647629}, + }, + { + {5425812761915260, 3810529789490661, 5049333453822998, 4123755530302819, 5615639585264776}, + {2534643198043490, 3071062759450233, 3687767943508924, 594097030236781, 2123224284522922}, + {1869384197190792, 1569592234203114, 2196362163965849, 1717386471659459, 39685498183014}, + }, + { + {4635535175474129, 4605530976221652, 3458801108619450, 4871255059096226, 3508659268324931}, + {1421109370612225, 2276342051030278, 1620731107586926, 2516053916114754, 1357365806509465}, + {985026127753438, 120648499984234, 3776067837201, 1121956503069595, 1317952564469757}, + }, + { + {4522971017836409, 4687828520937668, 5703673191623277, 2940799383081666, 2787006346014769}, + {339460334667999, 3256039500082500, 1203428024902643, 1634973881827916, 2329743371713673}, + {1781496335107774, 734939096367772, 1979958937781877, 860043149833798, 2198713547814584}, + }, + { + {4721820132212972, 5501981664895244, 5264058468541187, 3740873078980979, 5716647821232484}, + {4072332661836284, 1169250173411574, 2007338871529421, 2541018716077961, 3008200101154560}, + {1725071616252177, 449990873352396, 128827658985361, 673241280853224, 751856515144447}, + }, + { + {3453037913720095, 3978754968490530, 3848210473954340, 4246376002566406, 5322220851863886}, + {2584349971388389, 535927716206948, 1961578137923504, 2896060138321356, 2010651373680674}, + {1156080784099315, 481555143811545, 967562545637573, 1677675896966263, 907265960192535}, + }, + { + {4332897500521172, 5216833051048471, 3346087018588415, 4384949392542339, 3375716091409272}, + {3883496497463828, 2136509343818925, 2434189290622529, 429179343434029, 2077816145810058}, + {1658461349569569, 1605536581882396, 1366404149694713, 1196969327840593, 1143971682907018}, + }, + { + {5400721311066691, 4902133966014442, 5147618958116264, 4262202967114947, 5920636443351740}, + {3544460334984043, 1818177095892812, 1745908205006280, 4216608321683323, 1892854460405668}, + {665225119661694, 619309150141627, 1122802004923883, 2010090924812740, 381608939276442}, + }, + { + {3196661699712892, 3684791960878407, 5290400087132528, 4583612441617304, 4269495094598113}, + {1614570977912342, 1623735166790269, 2524803999133080, 2496475358487958, 1935280705616725}, + {1092465046248360, 2063398303783148, 1002343547076250, 391684155494682, 1710560533943348}, + }, + { + {4070608883224340, 3070202986942604, 4904606928783937, 3666937738681094, 5479190180948687}, + {535566969681230, 1737993760203276, 701172348317595, 1733855888978568, 2134615712849277}, + {606893040022944, 2129386574985473, 1699765919891957, 528478848080626, 79217852843510}, + }, + { + {2896556608610982, 6055695907875122, 3732440132349395, 5309166170174244, 2721831575240156}, + {2885737548308128, 2508747900193688, 3606366888469287, 2465312058009042, 1828731582217566}, + {1349811289350391, 1890659682051631, 851360755267261, 2227128394068535, 1024384097528052}, + }, + }, + { + { + {4787547620178774, 3158654330243465, 4256768153665325, 5186246574371168, 4755687815664005}, + {997854281022512, 2623211910140591, 385221936050651, 1659016544729114, 609442868038809}, + {1619428378651736, 1579845830028655, 3625310117685, 170605089295866, 1149673757755609}, + }, + { + {3771360214195724, 3008816652878868, 5465610693671022, 3583291267492728, 4869891036079898}, + {1431189333362726, 2522236815322768, 1841157954619916, 2384464325206820, 2357706544622962}, + {437646608465794, 2094793895484999, 1468162389698058, 248477625893392, 1999708435919408}, + }, + { + {3334695520371433, 3812203917821368, 4517495595943886, 3819008971940261, 3192333158392848}, + {2403562525071701, 3731091650393632, 28706304084430, 2945476990326655, 1695373042660190}, + {11430723322929, 1391830113841252, 1337273140327877, 418617211527096, 2156223821909844}, + }, + { + {3474862062180912, 3882457043015231, 4997421855422554, 3623087331366693, 3980925476191710}, + {2057796043232644, 2263408613360807, 3848582899143280, 1729533403820747, 3162991736601526}, + {43999776827657, 989331901442862, 147120313740048, 495021300047603, 2007031690017476}, + }, + { + {4569310600539567, 3932567990833912, 3385323568255113, 4454797311017655, 5850805500278008}, + {166834800897807, 3648978260893606, 1512008134852981, 3519745367019255, 2891621521405984}, + {1308871835809784, 2116706717414875, 56029465436904, 467188187972025, 1826981082270550}, + }, + { + {4470097619807732, 4636615835029003, 5384758368025606, 3313145881106330, 4330528852662105}, + {1956939819397260, 3815569263781231, 1153022458216286, 2428547349977954, 223633771534995}, + {277297371046776, 1016671322777094, 1912173712739697, 1941234701885292, 1286651577841525}, + }, + { + {5516226444917799, 3864412772019280, 3317545876897683, 3844965839466476, 3985391436490214}, + {2680601238774939, 761018381922150, 3233893633186507, 710728397015564, 1856525231801054}, + {634704084825404, 2129536576841980, 1242863233687290, 1573321106629022, 128474589505663}, + }, + { + {4461600283819019, 5688762331492453, 3571771069068464, 3623234953171514, 5735065250408243}, + {129496500081781, 1790297098324227, 1302842166366374, 1122296729486616, 3168849968185895}, + {627678063257079, 716314893721428, 1223825394014331, 504272345435927, 1599415310067837}, + }, + { + {4497146074973338, 4258524581640411, 3327175345569250, 2988994176227077, 5267912111147682}, + {1802641032705090, 1392499306540523, 1496089620367494, 2312128812044035, 3539470476015736}, + {1352081061607517, 1142882484908029, 664622054563474, 278618602320570, 1557574337895879}, + }, + { + {6186532378029907, 2657902210141327, 3418543318248038, 4786173749208350, 3954647920849896}, + {2160964425547565, 2522131549551103, 2469825005211132, 304256310615628, 1406273379451890}, + {66232156124863, 1741674194899368, 1229742843930407, 260078220485178, 2065725536502563}, + }, + { + {4851046938453980, 3469458552849808, 4088972952218884, 2434262635154865, 5173422452060032}, + {2864583883600790, 1179256560411448, 605392730024768, 2131319985409857, 1797303368136290}, + {1658701641668087, 42705500105455, 1620862321227524, 1064411845535234, 1929505696020986}, + }, + { + {4163795150867629, 5312083389544253, 5442631052553893, 4817195733891862, 3463190319377281}, + {1759675286353623, 1663207329829539, 2312695704742071, 376287419379108, 3196993252356633}, + {1986557906737275, 810826505070108, 96017120328357, 1696299441261906, 1606104856145766}, + }, + { + {3549586047215341, 4636877962062236, 3055155796794642, 2987219577785020, 3528907845687172}, + {3376650841822935, 1032192126856158, 2069071282143034, 2845533170222998, 2607538492640606}, + {1660552858343061, 1231765925349274, 796446050473330, 1786065193241069, 1494189638115097}, + }, + { + {4395801598993052, 5237162742484602, 4130001086185514, 4318996219007855, 6361901289989183}, + {2175013070553356, 3320762044970614, 1143129099999600, 1532959129324381, 2553098860474181}, + {745372522040276, 1748456103797955, 2181743850112213, 796241938657904, 1942989014453742}, + }, + { + {4940563260328687, 3680309631021837, 5780417720128217, 4290252794057113, 4860748118629541}, + {1446945700457117, 3425847613673611, 1973622627786407, 1807324498582473, 848150045623407}, + {1097351026844646, 982517101132756, 149747537095472, 442788546176214, 1331800448358921}, + }, + }, + { + { + {3048999410076971, 3892379313272499, 4501182485180276, 6013415726786911, 3538900302869245}, + {1912748982362695, 3472588964406961, 2955977531735648, 2975418449611955, 1539793845278547}, + {2120957025321772, 1416788979770990, 1248163529640000, 1057479098339217, 1345904049070916}, + }, + { + {4595431001667912, 3778027149812221, 3607566563474045, 5108294493186449, 4683353521871733}, + {1020723204932740, 3177502390904871, 993238884888759, 1734688533140183, 2122148469059677}, + {1672839208916523, 1716495024680343, 1707076061183264, 765180466790910, 2017432747304428}, + }, + { + {4097011095397840, 4818396343707634, 3336533547899513, 4282281512848069, 4911825398741721}, + {2414052521429936, 1593372837632108, 2670905511225157, 3908207528779377, 2363908827003723}, + {192171151121229, 1275967732855104, 1864584199775891, 1693406950762857, 451756333138903}, + }, + { + {4727218507536765, 6731370918172898, 4514881522289443, 4346751476412392, 5345399511692591}, + {1612422054090625, 2236845889213344, 2363747608937251, 1594023725720586, 2961152477238633}, + {1485832258557624, 680071864680695, 1288498699771584, 258483455916573, 1782424270254224}, + }, + { + {4145911876469356, 3824464555215015, 4696287494265278, 5681915693477289, 3460241462730997}, + {2899290323536300, 2148582833270035, 4306072922611340, 2565743726502417, 1518458853723029}, + {1953522143805027, 882595907666496, 958109305864079, 1523427692628869, 1741273556819203}, + }, + { + {6076430972133454, 5015736489916628, 3553768171633221, 4610709058364067, 5082978176345714}, + {2177453523879316, 3719629127010202, 1578609310805205, 3246652757763105, 1948868370865272}, + {2160967413246114, 497546389595616, 235866284515227, 1209326819476215, 385381334474653}, + }, + { + {3922495052587829, 4494539022460083, 4247467603322628, 4394626550110741, 4540112411631648}, + {2794088217731505, 3925821314042297, 3967932263264306, 599992304591101, 3777014795396442}, + {2143663924692386, 1851559468934078, 1845266597269129, 477022990956902, 2179267609261901}, + }, + { + {2757964045702557, 3562399862100370, 5308617563064155, 3110477941637017, 5056214367828129}, + {1958983221377553, 2178877734404748, 1849996731612977, 1835657059247969, 2041180109654311}, + {724524272708234, 661221141789934, 1298795839460575, 1322772218421097, 837427426454482}, + }, + { + {4223608019735549, 5288655260236562, 4785575153888318, 4056483408937593, 3471372655277242}, + {2219315301228611, 1125545597629890, 951081168531596, 568553052705851, 1412860720276020}, + {1137419035579219, 1404302123897914, 70650994795979, 286534554383837, 1248950723208565}, + }, + { + {4430704978424231, 4715040112563554, 3462858870799989, 3675716202870984, 4333024567010524}, + {142500909440961, 3483510976010918, 1633124654372333, 2818821059903848, 1198913332019644}, + {752727997883595, 729011045815856, 344467882917129, 1083479075474047, 1987011026378575}, + }, + { + {4459355955251918, 4177516598428064, 5081135773938774, 3284517801964245, 5485650974376915}, + {928716952855914, 4109673353080708, 989163284951296, 2771681491221325, 1739599539253359}, + {884564007355359, 1882230710793852, 1848620432404050, 211924733371920, 1690861583639863}, + }, + { + {3370568370567081, 5191721693684414, 4210754480734108, 6164440545771688, 5649472005268314}, + {1901455587402533, 813369714566932, 4131962295906966, 1890594180896940, 2481388378410460}, + {226931392632329, 1641783547024066, 245880824976242, 244030597682497, 308840717750219}, + }, + { + {4699529728790440, 3682875431198511, 3687823620487174, 2935047689154352, 3634282712140374}, + {3094491104014232, 1130377028133465, 857472228100160, 2846610482750732, 1997728196650988}, + {832395901935430, 2063621809284227, 195191804737031, 1295260648818684, 140470149874586}, + }, + { + {3598626358333843, 5555876347138442, 3551001516031801, 5418563562930746, 3796685043861386}, + {1119383319424479, 3370445532080284, 2202737095147899, 2643552313073446, 2526474007824020}, + {436475423231066, 206987015606375, 214066996087725, 524361410769522, 1866248992304042}, + }, + { + {5215692725695751, 3669441050652411, 4674665916750844, 5316221279699436, 6443632653069401}, + {1081002530185607, 2909820960350251, 3592240835659126, 2824950488355670, 2408518769691813}, + {2202470261312694, 1511198785606944, 1434711629178163, 1742102768767586, 1282697956395292}, + }, + }, + { + { + {5324690866715337, 5533327845613105, 4036930034597607, 4638490931056674, 5650412235017737}, + {1638260469631915, 1786040878698661, 3158389239420729, 3835314628196980, 2413700758553481}, + {960395712488566, 1090263312831733, 1493488072165035, 718337273853885, 140550395520083}, + }, + { + {4569832948050874, 4985100205291785, 3844846206585447, 3819690642434847, 2746468303866686}, + {2833809135953840, 3714738963129863, 1699035707213511, 1260336843200283, 2274544359656356}, + {447501697246828, 643764017641830, 598739660833153, 477276555234445, 722964385617133}, + }, + { + {5743873914285031, 3319094314541157, 4059899116934908, 4330486197588569, 3357811959011823}, + {1468688697571051, 2930932730830707, 2981359468083280, 2467829883996923, 1572642054261959}, + {601523810297856, 895074627148937, 773977692709653, 1905383167427875, 1540507530397039}, + }, + { + {2901461178567113, 4994292130181829, 3331309663039004, 5793381747506001, 5040143301404956}, + {2651347872114579, 1239727848347325, 3161955024122276, 2712053429837225, 3725184595174532}, + {1148448246837183, 1915539016170074, 727268432049334, 838952046766961, 1100979659516489}, + }, + { + {4313788896597005, 3731391587318928, 5481675874227619, 5342116794928851, 4858074158134343}, + {2801484252789311, 1308243333207398, 3101163188310017, 2902551501956635, 1782136170508091}, + {1354449553272043, 1085110494903468, 2224048655022783, 1932600057639272, 200912869737304}, + }, + { + {3988802802744946, 3054267513827163, 5506469409446024, 5207893419318903, 6705457585999423}, + {768379161979176, 2950328772092937, 1384131174334606, 2825110025249585, 2256845801064479}, + {1328818899805024, 1356396048253838, 60665341223248, 1567700157316511, 290562887661571}, + }, + { + {4789838652012215, 4990599721334973, 5868836171113556, 5456092296292492, 4808665632941719}, + {2083771618977947, 3859777942731437, 1586868936731178, 2520556279463752, 2196980677006699}, + {1179288489475667, 394266093483806, 2023843107238627, 906600297586329, 1987935808498095}, + }, + { + {4852377011852760, 4268226436451965, 5725799343439052, 4170083215192005, 4497273560337215}, + {2190648163527070, 1182302286459911, 1698709705179966, 2858053760026903, 512030280417031}, + {1766029976663583, 578113072554872, 1407762358462124, 1251410333318914, 1519685697291309}, + }, + { + {2425211004658582, 3219329122771349, 4160786304284559, 4915538208049169, 4859858046454066}, + {2165465146173096, 1900611060212209, 1042730545588351, 2014093929109019, 1810920073473014}, + {2188210814895132, 862494540176239, 429026747909695, 420692388686242, 398456856483386}, + }, + { + {5384113697440972, 4249326538414056, 3736088109548391, 4776181701890428, 4340637335144904}, + {2182481135659358, 1214620204337280, 1322637461359405, 3608648111407434, 919105498759084}, + {825616994407031, 220978982016139, 419943662189285, 2047052177976116, 183513451940769}, + }, + { + {4383853436467396, 5616868348446865, 2380427384672103, 4007620388627955, 4745758889436972}, + {3034925520134716, 2558549339328923, 2273570634299175, 2355590727329921, 1721435535499274}, + {397259122369220, 1632965024772390, 1358524229763907, 634652123170537, 1300732316858513}, + }, + { + {4537722552642641, 4406953311574034, 4747655843802439, 4621074214609984, 4656289262373784}, + {3211235434961971, 649442782529810, 632841582251763, 3220605671079152, 3939184634719634}, + {596504540509310, 1411595783429460, 320205765945468, 1703829528897671, 791135694264620}, + }, + { + {3935303504608645, 5231587761610764, 4492307054736833, 4099267906214233, 3895141043651931}, + {2905973217158121, 3180461607923868, 3881652820548741, 1616810006326533, 2007934577851039}, + {1723586093910128, 42167711405468, 711328489930847, 1802621686437750, 138939056743574}, + }, + { + {3535285454280039, 4143874578497438, 4378537178006869, 5183808895312002, 4029558557190188}, + {2822051371235755, 1171790929970038, 2832133858385125, 3449345178331124, 1343246277400448}, + {201514708798683, 714458960438240, 193526864900221, 289856941669808, 677692044183495}, + }, + { + {3390373253525299, 5571978408447513, 3881939102950573, 5664584550774172, 3541416731496846}, + {3067220342787603, 1318716141230895, 859940092247599, 2796965663112684, 1325031219234520}, + {520206601828502, 827736556609109, 1548115289807569, 226762337353952, 901425653289102}, + }, + }, + { + { + {3876784047658153, 3427402741453803, 4260413043643610, 5364266100628625, 4512454692213601}, + {3846988412720927, 1464526558278043, 4150028797303466, 3612037356861449, 561355623244019}, + {427225699371050, 88989906931284, 374954954790275, 1891881595245671, 72849256625193}, + }, + { + {3916811195383628, 3630554563432754, 4990637953666720, 3851134441999325, 2556181869064802}, + {2335839984116276, 1931214780001052, 3695690881878730, 1666635094108941, 2394874384507690}, + {487618024041635, 1610635862259296, 1930277174961405, 2060246530132043, 471988063294585}, + }, + { + {5204676678666455, 6002573394041257, 5469218649554576, 5103810246282644, 5450232393144287}, + {2223680929791699, 2255695602856973, 2223372744379624, 2581758136991750, 1157672051964719}, + {1191620799152162, 584262428445493, 1654487633336816, 80589900150873, 1778885798645876}, + }, + { + {3804876885771689, 3030718867413702, 5084806164730577, 4351829583495248, 4696365675416595}, + {3277232365416075, 1648743746278574, 2268484584766767, 347896520603034, 3388269197255745}, + {437947250844137, 170970937295705, 294909197597269, 2210849722009323, 1802271999575202}, + }, + { + {6229784974313861, 4445187233108198, 4141897661886957, 4112739300676286, 4973450766687119}, + {2452873695124259, 3183518466635188, 3225011157480339, 1530254508436786, 2236389510678133}, + {1718640585909930, 289464657861405, 256448940553760, 1840710967168708, 1367355358576031}, + }, + { + {4418094237484866, 3862166158397851, 6312584233293658, 4170168684472692, 3205101920356659}, + {845231506816104, 3749601727822635, 2431461776355856, 2145415545771870, 1633953832787249}, + {1855071951306216, 234835319416374, 608676288546844, 311106921331784, 1424607004261872}, + }, + { + {5534887235292980, 4955913319898744, 4436282654044178, 5157071574798331, 5799145956361697}, + {3127590738217404, 2607909890139434, 625984861031328, 898713331800149, 1867577233264451}, + {865238419718368, 2167660602098967, 849033435333870, 1879862001988212, 2194604163295964}, + }, + { + {5028901701646599, 4744711118820448, 3470202116031185, 5070974802044518, 5029459282472967}, + {2597573876967117, 3500480183251406, 3245567533116125, 2884144221342044, 2745802723161587}, + {1262037831799441, 1761445988918060, 1818282615037362, 643977010061831, 1670449776207217}, + }, + { + {3900064283125076, 2932367474353790, 3722342375883231, 3973709010425436, 4168589452466075}, + {1182011269637170, 1702301475425876, 1754593023447641, 1069325582888970, 3665084705482905}, + {1389152123534754, 679131622889370, 1335753122628610, 2193861582528949, 1750442867995809}, + }, + { + {5195225631658915, 4626594891714746, 5530846200979591, 5835469573794033, 6108601962615813}, + {2118803625617181, 1938389959549060, 3158628651247723, 2603939933464505, 1887075807282899}, + {1094771758119662, 1784696951595960, 1586111086846247, 1024621381632866, 1336860396265070}, + }, + { + {4962714218495987, 4686221014092595, 2854843506884281, 5460710344297905, 3609844163230280}, + {3350136365379549, 514082045997139, 1809601258343901, 1359082981819817, 2325132321451910}, + {816435505147956, 959029754172122, 1905562189095432, 809602990954940, 205405869295}, + }, + { + {4658319919071161, 5037557822453179, 3052863244608605, 4920651274442715, 4594868309263967}, + {2357418342397899, 1599797957446167, 1723240952262061, 1521319741808023, 1244021174200017}, + {1682663787527018, 508342182938395, 1334960042435994, 788285033210835, 1620852797020940}, + }, + { + {4468831118271270, 5037652592706325, 3842859113890724, 5119527774959881, 6070895395223645}, + {2858969631689118, 3774837200669161, 3030920205974308, 3569621881524763, 2272136016309579}, + {1457792005629762, 1504843532852533, 117754270187566, 1653728802150419, 956441650806976}, + }, + { + {3858799123389730, 4813864196253754, 3424673118223091, 3586667532616773, 4976228037682591}, + {1240797555104590, 3504953395544138, 2270523358088921, 1192446004554973, 1265977430218831}, + {209033356623489, 521030133202188, 2210759687093959, 1391735568682749, 2066024683275958}, + }, + { + {4447381514683745, 3805818101586919, 5048484781457783, 3805764540626535, 4979430662961349}, + {4372830229780273, 3385211896687553, 1322477629921689, 1744994285972241, 2453525332947167}, + {469280089327132, 1530255390484981, 1847838662987617, 2225747405410001, 1682362262024675}, + }, + }, + { + { + {4202827224002136, 3028138102214431, 3666469969152450, 2607795400549083, 3461406593763699}, + {2143318224651032, 2985185441001099, 2506505238926850, 2498470302228395, 1442295963272081}, + {2200224066087308, 1167051805827953, 161446888552827, 1516422365939770, 1942535836845300}, + }, + { + {5171889208942910, 4780829163437052, 5016462198638337, 6470156341077032, 3046275441821918}, + {3482226206224520, 997104644926830, 3305574633418067, 2147764348670690, 1676514761128454}, + {1628314393858778, 1997743320994668, 1561201521750924, 1869590045554733, 1810714681142288}, + }, + { + {4681454419314826, 3433609902051237, 2919531098016978, 4380876633130549, 3072926890864646}, + {1675422916543594, 2672408744787477, 2759217149054666, 640362125760161, 2799605921604096}, + {1484872832783728, 72255685107270, 1098972476164964, 1732914770170238, 145186792002379}, + }, + { + {3935383441158753, 4973709539651372, 4161806475746733, 2598419220788322, 4556716999515219}, + {1372652207334635, 2531888280983978, 3771287204988285, 2258792327010408, 640671581341507}, + {156581553787681, 307978851206907, 1451582278870485, 442722234791876, 662472042575165}, + }, + { + {2866740058396235, 3493635817947651, 2400937210085123, 3122677618181344, 4447500274280321}, + {2082652078388943, 2745645971502049, 2295760696601975, 2362848920638954, 2370414183207021}, + {1712668510139487, 784271226274642, 827073136956465, 1001465329762964, 1662630974562798}, + }, + { + {5156175574821430, 4359502037960358, 5222120068062442, 4645531980214215, 4676244221442153}, + {818080711416948, 3611895686544640, 2535691662679364, 3086441935441805, 787978368976315}, + {1509857525874286, 1496970584948645, 399828714647739, 1863753979948441, 2149707660031809}, + }, + { + {4144865997618639, 5339859640465925, 4438288719418715, 4715011715150674, 3610459694506906}, + {2952195132229463, 3345568150314393, 1768906295222689, 2025477905414216, 2995593107979034}, + {1951144383031056, 1085048452592587, 499199223423315, 2055889411465929, 698006601614245}, + }, + { + {4183964222033211, 4817865139479783, 6220809882369837, 3643181163556103, 5929569705519063}, + {700816495675241, 1165569165048171, 2172597164236109, 1071655796287173, 2392628493878193}, + {1862104717906915, 1752261107932084, 1874923294613947, 1008681858018398, 628821150989939}, + }, + { + {4161348428018682, 4510282473079517, 4817307873546246, 3901464805798077, 5820970885668019}, + {2393760120508366, 2923675062487769, 3447512431195440, 3853675368087017, 2900110716170471}, + {271735680629051, 645447398246691, 1438808971583999, 792432482423730, 947645802664175}, + }, + { + {5548911597254848, 4313111803014757, 4159094458160020, 3906456530516599, 4703406736341543}, + {2468698810952212, 4159587806133767, 3895277333299798, 2370621230252749, 366242246574179}, + {1891237336529861, 2200322075990278, 1389309370267760, 1284260243869154, 2019396638376055}, + }, + { + {6612681523843925, 4270864305450289, 3731318918021201, 3544862780769488, 5178202040634906}, + {2135755065262843, 1122607271257525, 923542923082409, 2860818598984322, 1922554972749380}, + {242471180181642, 559887731579688, 2072408437063313, 1092425853708654, 1508919031894623}, + }, + { + {5872377157668488, 4408911728296550, 4215455815151923, 4350437538061339, 4304102307657902}, + {3016579539029836, 3430456847285690, 2439572409111001, 3210834728649259, 3775979784664836}, + {681181014012506, 1995504690201206, 1747715035603252, 100305442172708, 1898381133318416}, + }, + { + {3131841243480282, 5236372530773376, 5021877536268058, 4866190361541948, 3290429298804025}, + {1471590353308208, 967056793878588, 3802522075784380, 4004598771731972, 2024618065937019}, + {1109658864423422, 2103734444560570, 2073023657041166, 369769649281723, 817132219307245}, + }, + { + {5632635968843701, 4247258704551623, 6265280169576672, 4815811703628991, 4268679712320579}, + {2186780367255445, 4183850462668485, 2677999934662660, 2880987810780319, 4113828005081983}, + {1441842413844030, 161967823757178, 143843657267759, 468984586211790, 1403635869302761}, + }, + { + {4465016058776751, 5317359619864273, 5237005983845137, 3609875861871372, 3464614715951065}, + {2238448064725901, 3110619177809235, 2162294075762619, 2319911679772150, 2285011619226311}, + {19804365830533, 1686591959644968, 641957734952114, 1534607041731245, 2021106986001419}, + }, + }, + { + { + {4685063337509321, 4828498939602920, 5252037453775058, 5946493173698145, 5385655016202805}, + {944214205150673, 2365379166371694, 3557291173836860, 2962349586178017, 1508433893219247}, + {99837384801727, 2128746966172064, 1728087272474317, 1660968164341303, 2094478837305487}, + }, + { + {5059816654277047, 4494318859907208, 5234935703112714, 5064000806734505, 4673368238982494}, + {1045092786794937, 922156857253434, 2823065772236182, 3280047208436923, 400144133024674}, + {1350540322092981, 428507123444697, 863081413402232, 950089447398951, 118865435494230}, + }, + { + {4685872193140817, 2986094649249487, 3994164430284207, 4339988837278092, 5456344527489565}, + {1863120758931529, 2615255562194237, 2546630581550601, 3581241606812888, 3495878108380709}, + {317239144147936, 1378693805440304, 1613995646839215, 1790616997152168, 1664744641804674}, + }, + { + {5168378766438094, 5613439416641824, 4644053531787994, 3823661418550054, 4036137961950509}, + {3162078769819650, 3145982897294820, 830213734772942, 1343060696486484, 611721765217825}, + {220994375354681, 1633125608855915, 2233079832150828, 144297568151940, 217868145580028}, + }, + { + {6394803792754188, 6132368335021053, 5067197744306631, 5563640033331609, 3502674887523375}, + {2185253522527390, 1722061079589371, 929518249744037, 2473172243807197, 3427214482375105}, + {579681536856473, 1962714631533051, 518559321779053, 971489356480100, 509262501560864}, + }, + { + {3925113491817113, 2597442932750426, 4547336592857079, 3567634098715516, 4305879739481027}, + {3780232691597615, 2387499794027268, 780855157188913, 1744928736206446, 1837149863417515}, + {1612827416827303, 1149821613065205, 1844912308905994, 429769677786205, 1866058244678788}, + }, + { + {5323969415910835, 5007501896425241, 4051100888248418, 6293526281093731, 4819708586854638}, + {1087967203355487, 1504313118437159, 1271975234407042, 2125305808015759, 1278369242007838}, + {2109491846902798, 1459244188614787, 1145316246074802, 537401043713173, 2076110035136585}, + }, + { + {5420343519672736, 5167540178478133, 5227270808193702, 3857502656954627, 5090553389549522}, + {2543056198437618, 3682981507069573, 1492922137755706, 2553269698918225, 3362719634517442}, + {641798503068060, 129975789967638, 2167736719761015, 31631641435626, 350785183214734}, + }, + { + {5066057417347081, 4106102383764030, 4636402204189217, 3166449457097492, 6512612113974837}, + {2326671091720579, 1608331768972414, 2153369779460415, 2214666295188594, 2144539481917009}, + {467300109694399, 1693264194394125, 270333528447105, 650109201517682, 1183509432017698}, + }, + { + {4980219730800404, 4347683389360629, 3797217994168414, 3968193844610984, 5065496827863311}, + {1399648064845078, 1606346276621799, 2881852436764688, 2553259795593478, 3428187511626105}, + {301865991723133, 208252052427984, 51972802328726, 2021710333754506, 1378508945174500}, + }, + { + {3184436513057976, 3574184872992923, 3980701068825082, 5420309832432621, 4126883464345483}, + {1378603098333140, 3238698568766207, 2846856431574260, 3096436218915115, 3811649319155499}, + {847831302663356, 1506598425567944, 1109350264779453, 1031639907526886, 1887329321191319}, + }, + { + {2729102328832984, 5496148280158443, 4624803589574900, 4730709608222510, 6347472137270048}, + {2243355286660512, 3259846408864417, 1913072889496856, 753019988978676, 2074854260894060}, + {1050426720469833, 301805153257576, 1393268630450121, 1286505995795045, 1587323866723540}, + }, + { + {5177553689561919, 4133777550475335, 3692495435897478, 3458719135916346, 4458613993531757}, + {2247714139881915, 2782180885900161, 2312112468846576, 1680267679651832, 1590058688526667}, + {714977855392027, 2020332496651261, 1788558438911234, 1873232632822523, 503071332489421}, + }, + { + {3928537419758315, 4962617917721336, 5009684278125795, 5080330424879792, 4736452659996568}, + {1885791717393579, 3608519904666432, 3804656767054515, 3734399316619142, 280860879781734}, + {222453425419780, 1881231455372494, 356159674087381, 2031436073565603, 1587722788974501}, + }, + { + {5557830146603019, 3189235339941465, 4073380612031396, 4406171020530468, 3729384279482635}, + {1262604590990019, 2611597233679237, 1167025725287256, 4282778604598424, 782190165854895}, + {2186405536221393, 1904322539012708, 152608078674767, 560457311616919, 22952815837658}, + }, + }, + { + { + {5410522905087843, 3457067311541871, 3734790664132962, 5317892036251255, 5789103873795877}, + {1051236049852089, 3090035912523931, 3653329677163146, 3071361720175865, 1695547314615009}, + {342012360452061, 1887029215668228, 1155449753977691, 310762800506541, 1868750527042639}, + }, + { + {6005811139638228, 5026414264668887, 4377100252408278, 4270582517957803, 3422272486715601}, + {2698577143176842, 1182111476573107, 2613378546611642, 3220851371976805, 2803670963190147}, + {883746203814773, 276737323512287, 2229390196673160, 2155663378443822, 635390057802745}, + }, + { + {4097156896954595, 4786624081470779, 3512858804636033, 4586748051134289, 3866073874774231}, + {840689961188261, 2918655679606741, 2236632145763387, 553161305644429, 3021893411965909}, + {1649953183870355, 2176771717569818, 1233096109604549, 1152511702037810, 560573824644263}, + }, + { + {3626792084314328, 3138501138424139, 5501515071454841, 3948607545905590, 5453543250308683}, + {3279453112825750, 2682669747401601, 2291239772155005, 3644653666115630, 3532224357711467}, + {380965098906693, 835788132761480, 2232989119976139, 2205277179143298, 1175904351372329}, + }, + { + {5088419201363648, 3175894686165450, 5299797135086175, 2983523363221301, 4220825923293130}, + {1276840412816828, 2771169526519092, 2136012615148103, 2431893903507465, 1217611106137226}, + {2073239372536943, 30649016949678, 644492521678981, 305840627193069, 109901429265295}, + }, + { + {5139707358045825, 4688671704193624, 4352852502302345, 6384641621021538, 3836551482242832}, + {1192657509706017, 2505894684845872, 2556098156240875, 2309411544504528, 1820864150951982}, + {1002466072624564, 1231676492638173, 1795061881446222, 564780581799518, 2025621015597595}, + }, + { + {4858692159454824, 3985618384769197, 4768611969748369, 3070997304216167, 4648245907091308}, + {3367644801750200, 3754604094141859, 1751381457602879, 2418709533236081, 3882122160708146}, + {374714050779396, 405289438859672, 1963133877676048, 2112584561135192, 1143185401022561}, + }, + { + {3846711807981435, 4505402219442327, 5146862869313170, 4623705187751987, 5565609289355471}, + {1926650836092769, 1141267952622767, 3387976667434360, 2038056869767013, 1320936551384977}, + {283489509389185, 614480115735096, 278795579529276, 1166609138076060, 1715497286463476}, + }, + { + {4275758633577087, 3861278996194559, 4466252217383748, 3665496078445880, 4058888268167473}, + {3871692294074427, 1764539273907035, 2887939385751194, 2243961968498350, 871865948439469}, + {2109468136302879, 794757759853720, 236685909745726, 1503678842333224, 2147818470882973}, + }, + { + {6104878619412512, 3485890441294438, 4220586739682332, 4017322426737508, 6001128289990864}, + {2677372099733352, 3437936829126546, 1424452207982980, 3507913002098314, 1735468130831162}, + {1938075620777682, 1762081466410536, 1564991344244054, 1376297777594771, 248036172502508}, + }, + { + {3778095331789531, 4910813465857036, 5137553967349467, 4984396828084641, 3687371747598377}, + {1479550570874507, 2294055327463876, 3724831818626703, 1654245262468829, 3019040190597313}, + {1873423061916096, 248167770548070, 903648623666602, 2087943940366473, 547940262578569}, + }, + { + {4725001988101218, 6546220549270451, 3469130078731384, 5687075187757928, 3413336519371176}, + {1413358533598756, 2252005803690891, 1458088388485468, 1671589233622260, 1797166284473808}, + {523276182513223, 343307024193534, 937383689926833, 1330219799726239, 2232356434433501}, + }, + { + {3569532147039540, 4195918401728545, 5115321889044388, 6609417783186476, 3958938427322120}, + {2397395505704106, 1262743052475361, 2547892063055852, 2321536665849090, 2021113849426924}, + {141428615990698, 1565258204511290, 2188430123291708, 1781055032390171, 763358600759749}, + }, + { + {3906824289179955, 5654339223566203, 5504976063361072, 6361176910130113, 5155227057638370}, + {721005728190537, 2847737995575099, 3056729868442396, 2393716554993649, 3467469336561398}, + {160800301986322, 534920738504617, 1465194074759867, 132949302971740, 1176455782582044}, + }, + { + {3433889410020031, 3665956712149865, 5366646390977683, 5367384152674927, 4795948454618784}, + {1902504950598053, 1202752625490289, 2565725054888499, 3023474686925025, 3059561010324150}, + {1935479944158543, 1102588664377385, 1651606970291190, 1048887489959304, 1677042940335362}, + }, + }, + { + { + {3858553186233324, 4192597543704949, 4422265554716229, 5060918874051413, 4251667779718110}, + {2960733565044348, 2107676482823115, 1657279889267301, 1609984394439769, 1082526754413784}, + {1823622181083017, 408967151178094, 2033143529389867, 2209724434343478, 918118538477317}, + }, + { + {6088716933512995, 6116095372188681, 4275776721065459, 4475819482692536, 4685952285527508}, + {2842268335288737, 1888183319191451, 3692488899816305, 1677336684221250, 4176880757505444}, + {463491021439363, 1750609461077078, 1169967881279297, 474253519600450, 901070375860211}, + }, + { + {4400692422952866, 4659690717529996, 4722795303748102, 4016471577087528, 3702653606869112}, + {3485976485792634, 1118156106770038, 3653108520059592, 2301046652704138, 2381698882921202}, + {288029433804634, 1918327772711516, 1858109617364668, 1548745667412753, 1635036158704975}, + }, + { + {4899918186072737, 5587073618198231, 5408433162977742, 4217274871182020, 3058703542950255}, + {1915560744141461, 3219944346867669, 1684794323668364, 813038486884416, 2736974530406253}, + {131383425958682, 1726194406199626, 1195125520329959, 1269440178344704, 1934708138886976}, + }, + { + {2560939345231273, 4301322442066007, 4073130192422468, 4440850393019204, 4883344655404735}, + {2185121667669569, 1115206785572251, 704158439711004, 2133851508118048, 1251130304627637}, + {1895230235031468, 1896812472261458, 768470747222158, 1996242383935516, 1420798451369434}, + }, + { + {5839795121226482, 2867951589507385, 4636256264448023, 3052659764389740, 5026931603960818}, + {1579856931436900, 2447051767839229, 2868067823655589, 1688893962924788, 2116170079089324}, + {556211501812000, 449190026847667, 2036295767110360, 128995208617458, 1118467502984960}, + }, + { + {5602461071232607, 3307918487728174, 2854017338064603, 5855272157497266, 6150895900635822}, + {3398390622800229, 1820230761045332, 2690748155578623, 3095835968664066, 2530217218349662}, + {1878982227582804, 1431346083601994, 1534977024077189, 2155113334662581, 1782950372830762}, + }, + { + {4697661970186985, 3763132135142867, 5033467660349912, 2907155321697052, 4660465007863417}, + {2604312744349849, 2452708102821815, 3230466926286856, 2118488738947708, 2304478471957885}, + {1390885694073460, 1816639772663275, 1066627353945560, 1454561122724455, 848860562366790}, + }, + { + {5540829116940004, 3948748499449809, 5260550454870879, 4676389564943908, 4383546683050662}, + {2563789831020858, 3343718595008637, 2259025389677919, 1392665428080842, 3671467539073936}, + {981545110828877, 510698765880228, 2161678679515528, 1436791773758609, 1673597748298096}, + }, + { + {4329713062953095, 4939339976361997, 4958702235647932, 3268883154176961, 6391544885910171}, + {3614223297666549, 3897390208178715, 2811994039134574, 2958689501074087, 2363866533687133}, + {1294858674770242, 529668890256843, 2030539078163824, 294693146073477, 969527805905143}, + }, + { + {4670371383742225, 4002936514889177, 4966859846610707, 4736741110602146, 4760957427324248}, + {1176127152490445, 1894013131106171, 1812632908007715, 3751034747324574, 2289873378487758}, + {61868149975749, 236120696290007, 608351327055311, 1829919587421069, 1627340269896729}, + }, + { + {5062259960708944, 2689430826280744, 4108030288846956, 3316359330121699, 5641758926485313}, + {3722896082959268, 1863222026681564, 2044934869352810, 1385880696113195, 1308481967864035}, + {1796753889379582, 2232245583163596, 176790521107364, 133826841897595, 1041041183235991}, + }, + { + {3537934576014922, 2998428847270897, 5788967881664907, 4283416153137820, 3545722873501844}, + {3424639235617092, 2530506041245943, 3202402279176211, 1867524240141886, 1078908361802522}, + {1442655471934418, 1764674447040318, 316317796980033, 318184491515700, 1168933061547497}, + }, + { + {3599845082833499, 3896846545871592, 4303714095196951, 4532827504261802, 6020561742040974}, + {1580156396502051, 3208244370687690, 223926404960589, 565074765027696, 2169726994764050}, + {1942280341359651, 50425926664281, 1816034234875212, 880607828368837, 2092912650330571}, + }, + { + {5512765861463031, 4125716632501591, 4924530697112776, 5238255918415337, 3653602071478327}, + {1344167653424867, 1048535312223495, 1948741777806718, 3072730820612467, 1645288196866883}, + {1745152490874503, 1836336442271605, 2042898833391948, 1540893062903555, 1183365031475960}, + }, + }, + { + { + {5866266958495514, 5059063420853561, 4485040531648720, 3733835905319672, 3149359201467933}, + {2684460961013652, 3709949712072759, 1783966662497692, 1338383483986408, 1938129546538183}, + {40033251972751, 73885946378640, 1935473366247146, 1461619709267546, 1211799649582059}, + }, + { + {5250457209059169, 6625476149991574, 2830402208757038, 2943786524207392, 4303078760549837}, + {2301225069080269, 2184860938031358, 2273332051328548, 1704804667098002, 1911735781256473}, + {2217303387266656, 2227853943602075, 1384266551040407, 847818056628355, 1874126181291960}, + }, + { + {5228171959238562, 2572808713483427, 4818692310321808, 3983994866935258, 3614639592657195}, + {2763608237796206, 2346801614322209, 3045306834104040, 1893958852943478, 1490859261541415}, + {247688480299164, 1512873113726713, 1351630747308477, 937439467136054, 1030677695284257}, + }, + { + {3673708668048072, 4665314801263177, 6233349558231934, 6339984458236183, 4552548914816150}, + {3247306673138258, 2425869243107473, 2622484905091774, 2040657700179409, 1450858492090282}, + {1636572211186580, 2000987144770729, 1893417472062746, 196779160527558, 1557344243161357}, + }, + { + {6493926578942193, 4543542057302668, 3472731731448002, 3629201377772109, 5141975006754257}, + {2310006248725699, 1647962485872618, 2823143389536034, 2192050419207497, 1818655878772515}, + {1024434193686880, 2242250021719251, 564307645117404, 690001361734624, 239056809198959}, + }, + { + {4713019913612655, 4128228433667681, 5028024885108113, 5705734794679268, 3306562584580656}, + {3717108646348257, 4084515682195001, 3812051722646527, 1684888211341314, 1618372056987552}, + {1877409538331051, 337692456674055, 879114692044355, 2186377676371749, 1343387843321657}, + }, + { + {4142192651183813, 3524721259616285, 3594705099270661, 3959153982160586, 5413021910706886}, + {3669516570196207, 2121969005742829, 1652467606544375, 2698034847882520, 3275951535145684}, + {535664786267626, 858000264335400, 1392803193793530, 460772165692459, 1244185301942167}, + }, + { + {4502106313596470, 6443346829525378, 5721231993875900, 4681113914034302, 5472479613319256}, + {1495731174651276, 2532746921337410, 2156800382632014, 1987445924091844, 3448117379338544}, + {483117633444291, 1721449975252800, 2014677970681898, 2079902425951169, 117285229800651}, + }, + { + {3261832527463430, 3508653912421559, 5988429677058390, 5333822038484553, 3271080652355482}, + {2204547407113574, 2042779888674267, 2424936780736806, 1416144793524967, 2647730853119196}, + {417006946097712, 816142170165382, 321665320486095, 1120596382678137, 995334532083163}, + }, + { + {5667435300952982, 4583050105149113, 3937627982933697, 2917941244133350, 3746324610420174}, + {1654154218632292, 2424649854522191, 2118483268871125, 2658103876978958, 3351121693690514}, + {1757087236610187, 114932695265885, 1498710897730185, 1732388966595209, 145995973897689}, + }, + { + {3747574781762871, 3444173068370155, 2989065545095348, 5144077823603124, 5597474176298234}, + {808058917355435, 1642072317689253, 1764756051109168, 1619463984060522, 2971052737331444}, + {344784500521841, 753070981245028, 1021287645349333, 896645545453199, 449568974542070}, + }, + { + {5037125630216086, 4317087092146610, 4394758621519137, 3169411347551391, 3200762148534134}, + {3758879149962654, 2267958484085658, 725842773817223, 2203610500470887, 1640888914156664}, + {1753063336824455, 1632699439142352, 654655992711894, 254878945844677, 1142235737877277}, + }, + { + {3668977677139265, 4332641682100108, 3590347451295966, 5242849066395039, 2727116665213341}, + {3248235630095651, 1380466035309490, 1790683862609512, 3542725848725101, 2663722245169429}, + {863640852068414, 1530602868551714, 1707160942886152, 54230982937714, 122819573759751}, + }, + { + {5532810941110268, 4585437113624970, 5116705204102219, 3665108856301161, 3445572551989045}, + {2829139259902194, 3388923696568854, 2569841942150467, 2697982670988693, 2163914772008849}, + {2076653457069888, 1193685867720358, 1325584969753937, 1501472994346955, 87079528165998}, + }, + { + {4556025881223574, 5720430347742651, 6074363308505144, 4027406626756934, 2527767620430889}, + {2142131119871606, 2984501701896371, 2717746191530066, 2203225891573820, 2175517225379719}, + {897107227346093, 455907621058237, 864390863340574, 316655721359786, 1688391871841069}, + }, + }, + { + { + {5225107848603314, 3997985175873023, 2901647838494787, 3895284350008311, 5682946636557185}, + {3523031484358436, 2824636666213863, 2395141832526945, 770528850757883, 2501907940021781}, + {722866669050453, 648025000876863, 272387785321835, 1191578896340587, 133025146298323}, + }, + { + {4430018927628058, 5528149113975034, 3884602704599257, 4041974594447505, 3905022194274965}, + {82857304500618, 1554338034359360, 760468202446199, 2344834461467455, 688719719651551}, + {2128452325542740, 952454207454828, 1516099560539414, 1362377470631451, 1181280467630705}, + }, + { + {3877905624740973, 5612025444592814, 3620377076227448, 3557624466809644, 5794884625077990}, + {1234316951156125, 2774803744202148, 3038336850143346, 2839603046584234, 1645722164542234}, + {894237486099210, 1516039905189318, 1740044048087400, 593444525063043, 2109764897178862}, + }, + { + {3625360958175610, 5708422748846073, 3787265901576189, 6157656721094708, 5961588011087405}, + {1482109974932762, 1512691293799179, 3308418655922299, 1669766513116242, 1645628848588889}, + {134048702591674, 1512942576919112, 1666722043826583, 1830910766776036, 90483195207340}, + }, + { + {3762249153136541, 5419647444574112, 5020263484993746, 3697437793067561, 3831953348456062}, + {2494438010166937, 1432383122970498, 3625127628421620, 1764585753875763, 2715866922646858}, + {914153294895020, 1485178337004016, 1172992438642136, 742396957515979, 1460451697085215}, + }, + { + {3293341585462216, 4914585647995248, 3425647660888775, 3851476795826281, 2935952374714235}, + {2881676317687314, 3127597808111770, 1680974550469383, 2631492786928655, 2080467460645229}, + {1084836891982052, 405373371974756, 392292573225522, 1228291428535054, 196706224397467}, + }, + { + {5422966393229312, 3517798661028565, 3491057102408135, 5349612585124235, 5098313025804708}, + {2181085219797570, 2438267619893703, 1398091257339579, 1543623638852333, 2275879750497956}, + {1451708073273912, 640663458576442, 472967005176057, 1940369909273489, 1650816055376110}, + }, + { + {5775591770146864, 4809727687563635, 4066767569195787, 3927850608944429, 5542524111957037}, + {2856057239056516, 3899713821492127, 1178627125851433, 3276833765573271, 1528786153297881}, + {1406590024268518, 1220852036090080, 364949301397175, 1654716393716139, 143122595639438}, + }, + { + {3092682960222618, 5760168522994174, 4966136799494047, 6183321071200806, 5955160799299141}, + {1679800253914106, 1418780742199926, 3419507991072325, 2296436046846462, 2072736467396911}, + {882943817583285, 484844826182032, 423720125645701, 79705330082926, 518433021584838}, + }, + { + {4303808439591566, 4492049110308958, 5005208589399660, 3449528090765045, 3218284505011813}, + {3283940803229324, 4459508559485836, 940189907838090, 1705424518756533, 2039165337931945}, + {892563649969864, 218618659831677, 483384434921296, 1959503286788495, 846111377588119}, + }, + { + {3736052427633640, 3240841928280071, 4678563487154791, 3752373267871112, 4181937274986806}, + {2003615224309886, 1453829786196949, 4170849260029473, 2196915936737576, 3465659437703250}, + {870814358129174, 1509533025339595, 2053081266530331, 1737753718216259, 77875205064950}, + }, + { + {6295693526685959, 4477016414498074, 4045516627237016, 5610462754780940, 5285590675711912}, + {2091650387347437, 4186999032385018, 3695680781345242, 1318896896580492, 3133525015024966}, + {2057751622403208, 2124826136415213, 2162400122701924, 512312961318735, 2072953190856236}, + }, + { + {3421075047723659, 5902999844007244, 5257660560322253, 4411230485782045, 3851018473810833}, + {1356912041975431, 2088651341684568, 2115599337938785, 4037573216393849, 2652908467965391}, + {356251628924273, 2088769627568139, 187882754343055, 394347310503797, 1449630398452630}, + }, + { + {3682820885194585, 5173915763318849, 2521868910298419, 4165015930825951, 4883528324075009}, + {1067127578201981, 2883441503009643, 2032675011298617, 3963320928045487, 1183903438950389}, + {1431421126152216, 738544074023370, 2193830823196529, 1671561335663722, 717735409657132}, + }, + { + {4201586389811353, 4375880219104829, 4192199017276052, 4416844421544609, 3903714904213483}, + {1449584304781523, 3077329128471461, 2135282471631868, 3283981709093825, 2025731372310411}, + {1183319077995597, 1294226945214786, 1175504892926680, 1065468559536653, 2201437139069262}, + }, + }, + { + { + {3505559764260479, 6013086951275753, 5081911139396344, 4716516055339902, 4005184608137658}, + {1941635877650331, 2292936607701027, 802548087270426, 553714331402352, 2637835706093694}, + {1415499622184076, 11739232724558, 1448526577403933, 77973485783393, 148463223858677}, + }, + { + {3556556070469100, 6104580777770606, 3153395731542438, 4746347503688425, 3530835687615003}, + {2563241728545350, 2900457320970642, 2021653799300720, 4081786454058715, 1684057546885165}, + {531432570362576, 1071513573823369, 449672118652203, 98547521251379, 260579416510065}, + }, + { + {3113402949202118, 3224343282781895, 6393340053990193, 4574021187583530, 4354743893457091}, + {2098297300858722, 1637995723173513, 2132191683177015, 592134746032938, 1044637126699087}, + {607038018090674, 1768950085932612, 1176147243379098, 1239851308662055, 1164850159859507}, + }, + { + {6544624144736846, 3158440120316048, 4122467747600782, 3270454787206357, 5173743677397902}, + {2302101840952822, 2675605826160506, 3431414289057246, 2525090851992001, 1591101869035052}, + {67986117053250, 143032219413988, 187059126532888, 1606721935579222, 2108737133289470}, + }, + { + {5726022544095362, 3724045113988627, 3515582956648241, 4176155101637246, 5525745188146662}, + {1710358734492362, 2952544254120043, 2348808532032187, 3458396516769880, 1537007452608630}, + {63942543002426, 322070337950512, 1601643046070686, 1223905889282175, 1741111665223434}, + }, + { + {5315895417052113, 4828375526334729, 4444010786735381, 5993309905616190, 3640401138113649}, + {2860407040121293, 1177142915116463, 3145140653940871, 1733521080031482, 3186874796199337}, + {731527977617797, 464892677638406, 850380242165564, 1707297435867315, 797914062581028}, + }, + { + {4481445847621310, 4194775426039896, 4717484155432068, 3203129625283069, 3774741254649070}, + {2200385186612512, 3830080434695126, 3332312936597714, 1819075993402941, 3697021137208346}, + {1808087344592199, 1917986815291197, 1736625562156353, 1691009053422774, 699554104203468}, + }, + { + {5048623459093582, 3345582890430421, 3965077987869649, 4640623371578895, 4912032720993151}, + {2302864341793270, 2363316925891845, 1559429527589511, 2124275860379685, 1685170275648173}, + {567087552892581, 1562927351866469, 299640978917608, 868196882482839, 81953139898216}, + }, + { + {4967323480101032, 4012272011745302, 3862894427518599, 4308636686245327, 5217499651112315}, + {1252667495912574, 926763760798846, 829943705996489, 1227324880932263, 964621170655609}, + {955876088496614, 2071382636271538, 1339562676294470, 1915921082315197, 857114822306108}, + }, + { + {3257326910061677, 5127439013196396, 4310630254544639, 4686443315427179, 4724730249377907}, + {2936128018106963, 1695470026893168, 2973127512604355, 1666309508011309, 2226049713730899}, + {1512722216346670, 113316334999619, 1851114541854723, 1700671412068281, 1858477808352196}, + }, + { + {5998097796107191, 4771418173207581, 4274779313964863, 6374384720876343, 3691059377431806}, + {1747059722842985, 1151985779666741, 2579873034214805, 2259025270175461, 1104167228907676}, + {1120011747324768, 1881628887342023, 2214290331844435, 486356580332714, 2162135539567334}, + }, + { + {5415017211564966, 4131956504736867, 4606393482137328, 4786286211324892, 4752001899018321}, + {3516707084985218, 3646421870194647, 1944208348735794, 2748388507091938, 2933933255585587}, + {939102610898658, 657762889309704, 1555084457788919, 1150153333777593, 1006706590082496}, + }, + { + {3543688234603472, 4194712450230855, 3880927772745797, 3426761679103243, 3127058186392728}, + {3187981953742084, 2855163365535635, 2396035850573347, 3426339364174055, 2041647909167010}, + {463905214510220, 1910840871806134, 115888611524937, 1537009142155618, 880221457903699}, + }, + { + {5589672840238728, 3432294293459350, 5387677215955058, 6169144676112659, 5379715338757042}, + {1784370156336156, 2235499907922716, 2025309612181078, 2188885065316605, 3233083367725482}, + {417210119430620, 1641361429213146, 1508617462812435, 1831075688628217, 1813350286884393}, + }, + { + {3676762525127118, 5016274613231870, 5279594930346407, 2746860593795830, 4531082394479975}, + {2603791557859206, 567981304762832, 3180006238725203, 2675077654404820, 258215834034235}, + {1643563927005454, 1423516315292419, 46523883479803, 1501791298376850, 1157127033006661}, + }, + }, + { + { + {4640633429716646, 4436352535262760, 5042663907988027, 4328339913162644, 4318409930240684}, + {1650059244213924, 1415687339027798, 3751941600642035, 2204874486713656, 3546077689782506}, + {1247200432261975, 265507035905438, 1620404126253617, 117362009527087, 1746435297969059}, + }, + { + {5340736267872142, 3295470429174750, 4407135163398927, 3488366482378904, 3746520348111790}, + {1068629703061668, 3236562504536698, 3481748917474479, 2110232841828030, 1092532788851750}, + {1306097687903586, 1372543655508231, 1658076721821581, 2200003583698537, 780636112677937}, + }, + { + {5226077937175337, 5692428823576533, 5689014150777050, 3908825240466348, 6345259720261058}, + {3066336104509029, 2314860930152579, 3056640011863338, 2260092480216528, 2073254466378784}, + {479894784370716, 1925880613677947, 2183487522494884, 625094381313712, 854845126872293}, + }, + { + {5197618157762598, 4433464121961190, 3260681654961795, 4120975634792281, 5835262176061498}, + {817093479351430, 4088761935787052, 3171716785010059, 2728541872107727, 1520644895959802}, + {1207982418891449, 1577854720087533, 2009037012572541, 1476807775109585, 764858983320152}, + }, + { + {4643752207568541, 4177425086748798, 2717351689863297, 4063904331524798, 6079476938692958}, + {292623621294171, 1087309087737456, 2573455597713993, 859400146466928, 2565065720265056}, + {1960514462005953, 1030291725190195, 357278058611993, 503261352420903, 409647200988996}, + }, + { + {4137436424426920, 3760583205467834, 5814704535202459, 3679343367155289, 3544651677301793}, + {1640564024541742, 3450104780081118, 1372955845260037, 2487953912194947, 1964015174577549}, + {1832104727099167, 996069167520846, 1100729754186688, 1771584084767106, 2117261745027080}, + }, + { + {4431020636065029, 5503695293870154, 4553592025467096, 4019460577334316, 4832018945114183}, + {1199122074926019, 2522059134402784, 397875262207322, 3119865606750668, 1432109594857765}, + {1875633950147766, 1109790076082089, 897660652998513, 1428078707156757, 908826481148722}, + }, + { + {5054013235620828, 5378852271051704, 4293253473160895, 4319499063151422, 5340758119594162}, + {2634018106321626, 2505108247629684, 3126341578772617, 2016974307899050, 1468999769476078}, + {2013224690617610, 881120726963113, 2087874148443678, 930634847072563, 2100154549645766}, + }, + { + {4096027168378681, 4674912073837464, 4651610619813038, 4659750027669693, 4079639323873143}, + {651560684224625, 2530373654189494, 3125510882371828, 1936741789282769, 4026872663838631}, + {1094258812694036, 1294242138409324, 1090035173467081, 1763568378228799, 1431407300427851}, + }, + { + {5901866474833548, 4953841416438018, 5227230958845012, 5669922347444024, 5683271169352586}, + {2172262341405882, 2561868572136046, 3688730950551326, 2503867014426524, 2213093161812464}, + {1951192547947024, 851119993124706, 1847432304733109, 1277897613708864, 601543383482271}, + }, + { + {3631710539670242, 3768950590313261, 5303952111138864, 5325131792733564, 5315344346171139}, + {3338513542876810, 3006290156706597, 1350992246942434, 903865514364164, 3147437075515383}, + {2230520732543357, 1272781658952307, 896500518331525, 1553870550296913, 1174834176365255}, + }, + { + {4212629881454302, 3511449460350501, 3310343538794185, 3281266357642722, 4487974828971768}, + {2969785173831624, 1505727885325259, 2813024274382127, 1442092766966006, 2775912811267378}, + {1226820412291019, 1429525834475644, 2118443840955994, 611048578379551, 1393279248359119}, + }, + { + {2549845597186375, 3623100753864553, 3499310120841001, 3967554171599715, 5734430215634972}, + {1995271425552231, 3083791126213951, 3279752729240055, 1320836376731637, 2619696559790542}, + {209938911194598, 1168941097549542, 1505719700014288, 296602403362327, 585510095036421}, + }, + { + {4596693410811983, 3239555606447835, 5319792910601399, 5807716310972140, 4978776737081211}, + {4298118886570999, 2595714642338047, 2582204981507639, 2283950348816052, 2880808000087105}, + {1625024000487589, 1577328585741835, 1748162688303583, 1508135442094103, 494130659185316}, + }, + { + {5133202328939711, 5161068400634691, 4982689133170151, 5479854286391464, 3974357722065660}, + {2759508860286693, 3544879646603215, 2393702940511177, 1786833813469860, 2879003887330732}, + {374825657994223, 798281160160783, 1037106323566812, 1491213365794340, 786385610113834}, + }, + }, + } + + GE_BASEPOINT_TABLE := &Gen_Multiply_Table_edwards25519_lo[0] +} diff --git a/core/crypto/_edwards25519/tools/edwards_gen_tables.odin b/core/crypto/_edwards25519/tools/edwards_gen_tables.odin new file mode 100644 index 000000000..d05534d9d --- /dev/null +++ b/core/crypto/_edwards25519/tools/edwards_gen_tables.odin @@ -0,0 +1,134 @@ +package weistrass_tools + +import ed "core:crypto/_edwards25519" +import field "core:crypto/_fiat/field_curve25519" +import scalar "core:crypto/_fiat/field_scalar25519" +import "core:encoding/endian" +import "core:fmt" +import path "core:path/filepath" +import "core:os" +import "core:strings" + +// Yes this leaks memory, fite me IRL. + +GENERATED :: `/* + ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ DO NOT EDIT ------ GENERATED ------ +*/` + +@(private, rodata) +FE_D2 := field.Tight_Field_Element { + 1859910466990425, + 932731440258426, + 1072319116312658, + 1815898335770999, + 633789495995903, +} + +main :: proc() { + Basepoint_Addend_Group_Element :: struct { + y2_minus_x2: field.Loose_Field_Element, // t1 + y2_plus_x2: field.Loose_Field_Element, // t3 + k_times_t2: field.Tight_Field_Element, // t4 + } + Basepoint_Multiply_Table :: [15]Basepoint_Addend_Group_Element + + ge_bp_addend_set := proc(ge_a: ^Basepoint_Addend_Group_Element, ge: ^ed.Group_Element) { + // We rescale so Z == 1, so T = X * Y + x_, y_, z_inv: field.Tight_Field_Element + field.fe_carry_inv(&z_inv, field.fe_relax_cast(&ge.z)) + field.fe_carry_mul(&x_, field.fe_relax_cast(&ge.x), field.fe_relax_cast(&z_inv)) + field.fe_carry_mul(&y_, field.fe_relax_cast(&ge.y), field.fe_relax_cast(&z_inv)) + + field.fe_sub(&ge_a.y2_minus_x2, &y_, &x_) + field.fe_add(&ge_a.y2_plus_x2, &y_, &x_) + field.fe_carry_mul(&ge_a.k_times_t2, field.fe_relax_cast(&x_), field.fe_relax_cast(&y_)) + field.fe_carry_mul(&ge_a.k_times_t2, field.fe_relax_cast(&ge_a.k_times_t2), field.fe_relax_cast(&FE_D2)) + } + + Multiply_Table_hi: [32]Basepoint_Multiply_Table + Multiply_Table_lo: [32]Basepoint_Multiply_Table + + sc_set_unchecked := proc(sc: ^scalar.Non_Montgomery_Domain_Field_Element, b: []byte) { + sc[0] = endian.unchecked_get_u64le(b[0:]) + sc[1] = endian.unchecked_get_u64le(b[8:]) + sc[2] = endian.unchecked_get_u64le(b[16:]) + sc[3] = endian.unchecked_get_u64le(b[24:]) + } + + g, p: ed.Group_Element + ed.ge_generator(&g) + + sc: scalar.Non_Montgomery_Domain_Field_Element + + // Precompute ([1,15] << n) * G multiples of G, LSB->MSB + for i in 0..<32 { + b: [32]byte + for j in 1..<16 { + b[i] = u8(j) + sc_set_unchecked(&sc, b[:]) + ed.ge_scalarmult_raw(&p, &g, &sc, true) + ge_bp_addend_set(&Multiply_Table_lo[i][j-1], &p) + + b[i] = u8(j) << 4 + sc_set_unchecked(&sc, b[:]) + ed.ge_scalarmult_raw(&p, &g, &sc, true) + ge_bp_addend_set(&Multiply_Table_hi[i][j-1], &p) + + b[i] = 0 + } + } + + fn := path.join({ODIN_ROOT, "core", "crypto", "_edwards25519", "edwards25519_table.odin"}) + bld: strings.Builder + w := strings.to_writer(&bld) + + fmt.wprintln(w, "package _edwards25519") + fmt.wprintln(w, "") + fmt.wprintln(w, GENERATED) + fmt.wprintln(w, "") + fmt.wprintln(w, "import \"core:crypto\"") + fmt.wprintln(w, "") + fmt.wprintln(w, "when crypto.COMPACT_IMPLS == false {") + + fmt.wprintln(w, "\t@(private,rodata)") + fmt.wprintln(w, "\tGen_Multiply_Table_edwards25519_lo := [32]Basepoint_Multiply_Table {") + for &v in Multiply_Table_lo { + fmt.wprintln(w, "\t\t{") + for &ap in v { + fmt.wprintln(w, "\t\t\t{") + + t1, t3, t4 := &ap.y2_minus_x2, &ap.y2_plus_x2, &ap.k_times_t2 + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d},\n", t1[0], t1[1], t1[2], t1[3], t1[4]) + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d},\n", t3[0], t3[1], t3[2], t3[3], t3[4]) + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d},\n", t4[0], t4[1], t4[2], t4[3], t4[4]) + + fmt.wprintln(w, "\t\t\t},") + } + fmt.wprintln(w, "\t\t},") + } + fmt.wprintln(w, "\t}\n") + + fmt.wprintln(w, "\t@(private,rodata)") + fmt.wprintln(w, "\tGen_Multiply_Table_edwards25519_hi := [32]Basepoint_Multiply_Table {") + for &v in Multiply_Table_hi { + fmt.wprintln(w, "\t\t{") + for &ap in v { + fmt.wprintln(w, "\t\t\t{") + + t1, t3, t4 := &ap.y2_minus_x2, &ap.y2_plus_x2, &ap.k_times_t2 + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d},\n", t1[0], t1[1], t1[2], t1[3], t1[4]) + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d},\n", t3[0], t3[1], t3[2], t3[3], t3[4]) + fmt.wprintf(w, "\t\t\t\t{{%d, %d, %d, %d, %d},\n", t4[0], t4[1], t4[2], t4[3], t4[4]) + + fmt.wprintln(w, "\t\t\t},") + } + fmt.wprintln(w, "\t\t},") + } + fmt.wprintln(w, "\t}\n") + + fmt.wprintln(w, "\tGE_BASEPOINT_TABLE := &Gen_Multiply_Table_edwards25519_lo[0]") + + fmt.wprintln(w, "}") + + _ = os.write_entire_file(fn, transmute([]byte)(strings.to_string(bld))) +} diff --git a/core/crypto/x25519/x25519.odin b/core/crypto/x25519/x25519.odin index e25d1831f..2d7aa4153 100644 --- a/core/crypto/x25519/x25519.odin +++ b/core/crypto/x25519/x25519.odin @@ -6,6 +6,8 @@ See: */ package x25519 +import "core:crypto" +import ed "core:crypto/_edwards25519" import field "core:crypto/_fiat/field_curve25519" import "core:mem" @@ -14,8 +16,10 @@ SCALAR_SIZE :: 32 // POINT_SIZE is the size of a X25519 point (public key/shared secret) in bytes. POINT_SIZE :: 32 -@(private, rodata) -_BASE_POINT: [32]byte = {9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +when crypto.COMPACT_IMPLS == true { + @(private,rodata) + _BASE_POINT: [32]byte = {9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +} @(private) _scalar_bit :: #force_inline proc "contextless" (s: ^[32]byte, i: int) -> u8 { @@ -111,19 +115,44 @@ scalarmult :: proc(dst, scalar, point: []byte) { e[31] &= 127 e[31] |= 64 - p: [32]byte = --- - copy_slice(p[:], point) - - d: [32]byte = --- - _scalarmult(&d, &e, &p) - copy_slice(dst, d[:]) + p := (^[32]byte)(raw_data(point)) + d := (^[32]byte)(raw_data(dst)) + _scalarmult(d, &e, p) mem.zero_explicit(&e, size_of(e)) - mem.zero_explicit(&d, size_of(d)) } // scalarmult_basepoint "multiplies" the provided scalar with the X25519 // base point and writes the resulting point to dst. scalarmult_basepoint :: proc(dst, scalar: []byte) { - scalarmult(dst, scalar, _BASE_POINT[:]) + when crypto.COMPACT_IMPLS == true { + scalarmult(dst, scalar, _BASE_POINT[:]) + } else { + ensure(len(scalar) == SCALAR_SIZE, "crypto/x25519: invalid scalar size") + ensure(len(dst) == POINT_SIZE, "crypto/x25519: invalid destination point size") + + sc: ed.Scalar = --- + ed.sc_set_bytes_rfc8032(&sc, scalar) + + ge: ed.Group_Element = --- + ed.ge_scalarmult_basepoint(&ge, &sc) + + // u = (y + z)/(z - y) + y_plus_z: field.Loose_Field_Element = --- + z_minus_y: field.Loose_Field_Element = --- + u: field.Tight_Field_Element = --- + + field.fe_add(&y_plus_z, &ge.y, &ge.z) + field.fe_sub(&z_minus_y, &ge.z, &ge.y) + field.fe_carry_inv(&u, &z_minus_y) + field.fe_carry_mul(&u, &y_plus_z, field.fe_relax_cast(&u)) + + dst_ := (^[32]byte)(raw_data(dst)) + field.fe_to_bytes(dst_, &u) + + field.fe_clear_vec([]^field.Loose_Field_Element{&y_plus_z, &z_minus_y}) + field.fe_clear(&u) + ed.sc_clear(&sc) + ed.ge_clear(&ge) + } } From d438f27efb3f74c1baf2125c480538ba739c9e5d Mon Sep 17 00:00:00 2001 From: Yawning Angel Date: Wed, 28 Jan 2026 23:04:38 +0900 Subject: [PATCH 204/212] core/crypto/_chacha20: Use the precomputation trick for ref Might as well bring this in sync with the runtime chacha8 version of the code since this is faster. --- core/crypto/_chacha20/ref/chacha20_ref.odin | 287 ++++---------------- 1 file changed, 60 insertions(+), 227 deletions(-) diff --git a/core/crypto/_chacha20/ref/chacha20_ref.odin b/core/crypto/_chacha20/ref/chacha20_ref.odin index c111c1c76..c4e6bca98 100644 --- a/core/crypto/_chacha20/ref/chacha20_ref.odin +++ b/core/crypto/_chacha20/ref/chacha20_ref.odin @@ -4,133 +4,68 @@ import "core:crypto/_chacha20" import "core:encoding/endian" import "core:math/bits" +// At least with LLVM21 force_inline produces identical perf to +// manual inlining, yay. +@(private) +quarter_round :: #force_inline proc "contextless" (a, b, c, d: u32) -> (u32, u32, u32, u32) { + a, b, c, d := a, b, c, d + + a += b + d ~= a + d = bits.rotate_left32(d, 16) + + c += d + b ~= c + b = bits.rotate_left32(b, 12) + + a += b + d ~= a + d = bits.rotate_left32(d, 8) + + c += d + b ~= c + b = bits.rotate_left32(b, 7) + + return a, b, c, d +} + stream_blocks :: proc(ctx: ^_chacha20.Context, dst, src: []byte, nr_blocks: int) { // Enforce the maximum consumed keystream per IV. _chacha20.check_counter_limit(ctx, nr_blocks) dst, src := dst, src x := &ctx._s + + + // Filippo Valsorda made an observation that only one of the column + // round depends on the counter (s12), so it is worth precomputing + // and reusing across multiple blocks. As far as I know, only Go's + // chacha implementation does this. + + p1, p5, p9, p13 := quarter_round(_chacha20.SIGMA_1, x[5], x[9], x[13]) + p2, p6, p10, p14 := quarter_round(_chacha20.SIGMA_2, x[6], x[10], x[14]) + p3, p7, p11, p15 := quarter_round(_chacha20.SIGMA_3, x[7], x[11], x[15]) + for n := 0; n < nr_blocks; n = n + 1 { - x0, x1, x2, x3 := - _chacha20.SIGMA_0, _chacha20.SIGMA_1, _chacha20.SIGMA_2, _chacha20.SIGMA_3 - x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 := - x[4], x[5], x[6], x[7], x[8], x[9], x[10], x[11], x[12], x[13], x[14], x[15] + // First column round that depends on the counter + p0, p4, p8, p12 := quarter_round(_chacha20.SIGMA_0, x[4], x[8], x[12]) - for i := _chacha20.ROUNDS; i > 0; i = i - 2 { - // Even when forcing inlining manually inlining all of - // these is decently faster. + // First diagonal round + x0, x5, x10, x15 := quarter_round(p0, p5, p10, p15) + x1, x6, x11, x12 := quarter_round(p1, p6, p11, p12) + x2, x7, x8, x13 := quarter_round(p2, p7, p8, p13) + x3, x4, x9, x14 := quarter_round(p3, p4, p9, p14) - // quarterround(x, 0, 4, 8, 12) - x0 += x4 - x12 ~= x0 - x12 = bits.rotate_left32(x12, 16) - x8 += x12 - x4 ~= x8 - x4 = bits.rotate_left32(x4, 12) - x0 += x4 - x12 ~= x0 - x12 = bits.rotate_left32(x12, 8) - x8 += x12 - x4 ~= x8 - x4 = bits.rotate_left32(x4, 7) + for i := _chacha20.ROUNDS - 2; i > 0; i = i - 2 { + x0, x4, x8, x12 = quarter_round(x0, x4, x8, x12) + x1, x5, x9, x13 = quarter_round(x1, x5, x9, x13) + x2, x6, x10, x14 = quarter_round(x2, x6, x10, x14) + x3, x7, x11, x15 = quarter_round(x3, x7, x11, x15) - // quarterround(x, 1, 5, 9, 13) - x1 += x5 - x13 ~= x1 - x13 = bits.rotate_left32(x13, 16) - x9 += x13 - x5 ~= x9 - x5 = bits.rotate_left32(x5, 12) - x1 += x5 - x13 ~= x1 - x13 = bits.rotate_left32(x13, 8) - x9 += x13 - x5 ~= x9 - x5 = bits.rotate_left32(x5, 7) - - // quarterround(x, 2, 6, 10, 14) - x2 += x6 - x14 ~= x2 - x14 = bits.rotate_left32(x14, 16) - x10 += x14 - x6 ~= x10 - x6 = bits.rotate_left32(x6, 12) - x2 += x6 - x14 ~= x2 - x14 = bits.rotate_left32(x14, 8) - x10 += x14 - x6 ~= x10 - x6 = bits.rotate_left32(x6, 7) - - // quarterround(x, 3, 7, 11, 15) - x3 += x7 - x15 ~= x3 - x15 = bits.rotate_left32(x15, 16) - x11 += x15 - x7 ~= x11 - x7 = bits.rotate_left32(x7, 12) - x3 += x7 - x15 ~= x3 - x15 = bits.rotate_left32(x15, 8) - x11 += x15 - x7 ~= x11 - x7 = bits.rotate_left32(x7, 7) - - // quarterround(x, 0, 5, 10, 15) - x0 += x5 - x15 ~= x0 - x15 = bits.rotate_left32(x15, 16) - x10 += x15 - x5 ~= x10 - x5 = bits.rotate_left32(x5, 12) - x0 += x5 - x15 ~= x0 - x15 = bits.rotate_left32(x15, 8) - x10 += x15 - x5 ~= x10 - x5 = bits.rotate_left32(x5, 7) - - // quarterround(x, 1, 6, 11, 12) - x1 += x6 - x12 ~= x1 - x12 = bits.rotate_left32(x12, 16) - x11 += x12 - x6 ~= x11 - x6 = bits.rotate_left32(x6, 12) - x1 += x6 - x12 ~= x1 - x12 = bits.rotate_left32(x12, 8) - x11 += x12 - x6 ~= x11 - x6 = bits.rotate_left32(x6, 7) - - // quarterround(x, 2, 7, 8, 13) - x2 += x7 - x13 ~= x2 - x13 = bits.rotate_left32(x13, 16) - x8 += x13 - x7 ~= x8 - x7 = bits.rotate_left32(x7, 12) - x2 += x7 - x13 ~= x2 - x13 = bits.rotate_left32(x13, 8) - x8 += x13 - x7 ~= x8 - x7 = bits.rotate_left32(x7, 7) - - // quarterround(x, 3, 4, 9, 14) - x3 += x4 - x14 ~= x3 - x14 = bits.rotate_left32(x14, 16) - x9 += x14 - x4 ~= x9 - x4 = bits.rotate_left32(x4, 12) - x3 += x4 - x14 ~= x3 - x14 = bits.rotate_left32(x14, 8) - x9 += x14 - x4 ~= x9 - x4 = bits.rotate_left32(x4, 7) + x0, x5, x10, x15 = quarter_round(x0, x5, x10, x15) + x1, x6, x11, x12 = quarter_round(x1, x6, x11, x12) + x2, x7, x8, x13 = quarter_round(x2, x7, x8, x13) + x3, x4, x9, x14 = quarter_round(x3, x4, x9, x14) } x0 += _chacha20.SIGMA_0 @@ -236,117 +171,15 @@ hchacha20 :: proc "contextless" (dst, key, iv: []byte) { x15 := endian.unchecked_get_u32le(iv[12:16]) for i := _chacha20.ROUNDS; i > 0; i = i - 2 { - // quarterround(x, 0, 4, 8, 12) - x0 += x4 - x12 ~= x0 - x12 = bits.rotate_left32(x12, 16) - x8 += x12 - x4 ~= x8 - x4 = bits.rotate_left32(x4, 12) - x0 += x4 - x12 ~= x0 - x12 = bits.rotate_left32(x12, 8) - x8 += x12 - x4 ~= x8 - x4 = bits.rotate_left32(x4, 7) + x0, x4, x8, x12 = quarter_round(x0, x4, x8, x12) + x1, x5, x9, x13 = quarter_round(x1, x5, x9, x13) + x2, x6, x10, x14 = quarter_round(x2, x6, x10, x14) + x3, x7, x11, x15 = quarter_round(x3, x7, x11, x15) - // quarterround(x, 1, 5, 9, 13) - x1 += x5 - x13 ~= x1 - x13 = bits.rotate_left32(x13, 16) - x9 += x13 - x5 ~= x9 - x5 = bits.rotate_left32(x5, 12) - x1 += x5 - x13 ~= x1 - x13 = bits.rotate_left32(x13, 8) - x9 += x13 - x5 ~= x9 - x5 = bits.rotate_left32(x5, 7) - - // quarterround(x, 2, 6, 10, 14) - x2 += x6 - x14 ~= x2 - x14 = bits.rotate_left32(x14, 16) - x10 += x14 - x6 ~= x10 - x6 = bits.rotate_left32(x6, 12) - x2 += x6 - x14 ~= x2 - x14 = bits.rotate_left32(x14, 8) - x10 += x14 - x6 ~= x10 - x6 = bits.rotate_left32(x6, 7) - - // quarterround(x, 3, 7, 11, 15) - x3 += x7 - x15 ~= x3 - x15 = bits.rotate_left32(x15, 16) - x11 += x15 - x7 ~= x11 - x7 = bits.rotate_left32(x7, 12) - x3 += x7 - x15 ~= x3 - x15 = bits.rotate_left32(x15, 8) - x11 += x15 - x7 ~= x11 - x7 = bits.rotate_left32(x7, 7) - - // quarterround(x, 0, 5, 10, 15) - x0 += x5 - x15 ~= x0 - x15 = bits.rotate_left32(x15, 16) - x10 += x15 - x5 ~= x10 - x5 = bits.rotate_left32(x5, 12) - x0 += x5 - x15 ~= x0 - x15 = bits.rotate_left32(x15, 8) - x10 += x15 - x5 ~= x10 - x5 = bits.rotate_left32(x5, 7) - - // quarterround(x, 1, 6, 11, 12) - x1 += x6 - x12 ~= x1 - x12 = bits.rotate_left32(x12, 16) - x11 += x12 - x6 ~= x11 - x6 = bits.rotate_left32(x6, 12) - x1 += x6 - x12 ~= x1 - x12 = bits.rotate_left32(x12, 8) - x11 += x12 - x6 ~= x11 - x6 = bits.rotate_left32(x6, 7) - - // quarterround(x, 2, 7, 8, 13) - x2 += x7 - x13 ~= x2 - x13 = bits.rotate_left32(x13, 16) - x8 += x13 - x7 ~= x8 - x7 = bits.rotate_left32(x7, 12) - x2 += x7 - x13 ~= x2 - x13 = bits.rotate_left32(x13, 8) - x8 += x13 - x7 ~= x8 - x7 = bits.rotate_left32(x7, 7) - - // quarterround(x, 3, 4, 9, 14) - x3 += x4 - x14 ~= x3 - x14 = bits.rotate_left32(x14, 16) - x9 += x14 - x4 ~= x9 - x4 = bits.rotate_left32(x4, 12) - x3 += x4 - x14 ~= x3 - x14 = bits.rotate_left32(x14, 8) - x9 += x14 - x4 ~= x9 - x4 = bits.rotate_left32(x4, 7) + x0, x5, x10, x15 = quarter_round(x0, x5, x10, x15) + x1, x6, x11, x12 = quarter_round(x1, x6, x11, x12) + x2, x7, x8, x13 = quarter_round(x2, x7, x8, x13) + x3, x4, x9, x14 = quarter_round(x3, x4, x9, x14) } endian.unchecked_put_u32le(dst[0:4], x0) From 16881e256d5512024dfc85eea2c324cc4241bd99 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 15:24:21 +0000 Subject: [PATCH 205/212] Fix absolute and volume name checks on Windows --- core/os/os2/path_windows.odin | 4 ++ core/path/filepath/path.odin | 71 ++++++++++++++++++++-------- core/path/filepath/path_windows.odin | 3 ++ 3 files changed, 58 insertions(+), 20 deletions(-) diff --git a/core/os/os2/path_windows.odin b/core/os/os2/path_windows.odin index 1225ab2ce..ce3828755 100644 --- a/core/os/os2/path_windows.odin +++ b/core/os/os2/path_windows.odin @@ -283,6 +283,10 @@ _is_absolute_path :: proc(path: string) -> bool { if _is_reserved_name(path) { return true } + if len(path) > 0 && _is_path_separator(path[0]) { + return true + } + l := _volume_name_len(path) if l == 0 { return false diff --git a/core/path/filepath/path.odin b/core/path/filepath/path.odin index 14a9181c3..d5ba76342 100644 --- a/core/path/filepath/path.odin +++ b/core/path/filepath/path.odin @@ -49,35 +49,66 @@ volume_name_len :: proc(path: string) -> int { if len(path) < 2 { return 0 } - c := path[0] + if path[1] == ':' { - switch c { + switch path[0] { case 'a'..='z', 'A'..='Z': return 2 } } - // URL: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx - if l := len(path); l >= 5 && is_slash(path[0]) && is_slash(path[1]) && - !is_slash(path[2]) && path[2] != '.' { - for n := 3; n < l-1; n += 1 { - if is_slash(path[n]) { - n += 1 - if !is_slash(path[n]) { - if path[n] == '.' { - break - } - } - for ; n < l; n += 1 { - if is_slash(path[n]) { - break - } - } - return n + /* + See: URL: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247(v=vs.85).aspx + Further allowed paths can be of the form of: + - \\server\share or \\server\share\more\path + - \\?\C:\... + - \\.\PhysicalDriveX + */ + // Any remaining kind of path has to start with two slashes. + if !is_separator(path[0]) || !is_separator(path[1]) { + return 0 + } + + // Device path. The volume name is the whole string + if len(path) >= 5 && path[2] == '.' && is_separator(path[3]) { + return len(path) + } + + // We're a UNC share `\\host\share`, file namespace `\\?\C:` or UNC in file namespace `\\?\\host\share` + prefix := 2 + + // File namespace. + if len(path) >= 5 && path[2] == '?' && is_separator(path[3]) { + if is_separator(path[4]) { + // `\\?\\` UNC path in file namespace + prefix = 5 + } + + if len(path) >= 6 && path[5] == ':' { + switch path[4] { + case 'a'..='z', 'A'..='Z': + return 6 + case: + return 0 } - break } } + + // UNC path, minimum version of the volume is `\\h\s` for host, share. + // Can also contain an IP address in the host position. + slash_count := 0 + for i in prefix.. 0 { + slash_count += 1 + + if slash_count == 2 { + return i + } + } + } + + return len(path) } return 0 } diff --git a/core/path/filepath/path_windows.odin b/core/path/filepath/path_windows.odin index b3f4eee9e..d7549a42c 100644 --- a/core/path/filepath/path_windows.odin +++ b/core/path/filepath/path_windows.odin @@ -36,6 +36,9 @@ is_abs :: proc(path: string) -> bool { if is_reserved_name(path) { return true } + if len(path) > 0 && is_slash(path[0]) { + return true + } l := volume_name_len(path) if l == 0 { return false From 37c2f6882419c8811d9fc9238873668b82a40a04 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 15:30:23 +0000 Subject: [PATCH 206/212] Allow #unroll for arrays of fixed length which are not constants --- src/check_stmt.cpp | 4 +++- src/llvm_backend_stmt.cpp | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp index 835f0162a..2dc621a84 100644 --- a/src/check_stmt.cpp +++ b/src/check_stmt.cpp @@ -1027,7 +1027,9 @@ gb_internal void check_unroll_range_stmt(CheckerContext *ctx, Ast *node, u32 mod error(operand.expr, "Cannot iterate over '%s' of type '%s' in an '#unroll for' statement", s, t); gb_string_free(t); gb_string_free(s); - } else if (operand.mode != Addressing_Constant && unroll_count <= 0) { + } else if (operand.mode != Addressing_Constant && ( + unroll_count <= 0 && + compare_exact_values(Token_CmpEq, inline_for_depth, exact_value_i64(0)))) { error(operand.expr, "An '#unroll for' expression must be known at compile time"); } } diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index b3b5f4251..81755af2d 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -1434,12 +1434,13 @@ gb_internal void lb_build_unroll_range_stmt(lbProcedure *p, AstUnrollRangeStmt * if (unroll_count_ev.kind == ExactValue_Invalid) { - GB_ASSERT(expr->tav.mode == Addressing_Constant); Type *t = base_type(expr->tav.type); switch (t->kind) { case Type_Basic: + GB_ASSERT(expr->tav.mode == Addressing_Constant); + GB_ASSERT(is_type_string(t)); { ExactValue value = expr->tav.value; From f2b0f63b811584b2a79a47943bc1299172723d85 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Wed, 28 Jan 2026 17:26:19 +0000 Subject: [PATCH 207/212] Use clean paths to calculate volumes --- core/path/filepath/path.odin | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/path/filepath/path.odin b/core/path/filepath/path.odin index d5ba76342..dbad98fa1 100644 --- a/core/path/filepath/path.odin +++ b/core/path/filepath/path.odin @@ -399,8 +399,8 @@ rel :: proc(base_path, target_path: string, allocator := context.allocator) -> ( return strings.clone(".", allocator), .None } - base_vol := volume_name(base_path) - target_vol := volume_name(target_path) + base_vol := volume_name(base_clean) + target_vol := volume_name(target_clean) base := base_clean [len(base_vol):] target := target_clean[len(target_vol):] if base == "." { From f6322b4b31fb0a5cc343d4bae31ebc09639e3403 Mon Sep 17 00:00:00 2001 From: Shane Shrybman Date: Wed, 28 Jan 2026 14:18:30 -0500 Subject: [PATCH 208/212] Fix for vet flags. All combinations of vet flags on the command line and top of file are working --- src/parser.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/parser.cpp b/src/parser.cpp index af533d9a3..1f08eaec1 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -6383,7 +6383,7 @@ gb_internal String vet_tag_get_token(String s, String *out, bool allow_colon) { } -gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { +gb_internal u64 parse_vet_tag(Token token_for_pos, String s, u64 base_vet_flags) { String const prefix = str_lit("vet"); GB_ASSERT(string_starts_with(s, prefix)); if (build_require_space_after(s, prefix)) { @@ -6392,7 +6392,7 @@ gb_internal u64 parse_vet_tag(Token token_for_pos, String s) { } s = string_trim_whitespace(substring(s, prefix.len, s.len)); - u64 vet_flags = build_context.vet_flags; + u64 vet_flags = base_vet_flags; if (s.len == 0) { vet_flags |= VetFlag_All; @@ -6624,7 +6624,7 @@ gb_internal bool parse_file_tag(const String &lc, const Token &tok, AstFile *f) return false; } } else if (string_starts_with(lc, str_lit("vet"))) { - f->vet_flags = parse_vet_tag(tok, lc); + f->vet_flags = parse_vet_tag(tok, lc, ast_file_vet_flags(f)); f->vet_flags_set = true; } else if (string_starts_with(lc, str_lit("test"))) { if ((build_context.command_kind & Command_test) == 0) { From 4a7fb4666722b3ff45998c3bc11f03150a2fe53f Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 29 Jan 2026 09:21:31 +0000 Subject: [PATCH 209/212] Complete `is_type_simple_compare` `switch` rules --- src/types.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/types.cpp b/src/types.cpp index 911cd4448..03ff95033 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -2701,6 +2701,7 @@ gb_internal bool is_type_simple_compare(Type *t) { case Type_SoaPointer: case Type_Proc: case Type_BitSet: + case Type_BitField: return true; case Type_Matrix: @@ -2728,6 +2729,16 @@ gb_internal bool is_type_simple_compare(Type *t) { case Type_SimdVector: return is_type_simple_compare(t->SimdVector.elem); + case Type_Tuple: + if (t->Tuple.variables.count == 1) { + return is_type_simple_compare(t->Tuple.variables[0]->type); + } + break; + + case Type_Slice: + case Type_DynamicArray: + case Type_Map: + return false; } return false; From 07d814d9cf3bf2065e4122dba91817935dca7c60 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 29 Jan 2026 10:48:05 +0000 Subject: [PATCH 210/212] Add `struct #simple` to force a struct to use simple comparison if all of the fields "nearly simply comparable". --- base/runtime/core.odin | 1 + base/runtime/print.odin | 2 ++ core/odin/ast/ast.odin | 1 + core/odin/parser/parser.odin | 7 +++++++ core/reflect/types.odin | 5 +++-- src/check_expr.cpp | 6 ++++-- src/check_type.cpp | 15 +++++++++++++++ src/parser.cpp | 13 ++++++++++--- src/parser.hpp | 1 + src/types.cpp | 25 +++++++++++++++++++++++-- 10 files changed, 67 insertions(+), 9 deletions(-) diff --git a/base/runtime/core.odin b/base/runtime/core.odin index 58a0b8ad1..5a0b3766c 100644 --- a/base/runtime/core.odin +++ b/base/runtime/core.odin @@ -122,6 +122,7 @@ Type_Info_Struct_Flag :: enum u8 { raw_union = 1, all_or_none = 2, align = 3, + simple = 4, } Type_Info_Struct :: struct { diff --git a/base/runtime/print.odin b/base/runtime/print.odin index 2deb0f4b1..2cdde8152 100644 --- a/base/runtime/print.odin +++ b/base/runtime/print.odin @@ -421,6 +421,7 @@ print_type :: #force_no_inline proc "contextless" (ti: ^Type_Info) { if .packed in info.flags { print_string("#packed ") } if .raw_union in info.flags { print_string("#raw_union ") } if .all_or_none in info.flags { print_string("#all_or_none ") } + if .simple in info.flags { print_string("#simple ") } if .align in info.flags { print_string("#align(") print_u64(u64(ti.align)) @@ -835,6 +836,7 @@ write_write_type :: #force_no_inline proc "contextless" (i: ^int, buf: []byte, t if .packed in info.flags { write_string(i, buf, "#packed ") or_return } if .raw_union in info.flags { write_string(i, buf, "#raw_union ") or_return } if .all_or_none in info.flags { write_string(i, buf, "#all_or_none ") or_return } + if .simple in info.flags { write_string(i, buf, "#simple ") or_return } if .align in info.flags { write_string(i, buf, "#align(") or_return write_u64(i, buf, u64(ti.align)) or_return diff --git a/core/odin/ast/ast.odin b/core/odin/ast/ast.odin index 6755ca4d0..ec22db434 100644 --- a/core/odin/ast/ast.odin +++ b/core/odin/ast/ast.odin @@ -798,6 +798,7 @@ Struct_Type :: struct { is_raw_union: bool, is_no_copy: bool, is_all_or_none: bool, + is_simple: bool, fields: ^Field_List, name_count: int, } diff --git a/core/odin/parser/parser.odin b/core/odin/parser/parser.odin index 719cb0374..a18942e6b 100644 --- a/core/odin/parser/parser.odin +++ b/core/odin/parser/parser.odin @@ -2667,6 +2667,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { is_raw_union: bool is_no_copy: bool is_all_or_none: bool + is_simple: bool fields: ^ast.Field_List name_count: int @@ -2695,6 +2696,11 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { error(p, tag.pos, "duplicate struct tag '#%s'", tag.text) } is_all_or_none = true + case "simple": + if is_simple { + error(p, tag.pos, "duplicate struct tag '#%s'", tag.text) + } + is_simple = true case "align": if align != nil { error(p, tag.pos, "duplicate struct tag '#%s'", tag.text) @@ -2769,6 +2775,7 @@ parse_operand :: proc(p: ^Parser, lhs: bool) -> ^ast.Expr { st.is_raw_union = is_raw_union st.is_no_copy = is_no_copy st.is_all_or_none = is_all_or_none + st.is_simple = is_simple st.fields = fields st.name_count = name_count st.where_token = where_token diff --git a/core/reflect/types.odin b/core/reflect/types.odin index d6d7011d1..385edb19b 100644 --- a/core/reflect/types.odin +++ b/core/reflect/types.odin @@ -696,9 +696,10 @@ write_type_writer :: #force_no_inline proc(w: io.Writer, ti: ^Type_Info, n_writt } io.write_string(w, "struct ", &n) or_return - if .packed in info.flags { io.write_string(w, "#packed ", &n) or_return } - if .raw_union in info.flags { io.write_string(w, "#raw_union ", &n) or_return } + if .packed in info.flags { io.write_string(w, "#packed ", &n) or_return } + if .raw_union in info.flags { io.write_string(w, "#raw_union ", &n) or_return } if .all_or_none in info.flags { io.write_string(w, "#all_or_none ", &n) or_return } + if .simple in info.flags { io.write_string(w, "#simple ", &n) or_return } if .align in info.flags { io.write_string(w, "#align(", &n) or_return io.write_i64(w, i64(ti.align), 10, &n) or_return diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 46455aacf..36b4f6ec6 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -12692,8 +12692,10 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan str = write_expr_to_string(str, st->polymorphic_params, shorthand); str = gb_string_appendc(str, ") "); } - if (st->is_packed) str = gb_string_appendc(str, "#packed "); - if (st->is_raw_union) str = gb_string_appendc(str, "#raw_union "); + if (st->is_packed) str = gb_string_appendc(str, "#packed "); + if (st->is_raw_union) str = gb_string_appendc(str, "#raw_union "); + if (st->is_all_or_none) str = gb_string_appendc(str, "#all_or_none "); + if (st->is_simple) str = gb_string_appendc(str, "#simple "); if (st->align) { str = gb_string_appendc(str, "#align "); str = write_expr_to_string(str, st->align, shorthand); diff --git a/src/check_type.cpp b/src/check_type.cpp index 4b8f7b6ac..41c5f48d1 100644 --- a/src/check_type.cpp +++ b/src/check_type.cpp @@ -679,6 +679,21 @@ gb_internal void check_struct_type(CheckerContext *ctx, Type *struct_type, Ast * gb_unused(where_clause_ok); } check_struct_fields(ctx, node, &struct_type->Struct.fields, &struct_type->Struct.tags, st->fields, min_field_count, struct_type, context); + + if (st->is_simple) { + bool success = true; + for (Entity *f : struct_type->Struct.fields) { + if (!is_type_nearly_simple_compare(f->type)) { + gbString s = type_to_string(f->type); + error(f->token, "'struct #simple' requires all fields to be at least 'nearly simple compare', got %s", s); + gb_string_free(s); + } + } + if (success) { + struct_type->Struct.is_simple = true; + } + } + wait_signal_set(&struct_type->Struct.fields_wait_signal); } diff --git a/src/parser.cpp b/src/parser.cpp index af533d9a3..2eb559e06 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -1230,7 +1230,7 @@ gb_internal Ast *ast_dynamic_array_type(AstFile *f, Token token, Ast *elem) { } gb_internal Ast *ast_struct_type(AstFile *f, Token token, Slice fields, isize field_count, - Ast *polymorphic_params, bool is_packed, bool is_raw_union, bool is_all_or_none, + Ast *polymorphic_params, bool is_packed, bool is_raw_union, bool is_all_or_none, bool is_simple, Ast *align, Ast *min_field_align, Ast *max_field_align, Token where_token, Array const &where_clauses) { Ast *result = alloc_ast_node(f, Ast_StructType); @@ -1241,6 +1241,7 @@ gb_internal Ast *ast_struct_type(AstFile *f, Token token, Slice fields, i result->StructType.is_packed = is_packed; result->StructType.is_raw_union = is_raw_union; result->StructType.is_all_or_none = is_all_or_none; + result->StructType.is_simple = is_simple; result->StructType.align = align; result->StructType.min_field_align = min_field_align; result->StructType.max_field_align = max_field_align; @@ -2788,6 +2789,7 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { bool is_packed = false; bool is_all_or_none = false; bool is_raw_union = false; + bool is_simple = false; Ast *align = nullptr; Ast *min_field_align = nullptr; Ast *max_field_align = nullptr; @@ -2869,11 +2871,16 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { error_line("\tSuggestion: #max_field_align(%s)", s); gb_string_free(s); } - }else if (tag.string == "raw_union") { + } else if (tag.string == "raw_union") { if (is_raw_union) { syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string)); } is_raw_union = true; + } else if (tag.string == "simple") { + if (is_simple) { + syntax_error(tag, "Duplicate struct tag '#%.*s'", LIT(tag.string)); + } + is_simple = true; } else { syntax_error(tag, "Invalid struct tag '#%.*s'", LIT(tag.string)); } @@ -2919,7 +2926,7 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { parser_check_polymorphic_record_parameters(f, polymorphic_params); return ast_struct_type(f, token, decls, name_count, - polymorphic_params, is_packed, is_raw_union, is_all_or_none, + polymorphic_params, is_packed, is_raw_union, is_all_or_none, is_simple, align, min_field_align, max_field_align, where_token, where_clauses); } break; diff --git a/src/parser.hpp b/src/parser.hpp index 011330438..39f56ffae 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -780,6 +780,7 @@ AST_KIND(_TypeBegin, "", bool) \ bool is_raw_union; \ bool is_no_copy; \ bool is_all_or_none; \ + bool is_simple; \ }) \ AST_KIND(UnionType, "union type", struct { \ Scope *scope; \ diff --git a/src/types.cpp b/src/types.cpp index 03ff95033..a7f2bfda2 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -163,6 +163,7 @@ struct TypeStruct { bool is_packed : 1; bool is_raw_union : 1; bool is_all_or_none : 1; + bool is_simple : 1; bool is_poly_specialized : 1; std::atomic are_offsets_being_processed; @@ -2708,6 +2709,9 @@ gb_internal bool is_type_simple_compare(Type *t) { return is_type_simple_compare(t->Matrix.elem); case Type_Struct: + if (t->Struct.is_simple) { + return true; + } for_array(i, t->Struct.fields) { Entity *f = t->Struct.fields[i]; if (!is_type_simple_compare(f->type)) { @@ -2768,12 +2772,16 @@ gb_internal bool is_type_nearly_simple_compare(Type *t) { case Type_SoaPointer: case Type_Proc: case Type_BitSet: + case Type_BitField: return true; case Type_Matrix: return is_type_nearly_simple_compare(t->Matrix.elem); case Type_Struct: + if (t->Struct.is_simple) { + return true; + } for_array(i, t->Struct.fields) { Entity *f = t->Struct.fields[i]; if (!is_type_nearly_simple_compare(f->type)) { @@ -2795,6 +2803,17 @@ gb_internal bool is_type_nearly_simple_compare(Type *t) { case Type_SimdVector: return is_type_nearly_simple_compare(t->SimdVector.elem); + case Type_Tuple: + if (t->Tuple.variables.count == 1) { + return is_type_nearly_simple_compare(t->Tuple.variables[0]->type); + } + break; + + case Type_Slice: + case Type_DynamicArray: + case Type_Map: + return false; + } return false; @@ -5110,9 +5129,11 @@ gb_internal gbString write_type_to_string(gbString str, Type *type, bool shortha str = gb_string_appendc(str, ")"); } - if (type->Struct.is_packed) str = gb_string_appendc(str, " #packed"); - if (type->Struct.is_raw_union) str = gb_string_appendc(str, " #raw_union"); + if (type->Struct.is_packed) str = gb_string_appendc(str, " #packed"); + if (type->Struct.is_raw_union) str = gb_string_appendc(str, " #raw_union"); if (type->Struct.custom_align != 0) str = gb_string_append_fmt(str, " #align %d", cast(int)type->Struct.custom_align); + if (type->Struct.is_all_or_none) str = gb_string_appendc(str, " #all_or_none"); + if (type->Struct.is_simple) str = gb_string_appendc(str, " #simple"); str = gb_string_appendc(str, " {"); From 67541434f41de1eaeaa99cda0a0e3d0992869081 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 29 Jan 2026 11:58:37 +0000 Subject: [PATCH 211/212] Remove else check for untyped to typed --- src/check_expr.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 36b4f6ec6..1c09ad908 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -4704,12 +4704,14 @@ gb_internal void convert_to_typed(CheckerContext *c, Operand *operand, Type *tar switch (t->kind) { case Type_Basic: if (operand->mode == Addressing_Constant) { - check_is_expressible(c, operand, t); + check_is_expressible(c, operand, target_type); if (operand->mode == Addressing_Invalid) { return; } update_untyped_expr_value(c, operand->expr, operand->value); - } else { + } + + { switch (operand->type->Basic.kind) { case Basic_UntypedBool: if (!is_type_boolean(target_type)) { From 7125782bd2743084d804269fa57dd65f6e862033 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 30 Jan 2026 10:46:35 +0000 Subject: [PATCH 212/212] Support `-linker:mold` on FreeBSD and NetBSD; Remove `-use-lld` and `-use-radlink` --- src/linker.cpp | 2 +- src/main.cpp | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/linker.cpp b/src/linker.cpp index c68417994..bc6268049 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -174,7 +174,7 @@ try_cross_linking:; switch (build_context.linker_choice) { case Linker_Default: break; case Linker_lld: section_name = str_lit("lld-link"); break; - #if defined(GB_SYSTEM_LINUX) + #if defined(GB_SYSTEM_LINUX) || defined(GB_SYSTEM_FREEBSD) || defined(GB_SYSTEM_NETBSD) case Linker_mold: section_name = str_lit("mold-link"); break; #endif #if defined(GB_SYSTEM_WINDOWS) diff --git a/src/main.cpp b/src/main.cpp index 499b8a5ff..624869e65 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -324,8 +324,6 @@ enum BuildFlagKind { BuildFlag_NoCRT, BuildFlag_NoRPath, BuildFlag_NoEntryPoint, - BuildFlag_UseLLD, - BuildFlag_UseRADLink, BuildFlag_Linker, BuildFlag_UseSeparateModules, BuildFlag_UseSingleModule, @@ -556,8 +554,6 @@ gb_internal bool parse_build_flags(Array args) { add_flag(&build_flags, BuildFlag_NoCRT, str_lit("no-crt"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_NoRPath, str_lit("no-rpath"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_NoEntryPoint, str_lit("no-entry-point"), BuildFlagParam_None, Command__does_check &~ Command_test); - add_flag(&build_flags, BuildFlag_UseLLD, str_lit("lld"), BuildFlagParam_None, Command__does_build); - add_flag(&build_flags, BuildFlag_UseRADLink, str_lit("radlink"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_Linker, str_lit("linker"), BuildFlagParam_String, Command__does_build); add_flag(&build_flags, BuildFlag_UseSeparateModules, str_lit("use-separate-modules"), BuildFlagParam_None, Command__does_build); add_flag(&build_flags, BuildFlag_UseSingleModule, str_lit("use-single-module"), BuildFlagParam_None, Command__does_build); @@ -1256,14 +1252,6 @@ gb_internal bool parse_build_flags(Array args) { case BuildFlag_NoThreadLocal: build_context.no_thread_local = true; break; - case BuildFlag_UseLLD: - gb_printf_err("Warning: Use of -lld has been deprecated in favour of -linker:lld\n"); - build_context.linker_choice = Linker_lld; - break; - case BuildFlag_UseRADLink: - gb_printf_err("Warning: Use of -lld has been deprecated in favour of -linker:radlink\n"); - build_context.linker_choice = Linker_radlink; - break; case BuildFlag_Linker: { GB_ASSERT(value.kind == ExactValue_String);

    _%gUkDt^snr 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�Zh4oDI%W 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%0AiX%h&$A2fvwS`>Kjg@9xC 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 -32eitKq!`x0x8F3oA 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