digraph { s [ shape="box", label="[0] Request" ]; p [ shape="box", label="[A] Pass" ]; b [ shape="box", label="[B] Block" ]; t [ shape="oval", label="[6] Set new token" ]; c [ shape="oval", label="[4] Show captcha" ]; w [ shape="oval", label="[3] Some heavy\noperation" ]; i [ shape="oval", label="[9] Accounting" ]; rl [ shape="diamond", label="[8] Is rate-limit\nexceeded?" ]; ht [ shape="diamond", label="[1] Has token?" ]; vt [ shape="diamond", label="[2] Is token valid?" ]; cv [ shape="diamond", label="[5] Is captcha valid?" ]; ts [ shape="diamond", label="[7] Is token set?" ]; s -> ht [ style="bold", weight=2 ]; ht -> vt [ label="Y", style="bold", weight=2 ]; ht -> w [ label="N", style="dashed" ]; w -> t [ style="dashed" ]; t -> ts [ style="solid" ]; ts -> b [ label="N" ]; ts -> p [ label="Y", style="solid" ]; vt -> rl [ label="Y", style="bold", weight=2 ]; rl -> i [ label="N", style="bold", weight=2 ]; i -> p [ style="bold", weight=2 ]; rl -> b [ label="Y", style="bold" ]; vt -> c [ label="N" ]; c -> cv; cv -> c [ label="N" ]; cv -> t [ label="Y" ]; }