Design and implement a crypto trading order management system that processes a stream of orders and supports lifecycle operations. The system must maintain two dictionaries: one mapping orderId to an order object containing userId, symbol, quantity, price, and status; and another mapping userId to a set of orderIds for fast per-user lookups. Orders can be in one of three states: ACTIVE, PAUSED, or CANCELLED. State transitions are strictly defined: ACTIVE and PAUSED may transition to each other (reversible), but once an order moves to CANCELLED it is terminal and must be removed from both dictionaries. Implement the following methods: placeOrder(orderId, userId, symbol, quantity, price) → creates an ACTIVE order; cancelOrder(orderId) → moves the order to CANCELLED and removes it; pauseOrder(orderId) → ACTIVE→PAUSED; resumeOrder(orderId) → PAUSED→ACTIVE; getOrder(orderId) → returns the full order object; getUserOrders(userId) → returns a list of order objects still in ACTIVE or PAUSED state for that user. All operations must be O(1) time except getUserOrders, which should be O(k) where k is the number of live orders for the user. The system must reject invalid transitions (e.g., cancelling an already cancelled order) by raising an exception or returning an error code.