Claude
bcb3ab5dd8
[gpio_expander] Add interrupt pin support for efficient event-driven operation
...
This commit adds interrupt-based GPIO expander support to eliminate continuous
polling and significantly reduce I2C/SPI traffic and CPU usage.
## Key Changes
### Core Infrastructure (gpio_expander/cached_gpio.h)
- Extended CachedGpioExpander base class with interrupt pin support
- Added setup_interrupt_pin() method to attach native GPIO interrupt handlers
- Implemented interrupt-driven cache management:
- ISR sets flag and enables component loop when interrupt fires
- process_interrupt_() reads chip-specific interrupt status registers
- Cache remains valid between interrupts (no polling)
- Component loop automatically disabled until next interrupt
- Added virtual read_interrupt_status_() for chip-specific implementations
- Maintains backward compatibility: interrupt_pin is optional, defaults to polling
### MCP23xxx Family Support
- MCP23x17 (16-pin): Added INTF/INTCAP register reading
- MCP23x08 (8-pin): Added INTF/INTCAP register reading
- Configured IOCON register for interrupt mirroring (INTA=INTB)
- Combined with existing open_drain_ints support
- Chips: MCP23017, MCP23008, MCP23S17, MCP23S08
### PI4IOE5V6408 Support
- Implemented interrupt status register (0x13) reading
- Reads input state register (0x0F) to capture values and clear interrupt
- Single 8-pin bank design
### Python Configuration
- Added CONF_INTERRUPT_PIN to component schemas
- Uses pins.internal_gpio_input_pin_schema for validation
- Optional configuration maintains full backward compatibility
- Example:
```yaml
mcp23017:
id: my_expander
interrupt_pin: GPIO5 # Connect to INTA/INTB
binary_sensor:
- platform: gpio
pin:
mcp23xxx: my_expander
number: 0
interrupt: CHANGE # Existing config, now uses hardware interrupt
```
### Testing
- Updated component test configurations
- Added interrupt_pin test cases for both MCP23017 and PI4IOE5V6408
- Tests both polling mode (no interrupt_pin) and interrupt mode
## Benefits
| Aspect | Before (Polling) | After (Interrupts) |
|----------------|------------------|-------------------|
| I2C Reads | 60-120/sec | 2 per state change|
| CPU Usage | Continuous loop | ISR + event-driven|
| Latency | ~16ms (loop) | <1ms (ISR) |
| Power | Higher | Lower (sleep) |
## Implementation Details
**Interrupt Flow:**
1. Setup: Native GPIO interrupt attached to INTA/INTB pin (FALLING edge)
2. ISR: Sets pending flag, calls enable_loop_soon_any_context()
3. Loop: Reads interrupt status register to identify changed pins
4. Cache: Updates only changed pins, keeps cache valid
5. Optimization: Calls disable_loop() until next interrupt
**Safety:**
- Uses volatile bool for interrupt_pending_ flag
- IRAM_ATTR on ISR for fast execution
- Gracefully falls back to polling if interrupt_pin not configured
- No changes required to binary_sensor platform code
## Backward Compatibility
✅ Existing configurations work unchanged (polling mode)
✅ interrupt_pin is optional - add when ready
✅ No breaking changes to any APIs
✅ Binary sensors automatically benefit from interrupt efficiency
Addresses the need for efficient GPIO expander operation by eliminating
unnecessary continuous polling when hardware interrupts are available.
2025-11-17 21:45:47 +00:00
..
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-10 14:28:49 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-17 17:21:38 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2024-06-17 16:32:11 -05:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-10 11:09:25 +13:00
2025-10-19 07:41:19 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-15 15:19:08 -04:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-16 16:36:03 +13:00
2025-10-16 16:36:03 +13:00
2025-11-10 11:09:46 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-10 19:00:54 -06:00
2025-10-20 03:27:04 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-17 17:21:38 -10:00
2025-10-17 17:21:38 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-09 13:45:59 -10:00
2025-11-12 16:44:19 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-05-13 05:16:23 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-11 17:50:07 +00:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-17 17:21:38 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-04 10:45:32 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-13 10:52:08 -05:00
2025-10-10 16:02:18 +13:00
2025-10-09 11:42:25 -10:00
2025-10-12 07:21:45 +13:00
2025-10-10 07:26:41 +13:00
2025-10-12 07:21:45 +13:00
2025-10-16 16:36:03 +13:00
2025-10-16 16:36:03 +13:00
2025-10-12 07:21:45 +13:00
2025-10-10 07:26:41 +13:00
2025-11-03 14:08:50 -06:00
2025-10-20 19:10:38 +13:00
2025-10-12 07:21:45 +13:00
2025-10-10 07:26:41 +13:00
2025-11-06 15:48:02 +13:00
2024-06-17 16:32:11 -05:00
2025-07-13 23:47:52 +00:00
2025-11-17 12:32:08 -05:00
2025-10-20 10:44:20 -04:00
2025-10-22 16:37:50 -10:00
2025-10-22 16:37:50 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-23 10:53:15 +13:00
2024-06-17 16:32:11 -05:00
2024-06-17 16:32:11 -05:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-05 22:19:29 -05:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-22 10:12:32 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-17 17:21:38 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-10 19:00:54 -06:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-06 15:48:02 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-05 11:14:54 +13:00
2025-10-23 14:24:08 +13:00
2025-10-09 19:17:04 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-04 16:38:43 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-01 11:18:10 -05:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-06 15:48:02 +13:00
2025-11-07 15:44:01 +13:00
2024-06-17 16:32:11 -05:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-09 13:30:05 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-17 08:47:54 +11:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-17 21:45:47 +00:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-05-01 12:22:48 +12:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-17 17:21:38 -10:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-10-12 08:58:56 -04:00
2025-11-04 16:38:43 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 16:02:18 +13:00
2025-11-11 18:43:06 -06:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 20:06:20 -06:00
2025-11-12 16:44:19 +13:00
2025-10-12 07:21:45 +13:00
2025-10-09 23:38:34 +00:00
2025-11-06 16:57:31 +13:00
2025-06-11 17:27:58 +12:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-11 17:50:07 +00:00
2025-11-07 15:44:01 +13:00
2025-11-11 17:50:07 +00:00
2025-11-17 21:45:47 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-02-05 15:34:30 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 14:22:50 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-27 22:49:16 -04:00
2025-11-10 11:17:14 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-06 15:48:02 +13:00
2024-06-17 16:32:11 -05:00
2024-06-17 16:32:11 -05:00
2024-05-08 07:33:37 +12:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-11 17:50:07 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-05 11:14:54 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-20 20:39:21 -10:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-09-26 08:53:21 +12:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 07:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-04 08:13:37 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-10 19:00:54 -06:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-11 18:18:17 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-10 11:10:31 +13:00
2025-11-10 11:11:31 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-10-21 15:26:41 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-03 18:29:30 -06:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-10 19:00:54 -06:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-10 11:16:09 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-12 07:21:45 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-13 08:04:30 +13:00
2025-11-04 10:23:45 +11:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-02 08:18:17 -06:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-11 23:27:08 +00:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-12 16:44:19 +13:00
2025-11-07 15:44:01 +13:00
2025-10-10 16:02:18 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-11-07 15:44:01 +13:00
2025-10-21 22:21:22 +00:00
2025-10-21 22:21:22 +00:00
2025-10-21 22:21:22 +00:00