View on GitHub

Mazarin

All-Go Operating System For ARM64 and x86_64

mancini

import "mazzy/mazarin/mancini"

Code generated by compile-constraints from add_sub_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from appWindowHeight.vgo. DO NOT EDIT.

Code generated by compile-constraints from appWindowWidth.vgo. DO NOT EDIT.

Code generated by compile-constraints from between_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from bounds_from_xywh.vgo. DO NOT EDIT.

Code generated by compile-constraints from bounds_hash.vgo. DO NOT EDIT.

Code generated by compile-constraints from decorationHeight.vgo. DO NOT EDIT.

Code generated by compile-constraints from decorationWidth.vgo. DO NOT EDIT.

dispatch.go implements the Henry-Hudson (subArctic) input dispatch model for shepherd applications. This is the in-app dispatch pipeline — rachel handles WM-level dispatch (focus granting, window selection), then forwards typed events to the focused shepherd. The shepherd’s AppDispatcher routes those events to the correct mancini interactors.

Three layers:

  1. AppPolicy — ordered routing strategies (focus or positional)
  2. Agent — each policy contains agents that translate raw events into semantic protocol callbacks via FSMs
  3. Protocol Interfaces — Clickable, ClickDraggable, KeyReceivable, etc.

Reference: Hudson, Mankoff, Smith. “Extensible Input Handling in the subArctic Toolkit.” CHI 2005.

Package mancini is the core of the Mazzy UI toolkit. It defines the interfaces and types that all interactors share: layout, drawing, theming, and neumorphic shadow parameters.

Architecture

Mancini uses an object-oriented design layered on Go’s embedding. Every UI element (“interactor”) ultimately satisfies the Interactor interface, which provides position (X, Y), size (W, H), visibility, and access to the current DrawContext. Themed interactors additionally satisfy ThemedInteractor, adding palette colors and font resolution.

Concrete interactor types live in the mazzy/mazarin/mancini/std package. Their implementation base types live in mazzy/mazarin/mancini/impl:

Backpointer and Virtual Dispatch

Go embedding promotes methods but does not provide virtual dispatch. Mancini solves this with a backpointer pattern: every [impl.Interactor] stores an “owner” field of type Interactor that points to the outermost concrete type. During construction, the concrete type passes itself:

b := &Button{...}
b.ThemedInteractor.Init(b, layout, theme)  // b is the backpointer

The Draw protocol uses this backpointer as the “self” parameter:

func (b *Button) Draw(self Interactor, x, y, w, h int64) { ... }

This ensures that self.DC(), self.Visible(), etc. resolve through the concrete type, enabling correct virtual dispatch across the embedding hierarchy.

Layout and Constraints

Each interactor has a LayoutAttributes that publishes its position, size, and visibility as named attributes in a global constraint network. Container interactors ([impl.Parent]) discover children by querying which attributes name them as their parent. This decouples parent–child relationships from Go’s type system — children register themselves by setting their Parent attribute to the parent’s constraint-system name.

Neumorphic Rendering

The visual system supports three depth states (NeuDepth):

Shadow parameters are bundled in NeuParams and delivered through the Theme via the NeumorphicParams interface. Two weight classes exist: Heavy (for windows) and Light (for controls). Either may return nil to disable neumorphic rendering entirely, falling back to flat drawing.

Drawing

All rendering goes through DrawContext, which wraps a github.com/fogleman/gg context. The NewDrawer interface is the standard draw protocol:

Draw(self Interactor, x, y, w, h int64)

The parent passes authoritative bounds (x, y, w, h) that override any stale values in the layout attributes. The “self” parameter is the backpointer described above.

Code generated by compile-constraints from greater_i64_bool.vgo. DO NOT EDIT.

Code generated by compile-constraints from horizontal_center.vgo. DO NOT EDIT.

Code generated by compile-constraints from identity_bool.vgo. DO NOT EDIT.

Code generated by compile-constraints from identity_i64.vgo. DO NOT EDIT.

Code generated by compile-constraints from identity_rect.vgo. DO NOT EDIT.

Code generated by compile-constraints from identity_str.vgo. DO NOT EDIT.

Code generated by compile-constraints from inout_bridge.vgo. DO NOT EDIT.

Code generated by compile-constraints from leaf_damage_rect.vgo. DO NOT EDIT.

Code generated by compile-constraints from max_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from min_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from nonneg_sub.vgo. DO NOT EDIT.

Code generated by compile-constraints from parent_damage_default.vgo. DO NOT EDIT.

Code generated by compile-constraints from parent_damage_rect.vgo. DO NOT EDIT.

Code generated by compile-constraints from scale_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from string_length.vgo. DO NOT EDIT.

Code generated by compile-constraints from sub_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from sub_two_deref.vgo. DO NOT EDIT.

Code generated by compile-constraints from thumb_frac_permille.vgo. DO NOT EDIT.

Code generated by compile-constraints from vertical_center.vgo. DO NOT EDIT.

Index

Constants

BtnLeft is the evdev boundary between keyboard and mouse button codes.

const BtnLeft = 0x110

Variables

ErrPink is the background color drawn when an interactor has no children (almost always a programming error).

var ErrPink = color.NRGBA{255, 105, 180, 255}

GrooveParams are the default InsetParams used for thin inset separator lines. Used by [std.NeuGroove] and by [std.NOfMChooser] for inter-strip groove separators.

var GrooveParams = InsetParams{Off: 1, DarkBlur: 3, LightBlur: 2}

var ProgAddSubDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_a_",
        "_b_",
        "_c_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "addSubDeref", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgAppWindowHeight = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0xc8},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "appWindowHeight", PC: 200, NumArgs: 0, NumLocals: 2, LocalBase: 40},
    },
    Entry: 12,
}

var ProgAppWindowWidth = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0xc8},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "appWindowWidth", PC: 200, NumArgs: 0, NumLocals: 2, LocalBase: 40},
    },
    Entry: 12,
}

var ProgBetweenDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 2, Op2: 3, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
        "_min_",
        "_max_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "betweenDeref", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgBoundsFromXywh = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_x_",
        "_y_",
        "_width_",
        "_height_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "boundsFromXywh", PC: 0, NumArgs: 0, NumLocals: 4, LocalBase: 0},
    },
    Entry: 0,
}

var ProgBoundsHash = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x9e3779b1},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x85ebca77},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0xc2b2ae3d},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x27d4eb2f},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_x_",
        "_y_",
        "_width_",
        "_height_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "boundsHash", PC: 0, NumArgs: 0, NumLocals: 4, LocalBase: 0},
    },
    Entry: 0,
}

var ProgDecorationHeight = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1e},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 3, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x40, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_padding_",
        "_maxSize_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "decorationHeight", PC: 200, NumArgs: 0, NumLocals: 6, LocalBase: 40},
    },
    Entry: 12,
}

var ProgDecorationWidth = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x09, Op1: 47, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 9, Op2: 10, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 212, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 13, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 40, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 14, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 15, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 16, Op2: 17, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 17, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 18, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x03, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 19, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 20, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 23, Op2: 24, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 25, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 24, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 22, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 21, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 26, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 27, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 29, Op2: 30, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 30, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 31, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 28, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 32, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 34, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 37, Op2: 38, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 39, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 4, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 33, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x30, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 38, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x1},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 35, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 36, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 12, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 9, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x14},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x05, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 42, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 44, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 2, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 43, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 40, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x40, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 41, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 45, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_int64Prefix_",
        "_xSuffix_",
        "_ySuffix_",
        "_widthSuffix_",
        "_heightSuffix_",
        "_boolPrefix_",
        "_visSuffix_",
        "_boundsHashSuffix_",
        "_childPattern_",
        "",
        "_padding_",
        "_maxSize_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childX", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childY", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "childWidth", PC: 16, NumArgs: 1, NumLocals: 1, LocalBase: 2},
        {Name: "childHeight", PC: 24, NumArgs: 1, NumLocals: 1, LocalBase: 3},
        {Name: "isChildVisible", PC: 32, NumArgs: 1, NumLocals: 1, LocalBase: 4},
        {Name: "childBoundsHash", PC: 40, NumArgs: 1, NumLocals: 1, LocalBase: 5},
        {Name: "findVisibleChildren", PC: 48, NumArgs: 1, NumLocals: 6, LocalBase: 6},
        {Name: "hasNoChildren", PC: 72, NumArgs: 1, NumLocals: 2, LocalBase: 12},
        {Name: "hasNoVisibleChildren", PC: 87, NumArgs: 1, NumLocals: 5, LocalBase: 14},
        {Name: "hasOneChild", PC: 107, NumArgs: 1, NumLocals: 7, LocalBase: 19},
        {Name: "numChildren", PC: 142, NumArgs: 1, NumLocals: 6, LocalBase: 26},
        {Name: "nthChild", PC: 166, NumArgs: 2, NumLocals: 8, LocalBase: 32},
        {Name: "decorationWidth", PC: 200, NumArgs: 0, NumLocals: 6, LocalBase: 40},
    },
    Entry: 12,
}

var ProgGreaterI64Bool = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x33, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_a_",
        "_b_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "greaterI64Bool", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgHorizontalCenter = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x23, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_containerX_",
        "_containerWidth_",
        "_elementWidth_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "horizontalCenter", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgIdentityBool = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "identityBool", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgIdentityI64 = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "identityI64", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgIdentityRect = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_0_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "identityRect", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgIdentityStr = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 202, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "identityStr", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgInoutBridge = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 2, Op2: 3, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_dim_",
        "_min_",
        "_max_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "inoutBridge", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgLeafDamageRect = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x03, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_bounds_",
        "_lpBounds_",
        "_visible_",
        "_lpVisible_",
        "_contentHash_",
        "_lpContentHash_",
        "_bgColor_",
        "_lpBgColor_",
        "_fgColor_",
        "_lpFgColor_",
        "_boundsHash_",
        "_lpBoundsHash_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "leafDamageRect", PC: 0, NumArgs: 0, NumLocals: 12, LocalBase: 0},
    },
    Entry: 0,
}

var ProgMaxDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 1, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
        "_floor_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "maxDeref", PC: 0, NumArgs: 0, NumLocals: 2, LocalBase: 0},
    },
    Entry: 0,
}

var ProgMinDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 0, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
        "_ceiling_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "minDeref", PC: 0, NumArgs: 0, NumLocals: 2, LocalBase: 0},
    },
    Entry: 0,
}

var ProgNonnegSub = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x32, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_a_",
        "_b_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "nonnegSub", PC: 0, NumArgs: 0, NumLocals: 1, LocalBase: 0},
    },
    Entry: 0,
}

var ProgParentDamageDefault = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 21, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 211, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x68, Typ: 0x00, Op1: 6, Op2: 7, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3},
        {Opcode: 0x80, Typ: 0x00, Op1: 209, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x42, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x6b, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x81, Typ: 0x00, Op1: 1, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 208, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x42, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x6b, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 65, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x42, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 65, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x61, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x69, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_boolPrefix_",
        "_visSuffix_",
        "_rectPrefix_",
        "_damageRectSuffix_",
        "_boundsHash_",
        "_lpBoundsHash_",
        "_bounds_",
        "_childPattern_",
        "_myName_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "childVisible", PC: 0, NumArgs: 1, NumLocals: 1, LocalBase: 0},
        {Name: "childDmgURI", PC: 8, NumArgs: 1, NumLocals: 1, LocalBase: 1},
        {Name: "parentDamageDefault", PC: 15, NumArgs: 0, NumLocals: 9, LocalBase: 2},
    },
    Entry: 2,
}

var ProgParentDamageRect = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 203, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 60, Op2: 4, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 3, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x03, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 4, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 5, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 6, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 7, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 8, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 9, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x31, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 205, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 65, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x42, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 65, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 11, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 61, Op2: 2, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 10, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_bounds_",
        "_lpBounds_",
        "_visible_",
        "_lpVisible_",
        "_bgColor_",
        "_lpBgColor_",
        "_fgColor_",
        "_lpFgColor_",
        "_boundsHash_",
        "_lpBoundsHash_",
        "_childDamage_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "parentDamageRect", PC: 0, NumArgs: 0, NumLocals: 12, LocalBase: 0},
    },
    Entry: 0,
}

var ProgScaleDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x23, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
        "_numerator_",
        "_denominator_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "scaleDeref", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgStringLength = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 202, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 20, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_source_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "stringLength", PC: 0, NumArgs: 0, NumLocals: 1, LocalBase: 0},
    },
    Entry: 0,
}

var ProgSubDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_a_",
        "_b_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "subDeref", PC: 0, NumArgs: 0, NumLocals: 0, LocalBase: 0},
    },
    Entry: 0,
}

var ProgSubTwoDeref = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_a_",
        "_b_",
        "_c_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "subTwoDeref", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

var ProgThumbFracPermille = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x34, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3e8},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x35, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3e8},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x34, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x60, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x62, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x3e8},
        {Opcode: 0x22, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x23, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_visible_",
        "_total_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "thumbFracPermille", PC: 0, NumArgs: 0, NumLocals: 2, LocalBase: 0},
    },
    Entry: 0,
}

var ProgVerticalCenter = &vm.Program{
    Code: []vm.Inst{
        {Opcode: 0x05, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x05, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x80, Typ: 0x00, Op1: 201, Op2: 1, Flags: 0, Imm: 0x0},
        {Opcode: 0x11, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 1, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x10, Typ: 0x00, Op1: 2, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x21, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x01, Typ: 0x00, Op1: 0, Op2: 0, Flags: 0, Imm: 0x2},
        {Opcode: 0x23, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x20, Typ: 0x01, Op1: 0, Op2: 0, Flags: 0, Imm: 0x0},
        {Opcode: 0x70, Typ: 0x00, Op1: 0, Op2: 1, Flags: 0, Imm: 0x0},
    },
    Strings: []string{
        "_containerY_",
        "_containerHeight_",
        "_elementHeight_",
    },
    NumArgs:  0,
    ArgTypes: []uint8{},
    Funcs: []vm.FuncInfo{
        {Name: "verticalCenter", PC: 0, NumArgs: 0, NumLocals: 3, LocalBase: 0},
    },
    Entry: 0,
}

VisSuffix is the URI suffix for the Visible attribute, used by constraint programs to check child visibility.

var VisSuffix = LayoutVisible.Suffix()

func AddSubI64

func AddSubI64(aURI, bURI, cURI string) *vm.Program

AddSubI64 returns a constraint program that computes aURI + bURI - cURI.

func BetweenI64

func BetweenI64(sourceURI string, lo, hi int64) *vm.Program

BetweenI64 returns a constraint program that clamps sourceURI to [lo, hi].

func BindStrings

func BindStrings(prog *vm.Program, bindings ...string) *vm.Program

BindStrings returns a copy of prog with placeholder strings replaced by the given bindings. Bindings are alternating name-value pairs:

BindStrings(prog, "_maxWidth_", maxWidthURI, "_spacing_", spacingURI, ...)

Any string in the program’s string table that matches a placeholder name (underscore-prefixed and suffixed, e.g. “_maxWidth_”) is replaced with the corresponding value. Non-placeholder strings are preserved.

func BindStringsChildren

func BindStringsChildren(prog *vm.Program, bindings ...string) *vm.Program

BindStringsChildren is BindStrings plus automatic binding of the placeholders required by the “children” vgo library: child discovery (_childPattern_), type prefixes (_boolPrefix_, _int64Prefix_), and layout property suffixes (_xSuffix_, _ySuffix_, _widthSuffix_, _heightSuffix_, _visSuffix_, _boundsHashSuffix_).

func BindStringsParent

func BindStringsParent(prog *vm.Program, parentSeg string, bindings ...string) *vm.Program

BindStringsParent is BindStrings plus automatic binding of the placeholders required by the “parent” vgo library. The caller must supply the parent interactor’s constraint-system name as parentSeg.

func BindStringsSibling

func BindStringsSibling(prog *vm.Program, parentName string, bindings ...string) *vm.Program

BindStringsSibling is BindStrings plus automatic binding of the placeholders required by the “sibling” vgo library. The caller must supply the parent interactor’s constraint-system name as parentName (the value stored in each child’s Parent layout attribute).

func BoolPrefix

func BoolPrefix() string

BoolPrefix returns the URI prefix for bool attributes in the mancini namespace.

func ChildHasDamage

func ChildHasDamage(child Interactor) bool

ChildHasDamage checks whether a child interactor has pending damage. Returns true (safe default) if the child has no layout information. Used by parent Draw methods to skip undamaged children.

func ChildHeight

func ChildHeight(l Layouter, fallback float64) float64

ChildHeight reads a Layouter’s height from its constraint attributes. Returns fallback if the layout is nil or height is 0.

func ChildPattern

func ChildPattern() string

ChildPattern returns the URI pattern for discovering children via their Parent attributes.

func ChildWidth

func ChildWidth(l Layouter, fallback float64) float64

ChildWidth reads a Layouter’s width from its constraint attributes. Returns fallback if the layout is nil or width is 0.

func DefaultName

func DefaultName(typeName string) string

DefaultName returns a unique constraint-system name by suffixing typeName with a process-local counter (e.g. “Button1”, “Button2”).

func DrawHand

func DrawHand(dc DrawContext, cx, cy, angle, length, width float64, col color.NRGBA)

DrawHand draws a single clock hand as a line from center. Exported as a convenience for ClockFace implementations.

func EqualBool

func EqualBool(sourceURI string) *vm.Program

EqualBool returns a constraint program that mirrors a bool source attribute. The returned program reads sourceURI and returns its value unchanged.

func EqualI64

func EqualI64(sourceURI string) *vm.Program

EqualI64 returns a constraint program that mirrors an int64 source attribute. The returned program reads sourceURI and returns its value unchanged.

func EqualStr

func EqualStr(sourceURI string) *vm.Program

EqualStr returns a constraint program that mirrors a string source attribute. The returned program reads sourceURI and returns its value unchanged.

func GlobalToLocal

func GlobalToLocal(globalX, globalY int64, d Drawer) (localX, localY int64, inside bool)

GlobalToLocal transforms global screen coordinates to local coordinates relative to the interactor’s layout origin. Returns the local coordinates and whether the point falls inside the interactor’s bounds.

func GreaterI64Bool

func GreaterI64Bool(aURI, bURI string) *vm.Program

GreaterI64Bool returns a constraint program that evaluates `a > b`, where a and b are int64 source attributes. Used by scrollable containers (GridFrame, ConsoleFrame) to drive scrollbar visibility: `total > visible → scrollNeeded`.

func Init

func Init()

Init initializes the mancini layout system using the shepherd’s SID from attr.SID(). Must be called after attr.Init().

func InitDefaultParentDamage

func InitDefaultParentDamage(lh *LayoutAttributes)

InitDefaultParentDamage creates a damage constraint for a parent interactor that unions its visible children’s damage rectangles. If the parent’s own BoundsHash has changed, it returns the full bounds instead (everything needs repainting when the parent moves or resizes).

Called by [impl.Parent.Initialize] when wantDefaultDamageConstraint is true.

func InsideBounds

func InsideBounds(inter Interactor, x, y int64) bool

InsideBounds checks whether (x, y) in app-local coordinates falls within the interactor’s layout bounds. Used by agents (e.g., ClickDragAgent) to test whether the cursor is inside the target.

func Int64Prefix

func Int64Prefix() string

Int64Prefix returns the URI prefix for int64 attributes in the mancini namespace.

func InteractorName

func InteractorName(i Interactor) string

InteractorName returns the constraint-system name for an interactor by looking it up via its GetLayout().Name(). Returns “” if the interactor doesn’t implement Layouter or has no layout.

func IsAltDown

func IsAltDown(mods uint64) bool

IsAltDown reports whether either alt modifier is set in mods.

func IsControlDown

func IsControlDown(mods uint64) bool

IsControlDown reports whether either control modifier is set in mods.

func IsLeftAltDown

func IsLeftAltDown(mods uint64) bool

IsLeftAltDown reports whether the left alt modifier is set in mods.

func IsLeftControlDown

func IsLeftControlDown(mods uint64) bool

IsLeftControlDown reports whether the left control modifier is set in mods.

func IsLeftMetaDown

func IsLeftMetaDown(mods uint64) bool

IsLeftMetaDown reports whether the left meta modifier is set in mods.

func IsLeftShiftDown

func IsLeftShiftDown(mods uint64) bool

IsLeftShiftDown reports whether the left shift modifier is set in mods.

func IsMetaDown

func IsMetaDown(mods uint64) bool

IsMetaDown reports whether either meta modifier is set in mods.

func IsRightAltDown

func IsRightAltDown(mods uint64) bool

IsRightAltDown reports whether the right alt modifier is set in mods.

func IsRightControlDown

func IsRightControlDown(mods uint64) bool

IsRightControlDown reports whether the right control modifier is set in mods.

func IsRightMetaDown

func IsRightMetaDown(mods uint64) bool

IsRightMetaDown reports whether the right meta modifier is set in mods.

func IsRightShiftDown

func IsRightShiftDown(mods uint64) bool

IsRightShiftDown reports whether the right shift modifier is set in mods.

func IsShiftDown

func IsShiftDown(mods uint64) bool

IsShiftDown reports whether either shift modifier is set in mods.

func LayoutURI

func LayoutURI(myName string, dt DataType, prop LayoutProp) string

LayoutURI builds an attribute URI in the mancini namespace.

func MaxI64

func MaxI64(sourceURI string, floor int64) *vm.Program

MaxI64 returns a constraint program that computes max(sourceURI, floor).

func MeasureTextWidth

func MeasureTextWidth(face font.Face, text string) int64

MeasureTextWidth returns the advance width of text using a pre-resolved font.Face.

func MinI64

func MinI64(sourceURI string, ceiling int64) *vm.Program

MinI64 returns a constraint program that computes min(sourceURI, ceiling).

func NeuMaxPad

func NeuMaxPad(p NeuParams) int64

NeuMaxPad computes the maximum shadow padding across all depth states. Returns the ceiling as an integer — all interactor dimensions are int64.

func NonnegSubI64

func NonnegSubI64(aURI, bURI string) *vm.Program

NonnegSubI64 returns a constraint program that computes `max(a - b, 0)`, where a and b are int64 source attributes. Used for scrollbar Max values (`max(total - visible, 0)`) to ensure a sensible range even when visible momentarily exceeds total during a layout transition.

func OpenFont

func OpenFont(dc DrawContext, theme Theme, feature Feature, size int64) int32

OpenFont opens a font via DrawContext.OpenFont for a given Theme, Feature, and size. Returns the fontID or -1 on failure.

func PickDebugEnabled

func PickDebugEnabled() bool

PickDebugEnabled returns true when verbose pick tracing is active. Called from [impl.Interactor.Pick] to avoid an import cycle.

func PopClip

func PopClip()

PopClip restores the previous clip rectangle.

func PopDamageClip

func PopDamageClip(dc DrawContext)

PopDamageClip restores the DrawContext state saved by PushDamageClip.

func PublishLayout

func PublishLayout(l *LayoutAttributes, x, y, w, h float64)

PublishLayout writes position and size to an interactor’s layout attributes. Panics if a non-nil attribute is a constraint — constraint values are computed by the VM and must not be set imperatively.

func PushClip

func PushClip(x, y, w, h float64)

PushClip pushes a clip rectangle (global coords). The effective clip is the intersection of this rect with the parent’s clip.

func RectPrefix

func RectPrefix() string

RectPrefix returns the URI prefix for rect attributes in the mancini namespace.

func RegisterInteractor

func RegisterInteractor(name string, i Interactor)

RegisterInteractor adds an interactor to the global registry keyed by its constraint-system name. Called from impl.Interactor.Init().

func RegistrySeq

func RegistrySeq(name string) (uint64, bool)

RegistrySeq returns the sequence number for a named interactor, and whether it was found.

func ScaleI64

func ScaleI64(sourceURI, numeratorURI, denominatorURI string) *vm.Program

ScaleI64 returns a constraint program that computes deref(sourceURI) * deref(numeratorURI) / deref(denominatorURI). Division by zero returns 0.

func ScreenOrigin

func ScreenOrigin() (int64, int64)

ScreenOrigin returns the screen-space position of the app content origin.

func SetPickDebug

func SetPickDebug(v bool)

SetPickDebug enables or disables verbose pick tracing globally.

func SetRegistrySeq

func SetRegistrySeq(name string, seq uint64)

SetRegistrySeq sets the sequence number for a named interactor. Panics if the name is not in the registry.

func SetScreenOrigin

func SetScreenOrigin(x, y int64)

SetScreenOrigin records the screen-space position of the app content origin. Call this once from BackingStoreReady with AppX, AppY (NOT AppX+LeftInset — AppX already points to the content area).

func StandardPipeline

func StandardPipeline(root Interactor) (*AppDispatcher, *ClickAgent, *KeyAgent)

StandardPipeline creates the standard three-policy dispatch pipeline:

  1. “clickdrag” (focus) — ClickDragAgent captures move/release during active ClickDraggable interaction
  2. “clickdrag-pick” (positional) — ClickDragAgent picks ClickDraggable targets on press
  3. “click” (positional) — ClickAgent recognizes single/double/triple clicks
  4. “keyboard” (focus) — KeyAgent forwards to keyboard focus target

Returns the dispatcher, the ClickAgent (for CheckTimer calls), and the KeyAgent.

func SubI64

func SubI64(aURI, bURI string) *vm.Program

SubI64 returns a constraint program that computes aURI - bURI.

func SwapRB

func SwapRB(c color.NRGBA) color.NRGBA

SwapRB returns a copy of c with the red and blue channels exchanged. Use this when writing directly to a BGR framebuffer with colors that did not come from a palette (which pre-swaps its own colors).

func SwapSequence

func SwapSequence(a, b string)

SwapSequence swaps the registration sequence numbers of two named interactors, changing their order in FindChildren results.

func ThumbFracPermille

func ThumbFracPermille(visibleURI, totalURI string) *vm.Program

ThumbFracPermille returns a constraint program that computes the scrollbar thumb fraction in permille (0..1000) from a `visible` count and `total` count. Both URIs hold int64 attributes in the SAME UNITS (rows for row-based scrollers, pixels for pixel-based). Edge cases: total ≤ 0 or visible ≥ total → 1000 (full track); visible ≤ 0 → 0. Output binds to Scrollbar.ThumbFracPermilleAttr.

func UnregisterInteractor

func UnregisterInteractor(name string)

UnregisterInteractor removes an interactor from the global registry.

type Agent

Agent translates raw InputEvents into semantic protocol callbacks. Each agent targets a specific protocol interface and maintains its own state machine.

type Agent interface {
    // Name returns the agent identifier (used in debug logs).
    Name() string
    // Deliver attempts to deliver ev to target. Returns true if consumed.
    Deliver(ev *InputEvent, target Interactor) bool
}

type Alignment

Alignment controls cross-axis positioning of children within a container. For Column (vertical layout), this aligns children horizontally. For Row (horizontal layout), this aligns children vertically.

type Alignment int

const (
    AxisMinimum Alignment = 0 // left (Column) or top (Row)
    AxisMiddle  Alignment = 1 // centered
    AxisMaximum Alignment = 2 // right (Column) or bottom (Row)
)

type Animatable

Animatable is implemented by interactors that participate in rachel’s animation protocol. AppWindow dispatches animation messages to registered Animatable interactors using their local animation ID.

type Animatable interface {
    // AnimationStart is called when an animation with the given local ID begins.
    AnimationStart(localID uint64, startNanos int64)
    // AnimationUpdate is called on each animation tick with elapsed-time fractions.
    AnimationUpdate(localID uint64, startNanos, endNanos int64, coveredStart, coveredEnd float64, nanosSinceStart int64)
    // AnimationFinish is called when the animation ends.
    AnimationFinish(localID uint64, endNanos int64)
}

type AppDispatcher

AppDispatcher is the top-level dispatch pipeline for a shepherd app. It converts WM messages to local-coordinate InputEvents and routes them through ordered policies.

type AppDispatcher struct {

    // PickFn returns interactors under (x, y) in local coords,
    // front-to-back. Default: PickTree.
    PickFn func(x, y int64) []Interactor

    // OriginX, OriginY are the AppWindow's screen-space origin.
    // Set from BackingStoreReady inset values. Used to translate
    // screen coords to local coords.
    OriginX, OriginY int64

    // Debug enables tracing of dispatch decisions to UART.
    Debug bool
    // Tag is a short prefix for debug output (e.g. "clocks").
    Tag string
    // contains filtered or unexported fields
}

func NewAppDispatcher

func NewAppDispatcher(root Interactor) *AppDispatcher

NewAppDispatcher creates a dispatcher rooted at the given interactor.

func (*AppDispatcher) AddPolicy

func (d *AppDispatcher) AddPolicy(p *AppPolicy)

AddPolicy appends a policy to the dispatch pipeline.

func (*AppDispatcher) DispatchWM

func (d *AppDispatcher) DispatchWM(wmMsg any) bool

DispatchWM is the entry point called from the shepherd’s message loop. It accepts a raw WM message (any from wm.DecodeShepherdNotify), converts to InputEvent with local coordinates, and routes through the policy pipeline. Returns true if consumed.

type AppPolicy

AppPolicy is a named routing strategy with an ordered agent list.

type AppPolicy struct {
    // contains filtered or unexported fields
}

func NewAppPolicy

func NewAppPolicy(name string, kind AppPolicyKind) *AppPolicy

NewAppPolicy creates a policy with the given name and routing kind.

func (*AppPolicy) AddAgent

func (p *AppPolicy) AddAgent(a Agent)

AddAgent appends an agent to this policy’s agent list.

func (*AppPolicy) Kind

func (p *AppPolicy) Kind() AppPolicyKind

Kind returns the policy’s routing kind.

func (*AppPolicy) Name

func (p *AppPolicy) Name() string

Name returns the policy’s name.

type AppPolicyKind

AppPolicyKind determines how a policy routes events.

type AppPolicyKind int

const (
    // AppPolicyFocus delivers to the agent's focus target.
    AppPolicyFocus AppPolicyKind = iota
    // AppPolicyPositional delivers to interactors under the cursor via PickFn.
    AppPolicyPositional
    // AppPolicyMonitorFocus delivers to focus but never consumes.
    AppPolicyMonitorFocus
    // AppPolicyMonitorPositional delivers positionally but never consumes.
    AppPolicyMonitorPositional
)

type ChildAccessor

ChildAccessor is implemented by decorator interactors that wrap a single child.

type ChildAccessor interface {
    // GetChild returns the wrapped child [Drawer], or nil.
    GetChild() Drawer
}

type ClassicFace

ClassicFace draws a traditional analog clock with dot hour markers, three hands (hour, minute, second), and a center dot.

type ClassicFace struct {
    HandColor color.NRGBA    // hand and marker color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*ClassicFace) DrawFace

func (f *ClassicFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the classic clock face.

func (*ClassicFace) FaceName

func (f *ClassicFace) FaceName() string

FaceName returns the short display name “Classic”.

func (*ClassicFace) Location

func (f *ClassicFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type ClickAgent

ClickAgent implements a FSM that recognizes single, double, and triple clicks. It dispatches to Clickable, DoubleClickable, and TripleClickable protocol interfaces on the picked target.

Single clicks are committed immediately on release for responsiveness. If the target also implements DoubleClickable, the agent continues listening — a second click within ClickTimeout fires DoubleClick, which overrides the already-committed single click. The interactor is responsible for handling the override (typically the DoubleClick just sets new state, overwriting what Click did).

If the target only implements Clickable (not DoubleClickable), the agent resets immediately after committing — no timeout, zero delay.

type ClickAgent struct {

    // ClickTimeout is the maximum delay between clicks for multi-click
    // recognition. Default: 250ms.
    ClickTimeout time.Duration

    // ClickRadius is the maximum cursor movement between clicks.
    // Default: 5 pixels.
    ClickRadius int64
    // contains filtered or unexported fields
}

func NewClickAgent

func NewClickAgent() *ClickAgent

NewClickAgent creates a ClickAgent with default timeout and radius.

func (*ClickAgent) CheckTimer

func (a *ClickAgent) CheckTimer() bool

CheckTimer cleans up stale state whose deadline has expired. With immediate commit, clicks are already fired — the timer just resets the FSM so it stops waiting for multi-click follow-ups. Returns true if state was cleaned up (caller should redraw).

func (*ClickAgent) Deliver

func (a *ClickAgent) Deliver(ev *InputEvent, target Interactor) bool

Deliver processes a raw press/release event through the click FSM.

func (*ClickAgent) Name

func (a *ClickAgent) Name() string

Name returns the agent’s identifier for dispatch logging.

type ClickDragAgent

ClickDragAgent handles the three-phase press-drag-release protocol for ClickDraggable interactors (scrollbar thumbs, buttons, sliders).

On EvPress, it checks if the picked target implements ClickDraggable and calls ClickDragStart. If accepted, the agent captures the target — all subsequent EvMove and the final EvRelease are delivered focus-style, regardless of cursor position. The agent computes outsideBounds by testing the cursor against the target’s layout bounds.

type ClickDragAgent struct {
    // contains filtered or unexported fields
}

func (*ClickDragAgent) Deliver

func (a *ClickDragAgent) Deliver(ev *InputEvent, target Interactor) bool

Deliver routes an event to the appropriate ClickDraggable method.

func (*ClickDragAgent) FocusTarget

func (a *ClickDragAgent) FocusTarget() Interactor

FocusTarget returns the captured target, or nil when idle.

func (*ClickDragAgent) Name

func (a *ClickDragAgent) Name() string

Name returns the agent’s identifier for dispatch logging.

func (*ClickDragAgent) SetFocus

func (a *ClickDragAgent) SetFocus(t Interactor)

SetFocus sets the captured target. Typically only used internally.

type ClickDraggable

ClickDraggable is the three-phase press-drag-release protocol for scrollbar thumbs, buttons, sliders, and any interactor where the user presses, optionally moves, and releases.

The agent manages the FSM: on press it calls ClickDragStart. The agent then captures mouse movement (focus-style, regardless of cursor position) and delivers ClickDragMove with outsideBounds indicating whether the cursor has left the interactor’s bounds. On release, ClickDragEnd is called with the same outsideBounds signal.

The outsideBounds parameter drives visual feedback: a button shows “armed” when inside, “disarmed” when outside. A scrollbar thumb continues tracking regardless. The interactor decides what outsideBounds means for its own semantics.

type ClickDraggable interface {
    // ClickDragStart is called on press. Return true to begin a drag.
    ClickDragStart(ev *InputEvent) bool
    // ClickDragMove is called on each move while the drag is active.
    ClickDragMove(ev *InputEvent, startEv *InputEvent, outsideBounds bool) bool
    // ClickDragEnd is called on release. outsideBounds reports cursor position.
    ClickDragEnd(ev *InputEvent, outsideBounds bool) bool
}

type Clickable

Clickable receives single-click callbacks.

type Clickable interface {
    // Click is invoked on a recognized single click. Returns true if consumed.
    Click(ev *InputEvent) bool
}

type ClipEdge

ClipEdge indicates which edge of the clip rect has overflow.

type ClipEdge int

const (
    ClipRight  ClipEdge = iota // Row: child overflows to the right
    ClipBottom                 // Column: child overflows downward
)

type ClippedContext

ClippedContext wraps a DrawContext and enforces rectangular clipping on one edge. It saves overflow pixels before the child draws, then restores them in Flush(). Only the overflow side is saved — the child’s shadows on other sides (within the parent) are left intact.

type ClippedContext struct {
    DrawContext
    // contains filtered or unexported fields
}

func WithClip

func WithClip(dc DrawContext, clipX, clipY, clipW, clipH, pad float64, edge ClipEdge) *ClippedContext

WithClip creates a ClippedContext that will erase overflow drawing past the given clip rectangle on the specified edge. pad is the maximum shadow spread the child might draw beyond the clip boundary.

For ClipRight (Row): saves the strip to the right of clipX+clipW. For ClipBottom (Column): saves the strip below clipY+clipH.

func (*ClippedContext) Flush

func (c *ClippedContext) Flush()

Flush restores the overflow pixels saved during WithClip construction.

type ClockFace

ClockFace defines how an analog clock renders and what timezone it displays. Implementations control the visual appearance of the face, markers, hands, and center. The Clock interactor handles layout and time conversion.

type ClockFace interface {
    // DrawFace renders the complete clock within a circle centered at (cx, cy)
    // with the given radius. Time components are already converted to the
    // face's local timezone by the Clock interactor.
    DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

    // Location returns the timezone for this clock face.
    Location() *time.Location

    // FaceName returns a short display name for this face style.
    FaceName() string
}

type DamageAttributes

DamageAttributes holds “last painted” mirror attributes and the computed damage rectangle for an interactor. The damage rectangle is the union of current and last-painted bounds when any tracked property changes.

type DamageAttributes struct {
    DamageRect    *attr.Attribute[vm.Value] // constraint: damaged region (empty if no change)
    LPBounds      *attr.Attribute[vm.Value] // value: last-painted bounds (set after painting)
    LPVisible     *attr.Attribute[bool]     // value: last-painted visibility
    LPBoundsHash  *attr.Attribute[int64]    // value: last-painted bounds hash
    LPBgColor     *attr.Attribute[int64]    // value: last-painted background color
    LPFgColor     *attr.Attribute[int64]    // value: last-painted foreground color
    LPContentHash *attr.Attribute[int64]    // value: last-painted content hash
}

type DataType

DataType identifies the type segment in an attribute URI.

type DataType string

const (
    DataTypeInt64 DataType = "int64"
    DataTypeBool  DataType = "bool"
    DataTypeStr   DataType = "str"
    DataTypeRect  DataType = "rect"
)

type Decoratable

Decoratable is implemented by types that customize the visual decoration drawn by [impl.Decorator]. The default [impl.Decorator] draws a thick black box; [std.NeuBox] and [std.NeuCircle] override Decorate to draw neumorphic shadows, and [std.AppWindow] draws both shadows and a title bar.

x, y, w, h are the decorator’s authoritative bounds from its parent.

type Decoratable interface {
    // Decorate draws the visual decoration around the decorator's child.
    Decorate(self Interactor, x, y, w, h int64)
}

type DetailedHit

DetailedHit is optionally implemented by interactors that need finer-grained hit testing than their rectangular bounds. The mouse state machine calls DetailedHit with local coordinates after the bounding-box check passes. If the interactor does not implement this interface, the bounding-box hit is accepted as-is.

type DetailedHit interface {
    // DetailedHit returns true if (localX, localY) is a real hit beyond the bounding-box check.
    DetailedHit(localX, localY int64) bool
}

type DigitFace

DigitFace draws an analog clock with Arabic numerals rotated to match their angular position around the dial. 12 is upright, 3 is rotated 90° clockwise, 6 is upside-down, 9 is rotated 270° clockwise, etc.

type DigitFace struct {
    HandColor color.NRGBA    // hand and digit color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*DigitFace) DrawFace

func (f *DigitFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the digit clock face with rotated numerals.

func (*DigitFace) FaceName

func (f *DigitFace) FaceName() string

FaceName returns the short display name “Digital”.

func (*DigitFace) Location

func (f *DigitFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type DoubleClickable

DoubleClickable receives double-click callbacks.

type DoubleClickable interface {
    // DoubleClick is invoked on a recognized double click. Returns true if consumed.
    DoubleClick(ev *InputEvent) bool
}

type DrawContext

DrawContext is the unified drawing surface for all interactor rendering. It is a type alias for [textshape.DrawContext], the canonical definition shared between louis14 and the mazarin UI toolkit.

DrawContext is propagated from parent to child during the draw pass via SetDC (see [impl.Interactor.SetDC]). All interactors access it through self.DC() in their NewDrawer.Draw method.

ClippedContext wraps a DrawContext to enforce rectangular clipping by saving/restoring overflow pixels — used by [std.Column], [std.Row], and [std.AppWindow] for child overflow.

type DrawContext = textshape.DrawContext

func NewDrawContextForImage

func NewDrawContextForImage(target *image.RGBA, provider textshape.GlyphProvider) DrawContext

NewDrawContextForImage creates a DrawContext that renders onto an existing RGBA image using the given GlyphProvider for text rendering. On mazarin, the provider is backed by fontsvc IPC; on the host OS, it can be a DirectGlyphProvider. Application code receives the DrawContext interface and never interacts with the provider directly.

type Drawer

Drawer draws itself into the given bounds using a DrawContext. This is the legacy interface — new interactors should implement NewDrawer instead.

type Drawer interface {
    // Draw paints this interactor into the given bounds.
    Draw(dc DrawContext, x, y, w, h float64)
}

type EventKind

EventKind identifies the type of input event.

type EventKind uint8

const (
    EvPress   EventKind = iota // mouse button press
    EvRelease                  // mouse button release
    EvMove                     // mouse move
    EvKeyDown                  // key press
    EvKeyUp                    // key release
)

type Face

Face draws content into a rectangular area. It is the base interface for all content rendered on the face of neumorphic shapes, menu segments, buttons, and other interactors.

The caller sets color and clipping on the DrawContext before calling DrawFace. Implementations render content but do not clear the background or modify persistent DC state.

type Face interface {
    // DrawFace paints content into the given rectangle.
    DrawFace(dc DrawContext, x, y, w, h float64)
}

type Feature

Feature selects a font variant within a family. Used by Theme.Font and FontResolver to request specific weights and styles.

type Feature int

const (
    None       Feature = iota // Regular weight, upright.
    Bold                      // Bold weight.
    Italic                    // Italic style.
    BoldItalic                // Bold weight, italic style.
    Light                     // Light weight.
    Condensed                 // Condensed width.
)

func (Feature) String

func (f Feature) String() string

String returns the style name used by the font index CSV.

type FlushParams

FlushParams controls the thin edge outline for the Flush depth state. EdgeW is the stroke width; EdgeAlpha is the opacity of both the dark and light edge strokes.

type FlushParams struct {
    // EdgeW is the stroke width of the edge outline.
    EdgeW float64
    // EdgeAlpha is the opacity of the dark and light edge strokes.
    EdgeAlpha uint8
}

type FocusAgent

FocusAgent is an Agent that maintains a designated focus target. Used with AppPolicyFocus policies. When FocusTarget returns non-nil, events are delivered to that target regardless of cursor position.

type FocusAgent interface {
    Agent
    // FocusTarget returns the current focus target, or nil if none.
    FocusTarget() Interactor
    // SetFocus designates target as the new focus target.
    SetFocus(target Interactor)
}

type FocusClaimer

FocusClaimer is implemented by interactors that can claim in-app keyboard focus. Children call FocusClaimer.SetFocusToSelf() on their parent to request focus when clicked or otherwise activated.

type FocusClaimer interface {
    // SetFocusToSelf requests in-app keyboard focus for this interactor.
    SetFocusToSelf()
}

type FontConfig

FontConfig holds font loading and text measurement functions, independent of palette or rendering configuration. It is returned by Theme.Font and Theme.DefaultFont.

If LoadFace is nil (e.g., when no FontResolver was provided to the theme), text measurement falls back to a rough character-width estimate.

If Layout is non-nil, [MeasureText] uses shaped text measurement instead of the simple face-based measurement. Interactors check Layout to decide whether to use the shaped text rendering path.

type FontConfig struct {
    // LoadFace creates a font.Face at the given size.
    LoadFace func(bold bool, size int64) font.Face

    // FontRegular is the path to the regular-weight font file.
    // Used when LoadFace is nil.
    FontRegular string

    // FontBold is the path to the bold-weight font file.
    // Used when LoadFace is nil.
    FontBold string

    // Layout is the text shaping+layout engine. When non-nil,
    // MeasureText uses shaped measurement and interactors use the
    // shaped rendering path via DrawShapedText.
    Layout textshape.TextLayout

    // ShapedFontID is the fontID registered with Layout for this config.
    // Only valid when Layout is non-nil.
    ShapedFontID int32
}

func (*FontConfig) MeasureText

func (fc *FontConfig) MeasureText(text string, bold bool, fontSize int64) float64

MeasureText returns the advance width of text at the given font size.

type FontResolver

FontResolver loads a font.Face for a given family, Feature, and point size. It is typically backed by a font cache (e.g., fontcache.FontCache). Passed to [theme.NewDefaultTheme] at application startup.

type FontResolver func(family string, feature Feature, size int64) font.Face

type FramebufferContext

FramebufferContext wraps the GPU framebuffer as an *image.RGBA and provides Flush for sending dirty regions to the GPU. This is the minimal bridge between mancini rendering (via *gg.Context) and the hardware framebuffer.

type FramebufferContext struct {
    // contains filtered or unexported fields
}

func NewFramebufferContext

func NewFramebufferContext() *FramebufferContext

NewFramebufferContext maps the GPU framebuffer and returns a context for rendering into it. The returned Image() can be passed to gg.NewContextForRGBA for neumorphic rendering.

func (*FramebufferContext) Flush

func (fc *FramebufferContext) Flush(x0, y0, x1, y1 int32)

Flush sends the given rectangle to the GPU.

func (*FramebufferContext) Image

func (fc *FramebufferContext) Image() *image.RGBA

Image returns the framebuffer as an *image.RGBA.

type HAlign

HAlign controls horizontal text placement within the draw rectangle.

type HAlign int

const (
    HAlignCenter HAlign = iota // Centered horizontally (default).
    HAlignLeft                 // Flush to the left edge.
    HAlignRight                // Flush to the right edge.
)

type InputEvent

InputEvent is a local-coordinate input event. Coordinates are relative to the AppWindow origin — the AppDispatcher translates from screen coordinates before dispatching.

type InputEvent struct {
    Kind   EventKind
    Code   uint16 // evdev keycode or mouse button code
    X, Y   int64  // local coordinates
    Mods   uint64 // modifier bitmask (hid.ModXxx)
    Char   rune   // translated character (0 if non-printable); set by rachel's KeyMapper
    Action string // action name ("backspace", "enter", etc.); set by rachel's KeyMapper
}

func (*InputEvent) IsKeyboard

func (e *InputEvent) IsKeyboard() bool

IsKeyboard reports whether the event is a key down or key up.

func (*InputEvent) IsMouseButton

func (e *InputEvent) IsMouseButton() bool

IsMouseButton reports whether the event is a mouse press or release.

func (*InputEvent) IsMouseMove

func (e *InputEvent) IsMouseMove() bool

IsMouseMove reports whether the event is a mouse move.

type InsetParams

InsetParams controls the inner shadow layers for the Inset depth state. Off is the shadow offset (dark biased upper-left, light biased lower-right). DarkBlur and LightBlur set the Gaussian blur radius for each shadow layer. Inner shadows are masked to the shape boundary.

type InsetParams struct {
    // Off is the inner shadow offset in pixels.
    Off float64
    // DarkBlur and LightBlur set the Gaussian blur radius for each inner shadow layer.
    DarkBlur, LightBlur float64
}

type Interactor

Interactor is the base interface for all UI elements in the tree. Every concrete interactor type satisfies this interface via struct embedding of [impl.Interactor] or [impl.ThemedInteractor].

Position (X, Y) and size (W, H) are read from LayoutAttributes published in the constraint network. DrawContext is set by the parent before each draw pass via SetDC.

type Interactor interface {
    // X returns the interactor's local X position.
    X() int64
    // Y returns the interactor's local Y position.
    Y() int64
    // W returns the interactor's width.
    W() int64
    // H returns the interactor's height.
    H() int64
    // Visible reports whether the interactor should be drawn.
    Visible() bool
    // DC returns the [DrawContext] propagated from the parent.
    DC() DrawContext

    // ScreenCoordConvertTo converts a point in this interactor's local
    // coordinate frame to screen-absolute coordinates. Passing (0,0)
    // returns the screen position of this interactor's top-left corner.
    ScreenCoordConvertTo(localX, localY int64) (int64, int64)

    // ScreenCoordConvertFrom converts screen-absolute coordinates to
    // this interactor's local coordinate frame.
    ScreenCoordConvertFrom(screenX, screenY int64) (int64, int64)
}

func FindChildren

func FindChildren(parentName string) []Interactor

FindChildren discovers children of the named parent via the constraint network. It calls attr.Find with the wildcard Parent pattern, reads each matching Parent value, filters by parentName, extracts the child’s constraint-system name from the URI, looks it up in the registry, and returns them sorted by registration sequence number.

func LookupInteractor

func LookupInteractor(name string) Interactor

LookupInteractor returns the interactor registered under the given constraint-system name, or nil if not found.

func PickTree

func PickTree(x, y int64, root Interactor) []Interactor

PickTree walks the mancini interactor tree via the Picker interface and returns all interactors whose bounds contain (x, y). Coordinates are in the app-local frame (the same frame as dispatch event coordinates).

Each interactor’s Picker.Pick method handles its own bounds check, child traversal, and coordinate conversion. Concrete types like [std.Scroller] override Pick to apply virtual-space transforms.

Results are front-to-back: deepest children first, then ancestors.

type KeyAgent

KeyAgent forwards keyboard events to a designated focus target that implements KeyPressable. Char and Action are pre-translated by rachel’s KeyMapper and carried in the InputEvent.

type KeyAgent struct {
    // contains filtered or unexported fields
}

func (*KeyAgent) Deliver

func (a *KeyAgent) Deliver(ev *InputEvent, target Interactor) bool

Deliver translates keyboard events via the KeyMapper and fires KeyPress on the focus target.

func (*KeyAgent) FocusTarget

func (a *KeyAgent) FocusTarget() Interactor

FocusTarget returns the Interactor currently receiving key events, or nil.

func (*KeyAgent) Name

func (a *KeyAgent) Name() string

Name returns the agent’s identifier for dispatch logging.

func (*KeyAgent) SetFocus

func (a *KeyAgent) SetFocus(t Interactor)

SetFocus directs subsequent key events to t.

type KeyMapper

KeyMapper translates raw evdev keycodes into characters and actions, accounting for modifier state (shift, ctrl, alt, meta) and internal state like capslock. Implementations must be safe for concurrent use.

Rachel loads a KeyMapper from keymapper.maz at startup. The TOML config specifies which keymap to use (e.g. keymap = “us”).

type KeyMapper interface {
    // Map translates a raw evdev keycode into a character and/or action.
    // code is the evdev keycode, pressed is true for key-down / false for
    // key-up, and mods is the modifier bitmask (hid.ModXxx).
    // Returns:
    //   ch: the translated character (0 if modifier-only or non-printable)
    //   action: a named action ("enter", "backspace", "escape", etc.) or ""
    Map(code uint16, pressed bool, mods uint64) (ch rune, action string)

    // Name returns the keymap name (e.g. "identity", "us", "dvorak-qwerty").
    Name() string
}

type KeyMapperInit

KeyMapperInit implements KeyMapperInjector. Rachel fills in KeymapName, passes it to keymapper.maz, and reads back the Mapper field.

type KeyMapperInit struct {
    KeymapName string
    Mapper     KeyMapper
}

func (*KeyMapperInit) GetKeymapName

func (k *KeyMapperInit) GetKeymapName() string

GetKeymapName implements KeyMapperInjector.

func (*KeyMapperInit) RegisterKeyMapper

func (k *KeyMapperInit) RegisterKeyMapper(km KeyMapper)

RegisterKeyMapper implements KeyMapperInjector.

type KeyMapperInjector

KeyMapperInjector is the interface used for cross-module injection between rachel and keymapper.maz. Rachel creates a KeyMapperInit, passes it to keymapper.maz’s MazarinShepherd. Keymapper calls RegisterKeyMapper with the constructed mapper. Rachel reads it back from the struct’s Mapper field.

This uses the same callback-registration pattern as FontSvcInjector to ensure the linker keeps interface methods alive in both binaries.

type KeyMapperInjector interface {
    // GetKeymapName returns the name of the keymap to load (e.g. "us").
    GetKeymapName() string
    // RegisterKeyMapper stores the constructed [KeyMapper] for the caller to read back.
    RegisterKeyMapper(km KeyMapper)
}

type KeyPressable

KeyPressable receives matched key-press events (down+up pair). The KeyAgent handles keymap translation via a KeyMapper and matches EvKeyDown with EvKeyUp to produce KeyPress callbacks.

type KeyPressable interface {
    KeyPress(ch rune, action string, ev *InputEvent) bool
}

type KeyReceivable

KeyReceivable handles keyboard events.

type KeyReceivable interface {
    // KeyDown is called on a key-down event. Returns true if consumed.
    KeyDown(ev *InputEvent) bool
    // KeyUp is called on a key-up event. Returns true if consumed.
    KeyUp(ev *InputEvent) bool
}

type LatinTextFace

LatinTextFace extends Face for Latin left-to-right text rendering. [SetText] updates the text to render; [Text] returns the current text; [MeasureText] returns the advance width without rasterization.

The standard implementation is [impl.LatinTextFaceImpl].

type LatinTextFace interface {
    Face
    // SetText updates the text rendered by this face.
    SetText(text string)
    // Text returns the current text.
    Text() string
    // MeasureText returns the advance width of text without rasterizing.
    MeasureText(text string) float64
}

type LayoutAttributes

LayoutAttributes holds constraint system attributes for an interactor’s layout.

type LayoutAttributes struct {
    X, Y, Width, Height *attr.Attribute[int64]    // local position and size
    Visible             *attr.Attribute[bool]     // visibility flag
    Bounds              *attr.Attribute[vm.Value] // Rectangle2D: (x, y, x+w, y+h)
    BoundsHash          *attr.Attribute[int64]    // hash of X,Y,W,H for fast change detection
    Parent              *attr.Attribute[string]   // parent's constraint-system name
    SpacingAttr         *attr.Attribute[int64]    // inter-child spacing (containers only)
    CrossAlignAttr      *attr.Attribute[int64]    // cross-axis alignment (containers only)
    MaxWidthAttr        *attr.Attribute[int64]    // max width for overflow clipping (Row)
    MaxHeightAttr       *attr.Attribute[int64]    // max height for overflow clipping (Column)
    LastChildDrawnAttr  *attr.Attribute[int64]    // 0-based index of last child to draw (Row/Column)
    Damage              *DamageAttributes         // damage rectangle tracking (nil = no damage)
    // contains filtered or unexported fields
}

func NewAppWindowLayout

func NewAppWindowLayout() *LayoutAttributes

NewAppWindowLayout creates layout attributes for the root AppWindow interactor. Width and Height are value attributes set by rachel via BackingStoreReady / WindowResized messages (outside-in sizing). The constraint name is always “AppWindow” so that rachel can locate it at a well-known path.

func NewBridgeLayout

func NewBridgeLayout(myName string, minW, maxW, minH, maxH int64) *LayoutAttributes

NewBridgeLayout creates layout attributes for the topmost child of an AppWindow. Width and Height are constraints that clamp AppWindow’s outside-in dimensions to the given [min, max] range, bridging outside-in sizing (from rachel) to inside-out sizing (children below compute their own sizes).

func NewDecoratorLayout

func NewDecoratorLayout(name string, parent Interactor, hPadding, vPadding, maxSize int64) *LayoutAttributes

NewDecoratorLayout creates layout attributes with inside-out constraint sizing for decorator-style parents. The parent interactor is used to extract the parent’s constraint-system name. hPadding and vPadding are the half-padding for width and height respectively: width = child.Width + 2*hPadding, height = child.Height + 2*vPadding (both clamped to maxSize). For symmetric decorators (equal insets), pass the same value for both. If no child is found, defaults from ProgDecorationWidth/Height apply (20/30).

func NewDecoratorLayoutByParentName

func NewDecoratorLayoutByParentName(myName, parentName string, hPadding, vPadding, maxSize int64) *LayoutAttributes

NewDecoratorLayoutByParentName is the string-based variant of NewDecoratorLayout. Prefer NewDecoratorLayout which takes an Interactor — this version exists for cases where only the parent’s constraint-system name is available.

func NewLayoutAttributes

func NewLayoutAttributes(myName, parent string) *LayoutAttributes

NewLayoutAttributes creates all layout attributes as Value attributes, plus a Bounds constraint derived from X, Y, Width, Height.

func NewLayoutAttributesBase

func NewLayoutAttributesBase(myName, parent string) *LayoutAttributes

NewLayoutAttributesBase creates X, Y, Visible, Parent attributes (no Width/Height).

func NewVerticalLineLayout

func NewVerticalLineLayout(myName, parent, heightSourceURI string) *LayoutAttributes

NewVerticalLineLayout creates layout attributes where Height is constrained to equal the source int64 attribute at heightSourceURI. Width is a value attribute (set by parent). X and Y are value attributes.

func (*LayoutAttributes) CleanConstraints

func (lh *LayoutAttributes) CleanConstraints()

CleanConstraints deletes all constraint attributes owned by this LayoutAttributes in dependency order. Constraints that read from other attributes are deleted first, then the leaf value attributes. After this call the LayoutAttributes should not be used.

func (*LayoutAttributes) ClearDamage

func (lh *LayoutAttributes) ClearDamage()

ClearDamage resets this interactor’s damage rectangle to empty (0,0,0,0). For value DamageRect attributes (leaves using FullDamage), this directly sets the value. For constraint DamageRect attributes (parents using InitDefaultParentDamage), this is a no-op — the constraint automatically re-evaluates to empty when all children clear their damage.

Called by [impl.ThemedInteractor.Draw] after painting.

func (*LayoutAttributes) FullDamage

func (lh *LayoutAttributes) FullDamage()

FullDamage sets this interactor’s damage rectangle to its full Bounds, forcing a complete repaint on the next draw pass. Creates the DamageAttributes and DamageRect if they don’t exist yet.

Called by [impl.Interactor.Initialize] to ensure the first draw paints everything. Also available for input handlers that need to force a full repaint (e.g., a clock face on tick).

func (*LayoutAttributes) GetCrossAlign

func (lh *LayoutAttributes) GetCrossAlign() Alignment

GetCrossAlign returns the current cross-axis alignment, or AxisMinimum if unavailable.

func (*LayoutAttributes) GetDamageRect

func (lh *LayoutAttributes) GetDamageRect() (x0, y0, x1, y1 int64)

GetDamageRect returns the current damage rectangle as (x0, y0, x1, y1). Returns (0,0,0,0) if no damage is pending.

func (*LayoutAttributes) GetSpacing

func (lh *LayoutAttributes) GetSpacing() float64

GetSpacing returns the current inter-child spacing value, or 0 if unavailable.

func (*LayoutAttributes) HasDamage

func (lh *LayoutAttributes) HasDamage() bool

HasDamage returns true if the damage rectangle is non-empty.

func (*LayoutAttributes) InitBounds

func (lh *LayoutAttributes) InitBounds(myName string)

InitBounds creates the Bounds constraint: rect(X, Y, X+Width, Y+Height), plus a BoundsHash constraint for fast layout-change detection.

func (*LayoutAttributes) InitLeafDamage

func (lh *LayoutAttributes) InitLeafDamage(bgColorURI, fgColorURI, contentHashURI string)

InitLeafDamage creates damage tracking for a leaf interactor (no children). bgColorURI and fgColorURI point to the interactor’s current color attributes. contentHashURI points to a content hash attribute (use “” for non-text interactors; the placeholder will remain unbound and the deref will return 0 — matching the LP default).

func (*LayoutAttributes) InitParentDamage

func (lh *LayoutAttributes) InitParentDamage(bgColorURI, fgColorURI, childDamageURI string)

InitParentDamage creates damage tracking for a parent interactor. childDamageURI is the URI of the first child’s DamageRect attribute.

func (*LayoutAttributes) Name

func (lh *LayoutAttributes) Name() string

Name returns the interactor’s constraint-system name.

func (*LayoutAttributes) PushDamageClip

func (lh *LayoutAttributes) PushDamageClip(dc DrawContext) bool

PushDamageClip reads this interactor’s DamageRect and, if non-empty, sets a clip rectangle on the DrawContext to restrict drawing to the damaged region. Returns true if a clip was pushed (caller must call PopDamageClip to restore). Returns false if no damage or no clip was needed (full bounds = no restriction).

Used by parent Draw methods to avoid redrawing the entire window when only a small region changed.

func (*LayoutAttributes) SnapshotDamage

func (lh *LayoutAttributes) SnapshotDamage()

SnapshotDamage copies current visual state into last-painted attributes. Called by the draw loop after painting an interactor. Only writes when the value has actually changed, to avoid triggering spurious constraint re-evaluations and eager notifications.

func (*LayoutAttributes) SnapshotDamageColors

func (lh *LayoutAttributes) SnapshotDamageColors(bgColor, fgColor int64)

SnapshotDamageColors copies current color values into last-painted attributes. bgColor and fgColor are the current values to snapshot. Only writes when the value has actually changed.

func (*LayoutAttributes) SnapshotDamageContentHash

func (lh *LayoutAttributes) SnapshotDamageContentHash(hash int64)

SnapshotDamageContentHash copies a content hash into the last-painted attribute. Only writes when the value has actually changed.

type LayoutProp

LayoutProp identifies a layout property name in an attribute URI. The Suffix method returns the “/layout/<prop>” form used in constraint program bindings.

type LayoutProp string

const (
    // Core layout properties.
    LayoutX       LayoutProp = "X"
    LayoutY       LayoutProp = "Y"
    LayoutWidth   LayoutProp = "Width"
    LayoutHeight  LayoutProp = "Height"
    LayoutVisible LayoutProp = "Visible"
    LayoutParent  LayoutProp = "Parent"

    // Derived layout properties.
    LayoutBounds     LayoutProp = "Bounds"
    LayoutBoundsHash LayoutProp = "BoundsHash"

    // Container properties (Row, Column, ColumnOutsideIn).
    LayoutSpacing        LayoutProp = "Spacing"
    LayoutCrossAlign     LayoutProp = "CrossAlign"
    LayoutMaxWidth       LayoutProp = "MaxWidth"
    LayoutLastChildDrawn LayoutProp = "LastChildDrawn"
    LayoutMinHeight      LayoutProp = "MinHeight"
    LayoutMaxHeight      LayoutProp = "MaxHeight"

    // Decorator properties (NeuBox, NeuCircle, AppWindow, AppTitleBar).
    LayoutPadding  LayoutProp = "Padding"
    LayoutHPadding LayoutProp = "HPadding"
    LayoutVPadding LayoutProp = "VPadding"
    LayoutMaxSize  LayoutProp = "MaxSize"

    // Clock properties.
    LayoutFaceName LayoutProp = "FaceName"

    // MultiLineText properties.
    LayoutText         LayoutProp = "Text"
    LayoutTextDirty    LayoutProp = "TextDirty"
    LayoutTextLen      LayoutProp = "TextLen"
    LayoutTextPageAddr LayoutProp = "TextPageAddr"
    LayoutLineCount    LayoutProp = "LineCount"
    LayoutCursorLine   LayoutProp = "CursorLine"
    LayoutCursorCol    LayoutProp = "CursorCol"
    LayoutTopLine      LayoutProp = "TopLine"
    LayoutMaxLineCount LayoutProp = "MaxLineCount"

    // Damage rectangle tracking.
    LayoutDamageRect    LayoutProp = "DamageRect"
    LayoutLPBounds      LayoutProp = "LPBounds"
    LayoutLPVisible     LayoutProp = "LPVisible"
    LayoutLPBoundsHash  LayoutProp = "LPBoundsHash"
    LayoutLPBgColor     LayoutProp = "LPBgColor"
    LayoutLPFgColor     LayoutProp = "LPFgColor"
    LayoutLPContentHash LayoutProp = "LPContentHash"
)

func (LayoutProp) Suffix

func (p LayoutProp) Suffix() string

Suffix returns the “/layout/<prop>” form used in constraint program bindings.

type Layouter

Layouter is implemented by interactors that have LayoutAttributes. All interactors that embed [impl.Interactor] satisfy this interface via the promoted GetLayout method.

type Layouter interface {
    // GetLayout returns this interactor's layout attributes.
    GetLayout() *LayoutAttributes
}

type MetricFace

MetricFace draws an analog clock using French Revolutionary / metric time: 10 hours per day, 100 minutes per hour, 100 seconds per minute. The dial shows digits 0-9 evenly spaced (36 degrees each), with 0 at top. All hands move slower than conventional clocks because one revolution of the hour hand covers an entire day.

type MetricFace struct {
    HandColor color.NRGBA    // hand and digit color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone (for converting UTC to local midnight)
}

func (*MetricFace) DrawFace

func (f *MetricFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the metric clock face. The hour/minute/second/millis parameters are conventional (24h) local time; this method converts them to metric time for display.

func (*MetricFace) FaceName

func (f *MetricFace) FaceName() string

FaceName returns the short display name “Metric”.

func (*MetricFace) Location

func (f *MetricFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type MouseState

MouseState tracks the press-drag-release state machine for mouse interactions. Create one with NewMouseState and call Press/Move/Release from the event loop.

type MouseState struct {
    // contains filtered or unexported fields
}

func NewMouseState

func NewMouseState(interactors []Drawer) *MouseState

NewMouseState creates a MouseState for the given set of interactors.

func (*MouseState) Move

func (m *MouseState) Move(x, y int64)

Move handles a mouse move at global coordinates (x, y) during a drag. Transitions between armed and disarmed states.

func (*MouseState) Press

func (m *MouseState) Press(x, y int64)

Press handles a mouse press at global coordinates (x, y). Hit-tests each interactor and begins an interaction if one is found.

func (*MouseState) Release

func (m *MouseState) Release(x, y int64)

Release handles a mouse release at global coordinates (x, y). Completes the interaction: success if armed, failure if disarmed.

func (*MouseState) SetTargets

func (m *MouseState) SetTargets(interactors []Drawer)

SetTargets replaces the set of interactors that receive mouse events.

type MovadoFace

MovadoFace draws a minimalist clock inspired by the Movado Museum Watch: clean face, single dot marker at 12 o’clock.

type MovadoFace struct {
    HandColor color.NRGBA    // hand and dot color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*MovadoFace) DrawFace

func (f *MovadoFace) DrawFace(dc DrawContext, _ *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the Movado-style clock face.

func (*MovadoFace) FaceName

func (f *MovadoFace) FaceName() string

FaceName returns the short display name “Movado”.

func (*MovadoFace) Location

func (f *MovadoFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type NeuDepth

NeuDepth represents the neumorphic depth of an interactor relative to the surface. It controls which shadow treatment is applied by [std.NeuBoxWith] and [std.NeuCircleWith].

Interactive controls like [std.Button] use NeuDepth.MouseDown to animate between states on press/release.

type NeuDepth int

const (
    Raised NeuDepth = iota // Proud of the surface — casts outer shadows.
    Flush                  // Level with the surface — thin edge outline only.
    Inset                  // Recessed into the surface — inner shadows.
)

func (NeuDepth) MouseDown

func (d NeuDepth) MouseDown() NeuDepth

MouseDown returns the depth a button transitions to when pressed.

Raised → Inset  (pushes below surface)
Flush  → Inset  (pushes below surface)
Inset  → Flush  (pops back to surface level)

func (NeuDepth) String

func (d NeuDepth) String() string

String returns the depth’s name (“Raised”, “Flush”, “Inset”).

type NeuParams

NeuParams bundles per-depth drawing parameters for an interactor class. Each NeuDepth state has its own parameter sub-struct. Interactors select which sub-struct to use based on their current depth.

A nil *NeuParams disables all neumorphic rendering. See NeumorphicParams for details on the nil convention.

type NeuParams struct {
    // Raised holds parameters for the [Raised] depth state.
    Raised RaisedParams
    // Flush holds parameters for the [Flush] depth state.
    Flush FlushParams
    // Inset holds parameters for the [Inset] depth state.
    Inset InsetParams
}

type NeumorphicParams

NeumorphicParams provides two weight classes of shadow parameters, delivered through Theme.Neumorphic. The default implementation is [theme.DefaultNeumorphicParams].

Either method may return nil to disable neumorphic rendering for that weight class. All interactors in mazzy/mazarin/mancini/std handle nil gracefully by falling back to flat rendering.

type NeumorphicParams interface {
    // Heavy returns window-weight neumorphic parameters, or nil to disable.
    Heavy() *NeuParams
    // Light returns control-weight neumorphic parameters, or nil to disable.
    Light() *NeuParams
}

type NewDrawer

NewDrawer is the standard draw protocol for all interactors. The parent passes authoritative x, y, w, h — these override any stale layout handle values. The self parameter is the backpointer to the concrete type, enabling virtual dispatch for DC(), Visible(), and other interface methods. The damage parameter is the region that needs repainting; interactors whose bounds do not intersect it can skip drawing. See the package documentation for details on the backpointer pattern.

All concrete interactors in mazzy/mazarin/mancini/std implement this interface.

type NewDrawer interface {
    // Draw paints this interactor into the given bounds, restricted to damage.
    Draw(self Interactor, x, y, w, h int64, damage image.Rectangle)
}

type Palette

Palette provides the color vocabulary for interactor rendering. The default implementation is [theme.DefaultPalette]. Color roles follow the Qt QPalette model with additions for terminal and cursor colors.

The original 10 roles (Surface through DesktopBG) are retained for backward compatibility. New roles added in the theming overhaul are listed after DesktopBG.

type Palette interface {

    // Surface is the primary background color for interactors.
    Surface() color.NRGBA
    // SurfaceTint is a subtle variant of Surface for layered backgrounds.
    SurfaceTint() color.NRGBA
    // DarkShadow is the dark side of neumorphic shadows.
    DarkShadow() color.NRGBA
    // LightShadow is the light side of neumorphic shadows.
    LightShadow() color.NRGBA
    // Text is the default foreground color for text.
    Text() color.NRGBA
    // Icon is the foreground color for icons and glyphs.
    Icon() color.NRGBA
    // Highlight is the selection background color.
    Highlight() color.NRGBA
    // HighlightText is the foreground color used on Highlight backgrounds.
    HighlightText() color.NRGBA
    // DisabledAlpha is the alpha multiplier (0..1) applied to disabled controls.
    DisabledAlpha() float64
    // DesktopBG is the root window background color.
    DesktopBG() color.NRGBA

    // Base is the background for text input fields and list views.
    Base() color.NRGBA
    // BaseText is the foreground for text on Base backgrounds.
    BaseText() color.NRGBA
    // Midlight is the midpoint between Surface and LightShadow.
    Midlight() color.NRGBA
    // Mid is the midpoint between DarkShadow and Surface.
    Mid() color.NRGBA
    // Shadow is a near-black color for hard drop shadows.
    Shadow() color.NRGBA
    // BrightText is high-contrast text for use on dark backgrounds.
    BrightText() color.NRGBA
    // AlternateBase is an alternating row color for lists and tables.
    AlternateBase() color.NRGBA
    // ToolTipBase is the background for tooltip popups.
    ToolTipBase() color.NRGBA
    // ToolTipText is the foreground for tooltip text.
    ToolTipText() color.NRGBA
    // Link is the color for hyperlink text.
    Link() color.NRGBA
    // PlaceholderText is the color for placeholder/hint text in fields.
    PlaceholderText() color.NRGBA
    // Accent is the primary accent color (selection, focus rings).
    Accent() color.NRGBA
    // WindowText is the default text color for window content areas.
    WindowText() color.NRGBA

    // AnsiColor returns one of the 16 standard ANSI terminal colors
    // (0-7 normal, 8-15 bright). Index is clamped to [0,15].
    AnsiColor(index int) color.NRGBA

    // CursorColor is the text cursor fill/outline color.
    CursorColor() color.NRGBA
    // CursorTextColor is the text color when drawn over the cursor.
    CursorTextColor() color.NRGBA
}

type Parent

Parent is an Interactor that has children. [impl.Parent] provides a default implementation that discovers children via the constraint network (each child’s Parent attribute names this interactor) and draws them by propagating the DrawContext and calling each child’s NewDrawer.Draw.

Container interactors ([std.Column], [std.Row]) embed [impl.Parent] but override DrawChildren with custom layout logic. Decorator interactors ([impl.Decorator]) use GetChildren but handle the single child directly in their own Draw method.

type Parent interface {
    // GetChildren returns this parent's children, discovered via the constraint network.
    GetChildren() []Interactor
    // DrawChildren paints this parent's children within the given bounds and damage rect.
    DrawChildren(self Interactor, x, y, w, h int64, damage image.Rectangle)

    // IsRectSingleChild returns the child that completely contains rect,
    // or nil if no single child does. When non-nil, the parent can skip
    // its own drawing and forward Draw directly to that child.
    IsRectSingleChild(rect image.Rectangle) Interactor

    // SmallestDraw returns the parts of rect not covered by any child.
    // These are the background strips the parent must repaint.
    SmallestDraw(rect image.Rectangle) []image.Rectangle
}

type Picker

Picker performs hit testing on an interactor and its children. Pick receives coordinates in the interactor’s LOCAL frame (0,0 = top-left of this interactor). It returns all hit interactors front-to-back (deepest children first, then ancestors).

The default implementation on [impl.Interactor] handles both leaf interactors (simple bounds check) and parents (recursive traversal converting coordinates to each child’s local frame). Concrete types like [std.Scroller] override Pick to apply coordinate transforms (e.g., adding a scroll offset before recursing into the child).

type Picker interface {
    // Pick returns the interactors hit at (localX, localY), front-to-back.
    Pick(localX, localY int64) []Interactor
}

type PolarFace

PolarFace draws a 24-hour analog clock inspired by the Raketa Polar watch. A single hand makes one revolution per day. The dial shows 0 at top, 6 at 3 o’clock, 12 at bottom, 18 at 9 o’clock — with dots at all other hour positions.

type PolarFace struct {
    HandColor color.NRGBA    // hand and marker color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*PolarFace) DrawFace

func (f *PolarFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the Raketa Polar clock face.

func (*PolarFace) FaceName

func (f *PolarFace) FaceName() string

FaceName returns the short display name “Polar”.

func (*PolarFace) Location

func (f *PolarFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type RaisedParams

RaisedParams controls the dark and light outer shadow layers for the Raised depth state. DarkOff/LightOff set the shadow offset in pixels; DarkBlur/LightBlur set the Gaussian blur radius; DarkAlpha/LightAlpha set the shadow opacity.

type RaisedParams struct {
    // LightOff and LightBlur set the light-side shadow offset and blur.
    LightOff, LightBlur float64
    // DarkOff and DarkBlur set the dark-side shadow offset and blur.
    DarkOff, DarkBlur float64
    // DarkAlpha and LightAlpha set the opacity of each shadow layer.
    DarkAlpha, LightAlpha uint8
}

type RomanFace

RomanFace draws an analog clock with Roman numeral hour markers.

type RomanFace struct {
    HandColor color.NRGBA    // hand and numeral color (zero = black)
    FillColor color.NRGBA    // face fill color (zero = theme Surface)
    Loc       *time.Location // timezone
}

func (*RomanFace) DrawFace

func (f *RomanFace) DrawFace(dc DrawContext, fc *FontConfig, pal Palette, cx, cy, radius float64, hour, minute, second, millis int)

DrawFace renders the Roman numeral clock face.

func (*RomanFace) FaceName

func (f *RomanFace) FaceName() string

FaceName returns the short display name “Roman”.

func (*RomanFace) Location

func (f *RomanFace) Location() *time.Location

Location returns the timezone. Falls back to UTC if nil.

type ShapedFontResolver

ShapedFontResolver resolves a font for shaped text rendering. Returns (fontID, layout) — the caller uses layout.LayoutText with fontID. This parallels FontResolver for the shaped text path.

type ShapedFontResolver func(family string, feature Feature, size int64) (int32, textshape.TextLayout)

type SimpleParentDraw

SimpleParentDraw is the draw protocol for parent interactors that want damage-aware drawing. DrawChildren orchestrates the draw pass: it uses Parent.IsRectSingleChild and Parent.SmallestDraw to minimize work. DrawSelf paints the parent’s own content (typically background fill) for a single rectangle.

[impl.Parent] provides a default implementation where DrawSelf is a no-op. [impl.ThemedInteractor] implements DrawSelf to fill with the theme’s Surface color. Concrete parent types can override DrawSelf for custom background rendering.

type SimpleParentDraw interface {
    // DrawChildren paints this parent's children within the given bounds and damage rect.
    DrawChildren(self Interactor, x, y, w, h int64, damage image.Rectangle)
    // DrawSelf paints this parent's own background for a single rectangle.
    DrawSelf(dc DrawContext, rect image.Rectangle)
}

type StdMouseFeedback

StdMouseFeedback is implemented by interactors that respond to press-drag-release interactions. The mancini state machine handles all armed/disarmed transitions and calls these two methods:

Feedback is called on each state change during the drag. Complete is called exactly once when the button is released.

type StdMouseFeedback interface {
    // Feedback reports whether the interactor is currently armed (active).
    Feedback(active bool)
    // Complete is called once when the press-drag-release ends; success is true if released inside.
    Complete(success bool)
}

type SurfaceStyle

SurfaceStyle abstracts the visual treatment applied to interactor surfaces. Implementations include neumorphic shadows, classic directional bevels, and flat color fills.

All interactors in mazzy/mazarin/mancini/std call SurfaceStyle methods (via Theme.Style) instead of directly invoking neumorphic rendering functions. This allows the entire desktop to switch visual styles by changing the Theme’s SurfaceStyle.

type SurfaceStyle interface {
    // DrawBox renders a rounded rectangle at the given depth and weight.
    // face is the fill color; r is the corner radius.
    DrawBox(pal Palette, dc DrawContext, depth NeuDepth, weight Weight,
        x1, y1, x2, y2, r float64, face color.NRGBA)

    // DrawCircle renders a circle at the given depth and weight.
    // face is the fill color.
    DrawCircle(pal Palette, dc DrawContext, depth NeuDepth, weight Weight,
        cx, cy, radius float64, face color.NRGBA)

    // Groove renders a thin horizontal inset separator line from x1 to x2
    // at vertical position y.
    Groove(pal Palette, dc DrawContext, x1, y, x2 float64)

    // Pad returns the padding (in pixels) that this style's shadows or
    // bevels consume around a surface of the given weight.
    Pad(weight Weight) float64

    // TintOverlay draws a semi-transparent tinted overlay on top of an
    // already-rendered surface. Used for hover/focus highlights and
    // disabled dimming.
    TintOverlay(dc DrawContext, depth NeuDepth,
        x1, y1, x2, y2, r float64, face color.NRGBA)
}

type TextAlignmentParams

TextAlignmentParams controls text alignment for LatinTextFace rendering. The zero value is center/center, the most common case.

type TextAlignmentParams struct {
    // HAlign controls horizontal placement.
    HAlign HAlign
    // VAlign controls vertical placement.
    VAlign VAlign
}

type Theme

Theme provides the complete visual styling for all interactors: colors (Palette), surface style (SurfaceStyle), geometry, and font resolution (FontConfig).

The standard implementation is [theme.DefaultTheme], created by [theme.NewDefaultTheme] or [std.NewDefaultTheme].

Theme is accessed by interactors through [impl.ThemedInteractor.Theme].

type Theme interface {
    // Name returns a human-readable identifier for this theme (e.g. "Purple Neumorphic").
    Name() string

    // Palette returns the color scheme.
    Palette() Palette

    // Style returns the active [SurfaceStyle] used to render interactor
    // surfaces. All interactors should call Style().DrawBox() instead of
    // using [NeuBoxWith] directly.
    Style() SurfaceStyle

    // Neumorphic returns the shadow parameter provider. May return nil
    // to disable all neumorphic rendering.
    //
    // Deprecated: use [Theme.Style] instead. Will be removed after all
    // interactors are migrated.
    Neumorphic() NeumorphicParams

    // Font returns a [FontConfig] for the given feature and size.
    // The returned FontConfig's LoadFace closure resolves the theme's
    // font family with the requested variant.
    Font(feature Feature, size int64) *FontConfig

    // DefaultFont returns a [FontConfig] for the theme's default
    // family and size using the [None] (regular) feature.
    DefaultFont() *FontConfig

    // DefaultFontSize returns the theme's default font size in points.
    DefaultFontSize() int64

    // ControlRadius returns the corner radius for buttons and choosers.
    ControlRadius() float64

    // FieldRadius returns the corner radius for text input fields.
    FieldRadius() float64

    // FieldBorderWidth returns the border stroke width for text fields.
    FieldBorderWidth() float64

    // FieldPadding returns the horizontal padding inside text fields.
    FieldPadding() float64

    // ScrollbarThickness returns the cross-axis thickness of scrollbars.
    ScrollbarThickness() float64

    // ScrollbarMinThumb returns the minimum thumb length for scrollbars.
    ScrollbarMinThumb() float64

    // FontFamily returns the primary font family name.
    FontFamily() string

    // FontFamilyMono returns the monospace font family name.
    FontFamilyMono() string

    // TitleFontSize returns the font size for window titles.
    TitleFontSize() int64

    // ControlFontSize returns the font size for buttons and controls.
    ControlFontSize() int64

    // BodyFontSize returns the font size for body text.
    BodyFontSize() int64

    // SmallFontSize returns the font size for small/caption text.
    SmallFontSize() int64
}

type ThemedInteractor

ThemedInteractor extends Interactor with access to the Theme’s colors and fonts. The standard implementation is [impl.ThemedInteractor], which most leaf interactors and controls embed.

type ThemedInteractor interface {
    Interactor
    // BgColor returns the resolved background color from the theme.
    BgColor() color.NRGBA
    // FgColor returns the resolved foreground color from the theme.
    FgColor() color.NRGBA
    // Font returns a [FontConfig] for the given feature and size.
    Font(feature Feature, size int64) *FontConfig
    // DefaultFont returns the theme's default [FontConfig].
    DefaultFont() *FontConfig
    // DefaultSize returns the theme's default font size.
    DefaultSize() int64
}

type TitleBar

TitleBar draws a window title bar into a DrawContext. Implementations vary the appearance based on the window’s focus state and type. The title bar is drawn into the rectangle (x, y, w, h) using the provided DrawContext.

type TitleBar interface {
    // DrawTitleBar paints a title bar with the given title, state, and type.
    DrawTitleBar(dc DrawContext, title string, state WindowState, wtype WindowType, x, y, w, h float64)
}

type TitleBarStyle

TitleBarStyle selects the visual treatment for the window title bar.

type TitleBarStyle int

const (
    TitleBarStriped  TitleBarStyle = iota // Alternating colored stripes.
    TitleBarGradient                      // Gradient fill.
    TitleBarFlat                          // Solid color fill.
)

type TripleClickable

TripleClickable receives triple-click callbacks.

type TripleClickable interface {
    // TripleClick is invoked on a recognized triple click. Returns true if consumed.
    TripleClick(ev *InputEvent) bool
}

type UnfocusedMode

UnfocusedMode controls how unfocused window content is rendered.

type UnfocusedMode int

const (
    UnfocusedDesktopBG UnfocusedMode = iota // Replace content with desktop BG.
    UnfocusedDim                            // Dim content with a translucent overlay.
    UnfocusedNormal                         // Show content normally.
)

type VAlign

VAlign controls vertical text placement within the draw rectangle.

type VAlign int

const (
    VAlignCenter   VAlign = iota // Centered vertically (default).
    VAlignTop                    // Top of text at top of rectangle.
    VAlignBottom                 // Bottom of text at bottom of rectangle.
    VAlignBaseline               // y parameter is the baseline Y; h is ignored for vertical placement.
)

type WMTheme

WMTheme provides the complete visual styling for the window manager’s decorations: shadows, title bar, border geometry, and focus state colors.

WMTheme is separate from Theme because rachel (the window manager) renders decorations independently of the application’s interactor theme. The standard implementation is [theme.DefaultWMTheme].

type WMTheme interface {
    // Name returns a human-readable identifier for this WM theme.
    Name() string
    // Palette returns the WM's color scheme.
    Palette() Palette
    // Style returns the [SurfaceStyle] used to render decorations.
    Style() SurfaceStyle

    // ShadowTop returns the top shadow margin outside the NeuBox face.
    ShadowTop() int
    // ShadowBottom returns the bottom shadow margin outside the NeuBox face.
    ShadowBottom() int
    // ShadowLeft returns the left shadow margin outside the NeuBox face.
    ShadowLeft() int
    // ShadowRight returns the right shadow margin outside the NeuBox face.
    ShadowRight() int

    // TitleBarHeight returns the height of the window title bar.
    TitleBarHeight() int
    // TitleGap returns the gap between the title bar and the content area.
    TitleGap() int

    // CornerRadius returns the corner radius for the decoration NeuBox.
    CornerRadius() float64

    BorderTop() int    // ShadowTop + TitleBarHeight + TitleGap
    BorderRight() int  // ShadowRight
    BorderBottom() int // ShadowBottom
    BorderLeft() int   // ShadowLeft

    // TitleStyle returns the [TitleBarStyle] (striped, gradient, flat).
    TitleStyle() TitleBarStyle
    // TitleFont returns the font family used for window titles.
    TitleFont() string
    // TitleFontSize returns the font size for window titles.
    TitleFontSize() int64
    // TitleActiveAlpha returns the title text alpha for active windows.
    TitleActiveAlpha() uint8
    // TitleInactiveAlpha returns the title text alpha for inactive windows.
    TitleInactiveAlpha() uint8

    // ActiveBorderColor returns the border color for the focused window.
    ActiveBorderColor() color.NRGBA
    // InactiveBorderColor returns the border color for unfocused windows.
    InactiveBorderColor() color.NRGBA
    // UrgentBorderColor returns the border color for windows demanding attention.
    UrgentBorderColor() color.NRGBA

    // UnfocusedContentMode returns how content is rendered when the window loses focus.
    UnfocusedContentMode() UnfocusedMode
    // UnfocusedDimAlpha returns the overlay alpha used when [UnfocusedDim] is active.
    UnfocusedDimAlpha() uint8
}

type Weight

Weight selects between control-weight and window-weight rendering parameters. Interactors pass their weight to SurfaceStyle.DrawBox and SurfaceStyle.Pad so the style can apply appropriate shadow sizes and padding.

type Weight int

const (
    LightWeight Weight = iota // Controls (buttons, checkboxes, scrollbars)
    HeavyWeight               // Window decorations (title bars, window frames)
)

type WindowState

WindowState describes the focus state of a window.

type WindowState int

const (
    Active   WindowState = iota // Window has focus.
    Inactive                    // Window does not have focus.
)

func (WindowState) String

func (s WindowState) String() string

String returns the state’s name (“Active” or “Inactive”).

type WindowType

WindowType describes the kind of window a title bar belongs to.

type WindowType int

const (
    AppWindowType          WindowType = iota // Root application window.
    FreeStandingWindowType                   // Non-root floating panel.
    GadgetType                               // Small utility or accessory window.
)

func (WindowType) String

func (t WindowType) String() string

String returns the type’s name (“AppWindow”, “FreeStandingWindow”, or “Gadget”).

Generated by gomarkdoc