digraph G { initial[label="", shape="circle"]; pending_pr[label="pending(proposed)", shape="box"]; pending_dp[label="pending(claim-proposal)"]; pending_sp[label="pending(submit-payment)"]; pending_rf[label="pending(refundable)"]; pending_re[label="pending(repurchase-session-reset)"]; aborting_unclaim[label="aborting(unclaim)"]; aborting_refund[label="aborting(refund)"]; aborting_refresh[label="aborting(refresh)"]; aborted_refund[label="aborted(refunded)", shape="box"]; failed[label="failed", shape="box"]; done[label="done", shape="box"]; deleted[label="deleted", shape="box"]; subgraph { rank = same; pending_dp; pending_pr; pending_sp; pending_rf; } initial->pending_dp [color="blue", label="URI trigger"]; pending_dp->pending_pr; pending_re->done; pending_dp->deleted [label="repurchase\ndetected"]; pending_dp->deleted [color="red", label="already\nclaimed"]; pending_dp->deleted [color="red", label="invalid\nproposal"]; pending_pr->pending_sp [color="blue", label="pay-accept"]; pending_pr->aborting_unclaim [color="blue", label="pay-refuse"]; pending_pr->deleted [label="expired"]; pending_sp->pending_rf; pending_sp->aborting_refund [color="blue", label="abort"]; pending_sp->aborting_refund [color="red", label="insufficient balance"]; pending_rf->aborting_refund [label="long-poll:refund"]; aborting_refund->aborting_refresh; aborting_refund->deleted [color="blue", label="force-delete"]; aborting_refund->aborting_refresh [color="red", label="failure"]; aborting_refresh->failed [color="red", label="failure"]; aborting_refresh->aborted_refund; aborting_refresh->deleted [color="blue", label="force-delete"]; aborted_refund->deleted [color="blue", label="delete"]; pending_rf->done [label="timeout"]; pending_rf->done [color="blue", label="abort"]; aborting_unclaim->deleted; failed->deleted [color="blue", label="delete"]; done->deleted [color="blue", xlabel="delete"]; done->pending_re [color="purple", label="repurchase"]; pending_re->done [color="blue", label="abort"]; }