Merge pull request #349 from bnema/fix/rollback-lazy-puregotk
fix(deps): emergency rollback puregotk lazy registration regression
905 files · +25263 -27842
M go.mod +1 -1
| @@ -11,7 +11,7 @@ require ( | |||
| 11 | 11 | github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a | |
| 12 | 12 | github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c | |
| 13 | 13 | github.com/bnema/purego-webp v0.2.1-0.20260714152238-7bc9c402fdf6 | |
| 14 | - | github.com/bnema/puregotk v0.7.1-0.20260714170452-0b6b9b901234 | |
| 14 | + | github.com/bnema/puregotk v0.7.0 | |
| 15 | 15 | github.com/charmbracelet/bubbles v1.0.0 | |
| 16 | 16 | github.com/charmbracelet/bubbletea v1.3.10 | |
| 17 | 17 | github.com/charmbracelet/lipgloss v1.1.0 | |
| @@ -11,7 +11,7 @@ require ( | |||||
| 11 | github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a | 11 | github.com/bnema/purego-pipewire v0.1.5-0.20260714124450-6504b9cdf02a | ||
| 12 | github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c | 12 | github.com/bnema/purego-sqlite v0.1.4-0.20260714131321-3614fe683b9c | ||
| 13 | github.com/bnema/purego-webp v0.2.1-0.20260714152238-7bc9c402fdf6 | 13 | github.com/bnema/purego-webp v0.2.1-0.20260714152238-7bc9c402fdf6 | ||
| 14 | - | github.com/bnema/puregotk v0.7.1-0.20260714170452-0b6b9b901234 | 14 | + | github.com/bnema/puregotk v0.7.0 |
| 15 | github.com/charmbracelet/bubbles v1.0.0 | 15 | github.com/charmbracelet/bubbles v1.0.0 | ||
| 16 | github.com/charmbracelet/bubbletea v1.3.10 | 16 | github.com/charmbracelet/bubbletea v1.3.10 | ||
| 17 | github.com/charmbracelet/lipgloss v1.1.0 | 17 | github.com/charmbracelet/lipgloss v1.1.0 | ||
M go.sum +0 -4 generated file: collapsed
M vendor/github.com/bnema/puregotk/internal/core/core.go +4 -197 generated file: collapsed
M vendor/github.com/bnema/puregotk/pkg/core/core.go +0 -10 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-about-dialog.go +64 -99 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-about-window.go +62 -95 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-accent-color.go +15 -7 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-action-row.go +29 -33 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-alert-dialog.go +47 -66 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-animation-target.go +27 -10 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-animation-util.go +12 -4 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-animation.go +26 -24 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-application-window.go +22 -14 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-application.go +15 -3 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-avatar.go +25 -22 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-banner.go +26 -23 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-bin.go +16 -5 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-bottom-sheet.go +38 -47 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-breakpoint-bin.go +19 -10 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-breakpoint.go +37 -33 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-button-content.go +22 -18 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-button-row.go +18 -10 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-carousel-indicator-dots.go +16 -5 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-carousel-indicator-lines.go +16 -5 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-carousel.go +37 -47 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-clamp-layout.go +20 -14 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-clamp-scrollable.go +22 -17 generated file: collapsed
M vendor/github.com/bnema/puregotk/v4/adw/adw-clamp.go +22 -17
| @@ -5,6 +5,7 @@ import ( | |||
| 5 | 5 | "structs" | |
| 6 | 6 | "unsafe" | |
| 7 | 7 | ||
| 8 | + | "github.com/bnema/purego" | |
| 8 | 9 | "github.com/bnema/puregotk/pkg/core" | |
| 9 | 10 | "github.com/bnema/puregotk/v4/gobject" | |
| 10 | 11 | "github.com/bnema/puregotk/v4/gobject/types" | |
| @@ -67,7 +68,6 @@ type Clamp struct { | |||
| 67 | 68 | var xClampGLibType func() types.GType | |
| 68 | 69 | ||
| 69 | 70 | func ClampGLibType() types.GType { | |
| 70 | - | core.LazyRegister(&xClampGLibType, "ADW", "adw_clamp_get_type", false) | |
| 71 | 71 | return xClampGLibType() | |
| 72 | 72 | } | |
| 73 | 73 | ||
| @@ -81,7 +81,6 @@ var xNewClamp func() uintptr | |||
| 81 | 81 | ||
| 82 | 82 | // Creates a new `AdwClamp`. | |
| 83 | 83 | func NewClamp() *Clamp { | |
| 84 | - | core.LazyRegister(&xNewClamp, "ADW", "adw_clamp_new", false) | |
| 85 | 84 | var cls *Clamp | |
| 86 | 85 | ||
| 87 | 86 | cret := xNewClamp() | |
| @@ -99,7 +98,6 @@ var xClampGetChild func(uintptr) uintptr | |||
| 99 | 98 | ||
| 100 | 99 | // Gets the child widget of @self. | |
| 101 | 100 | func (x *Clamp) GetChild() *gtk.Widget { | |
| 102 | - | core.LazyRegister(&xClampGetChild, "ADW", "adw_clamp_get_child", false) | |
| 103 | 101 | var cls *gtk.Widget | |
| 104 | 102 | ||
| 105 | 103 | cret := xClampGetChild(x.GoPointer()) | |
| @@ -117,8 +115,6 @@ var xClampGetMaximumSize func(uintptr) int | |||
| 117 | 115 | ||
| 118 | 116 | // Gets the maximum size allocated to the child. | |
| 119 | 117 | func (x *Clamp) GetMaximumSize() int { | |
| 120 | - | core.LazyRegister(&xClampGetMaximumSize, "ADW", "adw_clamp_get_maximum_size", false) | |
| 121 | - | ||
| 122 | 118 | cret := xClampGetMaximumSize(x.GoPointer()) | |
| 123 | 119 | return cret | |
| 124 | 120 | } | |
| @@ -127,8 +123,6 @@ var xClampGetTighteningThreshold func(uintptr) int | |||
| 127 | 123 | ||
| 128 | 124 | // Gets the size above which the child is clamped. | |
| 129 | 125 | func (x *Clamp) GetTighteningThreshold() int { | |
| 130 | - | core.LazyRegister(&xClampGetTighteningThreshold, "ADW", "adw_clamp_get_tightening_threshold", false) | |
| 131 | - | ||
| 132 | 126 | cret := xClampGetTighteningThreshold(x.GoPointer()) | |
| 133 | 127 | return cret | |
| 134 | 128 | } | |
| @@ -137,8 +131,6 @@ var xClampGetUnit func(uintptr) LengthUnit | |||
| 137 | 131 | ||
| 138 | 132 | // Gets the length unit for maximum size and tightening threshold. | |
| 139 | 133 | func (x *Clamp) GetUnit() LengthUnit { | |
| 140 | - | core.LazyRegister(&xClampGetUnit, "ADW", "adw_clamp_get_unit", false) | |
| 141 | - | ||
| 142 | 134 | cret := xClampGetUnit(x.GoPointer()) | |
| 143 | 135 | return cret | |
| 144 | 136 | } | |
| @@ -147,8 +139,6 @@ var xClampSetChild func(uintptr, uintptr) | |||
| 147 | 139 | ||
| 148 | 140 | // Sets the child widget of @self. | |
| 149 | 141 | func (x *Clamp) SetChild(ChildVar *gtk.Widget) { | |
| 150 | - | core.LazyRegister(&xClampSetChild, "ADW", "adw_clamp_set_child", false) | |
| 151 | - | ||
| 152 | 142 | xClampSetChild(x.GoPointer(), ChildVar.GoPointer()) | |
| 153 | 143 | } | |
| 154 | 144 | ||
| @@ -158,8 +148,6 @@ var xClampSetMaximumSize func(uintptr, int) | |||
| 158 | 148 | // | |
| 159 | 149 | // It is the width if the clamp is horizontal, or the height if it is vertical. | |
| 160 | 150 | func (x *Clamp) SetMaximumSize(MaximumSizeVar int) { | |
| 161 | - | core.LazyRegister(&xClampSetMaximumSize, "ADW", "adw_clamp_set_maximum_size", false) | |
| 162 | - | ||
| 163 | 151 | xClampSetMaximumSize(x.GoPointer(), MaximumSizeVar) | |
| 164 | 152 | } | |
| 165 | 153 | ||
| @@ -180,8 +168,6 @@ var xClampSetTighteningThreshold func(uintptr, int) | |||
| 180 | 168 | // Effectively, tightening the grip on the child before it reaches its maximum | |
| 181 | 169 | // size makes transitions to and from the maximum size smoother when resizing. | |
| 182 | 170 | func (x *Clamp) SetTighteningThreshold(TighteningThresholdVar int) { | |
| 183 | - | core.LazyRegister(&xClampSetTighteningThreshold, "ADW", "adw_clamp_set_tightening_threshold", false) | |
| 184 | - | ||
| 185 | 171 | xClampSetTighteningThreshold(x.GoPointer(), TighteningThresholdVar) | |
| 186 | 172 | } | |
| 187 | 173 | ||
| @@ -191,8 +177,6 @@ var xClampSetUnit func(uintptr, LengthUnit) | |||
| 191 | 177 | // | |
| 192 | 178 | // Allows the sizes to vary depending on the text scale factor. | |
| 193 | 179 | func (x *Clamp) SetUnit(UnitVar LengthUnit) { | |
| 194 | - | core.LazyRegister(&xClampSetUnit, "ADW", "adw_clamp_set_unit", false) | |
| 195 | - | ||
| 196 | 180 | xClampSetUnit(x.GoPointer(), UnitVar) | |
| 197 | 181 | } | |
| 198 | 182 | ||
| @@ -545,4 +529,25 @@ func (x *Clamp) SetOrientation(OrientationVar gtk.Orientation) { | |||
| 545 | 529 | func init() { | |
| 546 | 530 | core.SetPackageName("ADW", "libadwaita-1") | |
| 547 | 531 | core.SetSharedLibraries("ADW", []string{"libadwaita-1.so.0", "libadwaita-1.0.dylib"}) | |
| 532 | + | var libs []uintptr | |
| 533 | + | for _, libPath := range core.GetPaths("ADW") { | |
| 534 | + | lib, err := purego.Dlopen(libPath, purego.RTLD_NOW|purego.RTLD_GLOBAL) | |
| 535 | + | if err != nil { | |
| 536 | + | panic(err) | |
| 537 | + | } | |
| 538 | + | libs = append(libs, lib) | |
| 539 | + | } | |
| 540 | + | ||
| 541 | + | core.PuregoSafeRegister(&xClampGLibType, libs, "adw_clamp_get_type") | |
| 542 | + | ||
| 543 | + | core.PuregoSafeRegister(&xNewClamp, libs, "adw_clamp_new") | |
| 544 | + | ||
| 545 | + | core.PuregoSafeRegister(&xClampGetChild, libs, "adw_clamp_get_child") | |
| 546 | + | core.PuregoSafeRegister(&xClampGetMaximumSize, libs, "adw_clamp_get_maximum_size") | |
| 547 | + | core.PuregoSafeRegister(&xClampGetTighteningThreshold, libs, "adw_clamp_get_tightening_threshold") | |
| 548 | + | core.PuregoSafeRegister(&xClampGetUnit, libs, "adw_clamp_get_unit") | |
| 549 | + | core.PuregoSafeRegister(&xClampSetChild, libs, "adw_clamp_set_child") | |
| 550 | + | core.PuregoSafeRegister(&xClampSetMaximumSize, libs, "adw_clamp_set_maximum_size") | |
| 551 | + | core.PuregoSafeRegister(&xClampSetTighteningThreshold, libs, "adw_clamp_set_tightening_threshold") | |
| 552 | + | core.PuregoSafeRegister(&xClampSetUnit, libs, "adw_clamp_set_unit") | |
| 548 | 553 | } | |
| @@ -5,6 +5,7 @@ import ( | |||||
| 5 | "structs" | 5 | "structs" | ||
| 6 | "unsafe" | 6 | "unsafe" | ||
| 7 | 7 | ||||
| 8 | + | "github.com/bnema/purego" | |||
| 8 | "github.com/bnema/puregotk/pkg/core" | 9 | "github.com/bnema/puregotk/pkg/core" | ||
| 9 | "github.com/bnema/puregotk/v4/gobject" | 10 | "github.com/bnema/puregotk/v4/gobject" | ||
| 10 | "github.com/bnema/puregotk/v4/gobject/types" | 11 | "github.com/bnema/puregotk/v4/gobject/types" | ||
| @@ -67,7 +68,6 @@ type Clamp struct { | |||||
| 67 | var xClampGLibType func() types.GType | 68 | var xClampGLibType func() types.GType | ||
| 68 | 69 | ||||
| 69 | func ClampGLibType() types.GType { | 70 | func ClampGLibType() types.GType { | ||
| 70 | - | core.LazyRegister(&xClampGLibType, "ADW", "adw_clamp_get_type", false) | |||
| 71 | return xClampGLibType() | 71 | return xClampGLibType() | ||
| 72 | } | 72 | } | ||
| 73 | 73 | ||||
| @@ -81,7 +81,6 @@ var xNewClamp func() uintptr | |||||
| 81 | 81 | ||||
| 82 | // Creates a new `AdwClamp`. | 82 | // Creates a new `AdwClamp`. | ||
| 83 | func NewClamp() *Clamp { | 83 | func NewClamp() *Clamp { | ||
| 84 | - | core.LazyRegister(&xNewClamp, "ADW", "adw_clamp_new", false) | |||
| 85 | var cls *Clamp | 84 | var cls *Clamp | ||
| 86 | 85 | ||||
| 87 | cret := xNewClamp() | 86 | cret := xNewClamp() | ||
| @@ -99,7 +98,6 @@ var xClampGetChild func(uintptr) uintptr | |||||
| 99 | 98 | ||||
| 100 | // Gets the child widget of @self. | 99 | // Gets the child widget of @self. | ||
| 101 | func (x *Clamp) GetChild() *gtk.Widget { | 100 | func (x *Clamp) GetChild() *gtk.Widget { | ||
| 102 | - | core.LazyRegister(&xClampGetChild, "ADW", "adw_clamp_get_child", false) | |||
| 103 | var cls *gtk.Widget | 101 | var cls *gtk.Widget | ||
| 104 | 102 | ||||
| 105 | cret := xClampGetChild(x.GoPointer()) | 103 | cret := xClampGetChild(x.GoPointer()) | ||
| @@ -117,8 +115,6 @@ var xClampGetMaximumSize func(uintptr) int | |||||
| 117 | 115 | ||||
| 118 | // Gets the maximum size allocated to the child. | 116 | // Gets the maximum size allocated to the child. | ||
| 119 | func (x *Clamp) GetMaximumSize() int { | 117 | func (x *Clamp) GetMaximumSize() int { | ||
| 120 | - | core.LazyRegister(&xClampGetMaximumSize, "ADW", "adw_clamp_get_maximum_size", false) | |||
| 121 | - | ||||
| 122 | cret := xClampGetMaximumSize(x.GoPointer()) | 118 | cret := xClampGetMaximumSize(x.GoPointer()) | ||
| 123 | return cret | 119 | return cret | ||
| 124 | } | 120 | } | ||
| @@ -127,8 +123,6 @@ var xClampGetTighteningThreshold func(uintptr) int | |||||
| 127 | 123 | ||||
| 128 | // Gets the size above which the child is clamped. | 124 | // Gets the size above which the child is clamped. | ||
| 129 | func (x *Clamp) GetTighteningThreshold() int { | 125 | func (x *Clamp) GetTighteningThreshold() int { | ||
| 130 | - | core.LazyRegister(&xClampGetTighteningThreshold, "ADW", "adw_clamp_get_tightening_threshold", false) | |||
| 131 | - | ||||
| 132 | cret := xClampGetTighteningThreshold(x.GoPointer()) | 126 | cret := xClampGetTighteningThreshold(x.GoPointer()) | ||
| 133 | return cret | 127 | return cret | ||
| 134 | } | 128 | } | ||
| @@ -137,8 +131,6 @@ var xClampGetUnit func(uintptr) LengthUnit | |||||
| 137 | 131 | ||||
| 138 | // Gets the length unit for maximum size and tightening threshold. | 132 | // Gets the length unit for maximum size and tightening threshold. | ||
| 139 | func (x *Clamp) GetUnit() LengthUnit { | 133 | func (x *Clamp) GetUnit() LengthUnit { | ||
| 140 | - | core.LazyRegister(&xClampGetUnit, "ADW", "adw_clamp_get_unit", false) | |||
| 141 | - | ||||
| 142 | cret := xClampGetUnit(x.GoPointer()) | 134 | cret := xClampGetUnit(x.GoPointer()) | ||
| 143 | return cret | 135 | return cret | ||
| 144 | } | 136 | } | ||
| @@ -147,8 +139,6 @@ var xClampSetChild func(uintptr, uintptr) | |||||
| 147 | 139 | ||||
| 148 | // Sets the child widget of @self. | 140 | // Sets the child widget of @self. | ||
| 149 | func (x *Clamp) SetChild(ChildVar *gtk.Widget) { | 141 | func (x *Clamp) SetChild(ChildVar *gtk.Widget) { | ||
| 150 | - | core.LazyRegister(&xClampSetChild, "ADW", "adw_clamp_set_child", false) | |||
| 151 | - | ||||
| 152 | xClampSetChild(x.GoPointer(), ChildVar.GoPointer()) | 142 | xClampSetChild(x.GoPointer(), ChildVar.GoPointer()) | ||
| 153 | } | 143 | } | ||
| 154 | 144 | ||||
| @@ -158,8 +148,6 @@ var xClampSetMaximumSize func(uintptr, int) | |||||
| 158 | // | 148 | // | ||
| 159 | // It is the width if the clamp is horizontal, or the height if it is vertical. | 149 | // It is the width if the clamp is horizontal, or the height if it is vertical. | ||
| 160 | func (x *Clamp) SetMaximumSize(MaximumSizeVar int) { | 150 | func (x *Clamp) SetMaximumSize(MaximumSizeVar int) { | ||
| 161 | - | core.LazyRegister(&xClampSetMaximumSize, "ADW", "adw_clamp_set_maximum_size", false) | |||
| 162 | - | ||||
| 163 | xClampSetMaximumSize(x.GoPointer(), MaximumSizeVar) | 151 | xClampSetMaximumSize(x.GoPointer(), MaximumSizeVar) | ||
| 164 | } | 152 | } | ||
| 165 | 153 | ||||
| @@ -180,8 +168,6 @@ var xClampSetTighteningThreshold func(uintptr, int) | |||||
| 180 | // Effectively, tightening the grip on the child before it reaches its maximum | 168 | // Effectively, tightening the grip on the child before it reaches its maximum | ||
| 181 | // size makes transitions to and from the maximum size smoother when resizing. | 169 | // size makes transitions to and from the maximum size smoother when resizing. | ||
| 182 | func (x *Clamp) SetTighteningThreshold(TighteningThresholdVar int) { | 170 | func (x *Clamp) SetTighteningThreshold(TighteningThresholdVar int) { | ||
| 183 | - | core.LazyRegister(&xClampSetTighteningThreshold, "ADW", "adw_clamp_set_tightening_threshold", false) | |||
| 184 | - | ||||
| 185 | xClampSetTighteningThreshold(x.GoPointer(), TighteningThresholdVar) | 171 | xClampSetTighteningThreshold(x.GoPointer(), TighteningThresholdVar) | ||
| 186 | } | 172 | } | ||
| 187 | 173 | ||||
| @@ -191,8 +177,6 @@ var xClampSetUnit func(uintptr, LengthUnit) | |||||
| 191 | // | 177 | // | ||
| 192 | // Allows the sizes to vary depending on the text scale factor. | 178 | // Allows the sizes to vary depending on the text scale factor. | ||
| 193 | func (x *Clamp) SetUnit(UnitVar LengthUnit) { | 179 | func (x *Clamp) SetUnit(UnitVar LengthUnit) { | ||
| 194 | - | core.LazyRegister(&xClampSetUnit, "ADW", "adw_clamp_set_unit", false) | |||
| 195 | - | ||||
| 196 | xClampSetUnit(x.GoPointer(), UnitVar) | 180 | xClampSetUnit(x.GoPointer(), UnitVar) | ||
| 197 | } | 181 | } | ||
| 198 | 182 | ||||
| @@ -545,4 +529,25 @@ func (x *Clamp) SetOrientation(OrientationVar gtk.Orientation) { | |||||
| 545 | func init() { | 529 | func init() { | ||
| 546 | core.SetPackageName("ADW", "libadwaita-1") | 530 | core.SetPackageName("ADW", "libadwaita-1") | ||
| 547 | core.SetSharedLibraries("ADW", []string{"libadwaita-1.so.0", "libadwaita-1.0.dylib"}) | 531 | core.SetSharedLibraries("ADW", []string{"libadwaita-1.so.0", "libadwaita-1.0.dylib"}) | ||
| 532 | + | var libs []uintptr | |||
| 533 | + | for _, libPath := range core.GetPaths("ADW") { | |||
| 534 | + | lib, err := purego.Dlopen(libPath, purego.RTLD_NOW|purego.RTLD_GLOBAL) | |||
| 535 | + | if err != nil { | |||
| 536 | + | panic(err) | |||
| 537 | + | } | |||
| 538 | + | libs = append(libs, lib) | |||
| 539 | + | } | |||
| 540 | + | ||||
| 541 | + | core.PuregoSafeRegister(&xClampGLibType, libs, "adw_clamp_get_type") | |||
| 542 | + | ||||
| 543 | + | core.PuregoSafeRegister(&xNewClamp, libs, "adw_clamp_new") | |||
| 544 | + | ||||
| 545 | + | core.PuregoSafeRegister(&xClampGetChild, libs, "adw_clamp_get_child") | |||
| 546 | + | core.PuregoSafeRegister(&xClampGetMaximumSize, libs, "adw_clamp_get_maximum_size") | |||
| 547 | + | core.PuregoSafeRegister(&xClampGetTighteningThreshold, libs, "adw_clamp_get_tightening_threshold") | |||
| 548 | + | core.PuregoSafeRegister(&xClampGetUnit, libs, "adw_clamp_get_unit") | |||
| 549 | + | core.PuregoSafeRegister(&xClampSetChild, libs, "adw_clamp_set_child") | |||
| 550 | + | core.PuregoSafeRegister(&xClampSetMaximumSize, libs, "adw_clamp_set_maximum_size") | |||
| 551 | + | core.PuregoSafeRegister(&xClampSetTighteningThreshold, libs, "adw_clamp_set_tightening_threshold") | |||
| 552 | + | core.PuregoSafeRegister(&xClampSetUnit, libs, "adw_clamp_set_unit") | |||
| 548 | } | 553 | } | ||