//  names start with cap are states
//  names start with app:: are appliction handlers
//  names start with dum:: are dum interface to application
//  names start with lower case are actions
//  names start with on are events

//  Note:  not all Assert transitions are shown here
digraph UAS {
  rankdir=LR;
  node [shape = box];

  //////////////////////////////////////////
  // UAS - offer in INVITE
  Start -> Offer                                        [ label = "onInvite-offer/app::onNewSession,app::onOffer" ];

  Offer -> OfferProvidedAnswer                          [ label = "dum::provideAnswer/store::answer" ];
  Offer -> EarlyOffer                                   [ label = "dum::provisional/send::1xx,timer::1xx" ];
  Offer -> Assert                                       [ label = "dum::accept/assert" ];
  Offer -> Terminated                                   [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  Offer -> Terminated                                   [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  Offer -> Terminated                                   [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  Offer -> Terminated                                   [ label = "onCancel/app::onTerminated,send::200C,send::487I" ]; 
  Offer -> Terminated                                   [ label = "onBye/app::onTerminated,send::200B,send::487I" ]; 

  OfferProvidedAnswer -> Accepted                       [ label = "dum::accept/send::2xx-answer,timer::2xx,timer::NoAck,app::onConnected" ];
  OfferProvidedAnswer -> EarlyProvidedAnswer            [ label = "dum::provisional/send::1xx,timer::1xx" ]; // include early-media
  OfferProvidedAnswer -> Terminated                     [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  OfferProvidedAnswer -> Terminated                     [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  OfferProvidedAnswer -> Terminated                     [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  OfferProvidedAnswer -> Terminated                     [ label = "onCancel/app::onTerminated,send::200C,send::487I" ];
  OfferProvidedAnswer -> Terminated                     [ label = "onBye/app::onTerminated,send::200B,send::487I" ]; 

  Accepted -> Connected                                 [ label = "onACK" ];
  Accepted -> Connected                                 [ label = "onACK-answer" ];  // illegal - but accept anyway
  Accepted -> Accepted                                  [ label = "onCANCEL/send::200C" ]; 
  Accepted -> Accepted                                  [ label = "onTimer2xx/resend::2XXI" ];
  Accepted -> Terminated                                [ label = "onTimerNoACK/app::onAckNotReceived(),app::onTerminated(GeneralFailure),send::BYE" ];
  Accepted -> Terminated                                [ label = "onBye/app::onTerminated,send::200B" ]; 
  Accepted -> WaitingToHangup                           [ label = "dum::end" ];
  Accepted -> WaitingToOffer                            [ label = "dum::provideOffer/saveOffer" ];
  Accepted -> WaitingToRequestOffer                     [ label = "dum::requestOffer/saveOffer" ];

  WaitingToOffer -> SentUpdate                          [ label = "onACK,onAck-answer/send::UPDATE-offer" ];  // on Ack-answer is illegal - but accept anyway for interop 
  WaitingToOffer -> SentReinvite                        [ label = "onACK,onAck-answer/send::INVITE-offer" ];  // on Ack-answer is illegal - but accept anyway for interop 
  WaitingToOffer -> WaitingToOffer                      [ label = "onCANCEL/send::200C" ]; 
  WaitingToOffer -> WaitingToOffer                      [ label = "onTimer2xx/resend::2XXI" ];
  WaitingToOffer -> Terminated                          [ label = "onTimerNoACK/app::onAckNotReceived(),app::onTerminated(GeneralFailure),send::BYE" ];
  WaitingToOffer -> Terminated                          [ label = "onBye/app::onTerminated,send::200B" ]; 
  WaitingToOffer -> WaitingToHangup                     [ label = "dum::end" ];

  WaitingToRequestOffer -> SentReinviteNoOffer          [ label = "onACK/send::INVITE" ]; 
  WaitingToRequestOffer -> SentReinviteNoOffer          [ label = "onACK-answer/send::INVITE" ];
  WaitingToRequestOffer -> WaitingToRequestOffer        [ label = "onCANCEL/send::200C" ]; 
  WaitingToRequestOffer -> WaitingToRequestOffer        [ label = "onTimer2xx/resend::2XXI" ];
  WaitingToRequestOffer -> Terminated                   [ label = "onTimerNoACK/app::onAckNotReceived(),app::onTerminated(GeneralFailure),send::BYE" ];
  WaitingToRequestOffer -> Terminated                   [ label = "onBye/app::onTerminated,send::200B" ]; 
  WaitingToRequestOffer -> WaitingToHangup              [ label = "dum::end" ];

  EarlyOffer -> EarlyOffer                              [ label = "onTimer1xx/resend::1xx" ];
  EarlyOffer -> EarlyOffer                              [ label = "dum::provisional/send::1xx,timer::1xx" ];
  EarlyOffer -> EarlyProvidedAnswer                     [ label = "dum::provideAnswer/store::answer" ];
  EarlyOffer -> Assert                                  [ label = "dum::accept/assert" ];
  EarlyOffer -> Terminated                              [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyOffer -> Terminated                              [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyOffer -> Terminated                              [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  EarlyOffer -> Terminated                              [ label = "onCancel/send::200C,send::487I" ];
  EarlyOffer -> Terminated                              [ label = "onBye/app::onTerminated,send::200B,send::487I" ];

  EarlyProvidedAnswer -> EarlyProvidedAnswer            [ label = "dum::provisional/send::1xx,timer::1xx" ]; // include early-media
  EarlyProvidedAnswer -> Accepted                       [ label = "dum::accept/send::2xx-answer,timer::2xx,timer::NoAck,app::onConnected" ];
  EarlyProvidedAnswer -> Terminated                     [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyProvidedAnswer -> Terminated                     [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyProvidedAnswer -> Terminated                     [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  EarlyProvidedAnswer -> Terminated                     [ label = "onCancel/app::onTerminated,send::200C,send::487I" ]; 
  EarlyProvidedAnswer -> Terminated                     [ label = "onBye/app::onTerminated,send::200B,send::487I" ]; 
  //////////////////////////////////////////


  //////////////////////////////////////////
  // UAS - no offer in INVITE
  Start -> NoOffer                                      [ label = "onInvite/app::onNewSession,app::onOfferRequired" ];

  NoOffer -> ProvidedOffer                              [ label = "dum::provideOffer/store::offer" ];
  NoOffer -> EarlyNoOffer                               [ label = "dum::provisional/send::1xx,timer::1xx" ]; // include early-media
  NoOffer -> Assert                                     [ label = "dum::accept/assert" ];
  NoOffer -> Terminated                                 [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  NoOffer -> Terminated                                 [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  NoOffer -> Terminated                                 [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  NoOffer -> Terminated                                 [ label = "onCancel/app::onTerminated,send::200C,send::487I,dum::destroy" ]; 
  NoOffer -> Terminated                                 [ label = "onBye/app::onTerminated,send::200B,send::487I,dum::destroy" ]; 

  ProvidedOffer -> EarlyProvidedOffer                   [ label = "dum::provisional/send::1xx-early,timer::1xx" ]; 
  ProvidedOffer -> AcceptedWaitingAnswer                [ label = "dum::accept/send::2XXI-offer,timer::2xx,timer::NoAck,app::onConnected" ];
  ProvidedOffer -> Terminated                           [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  ProvidedOffer -> Terminated                           [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  ProvidedOffer -> Terminated                           [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  ProvidedOffer -> Terminated                           [ label = "onCancel/app::onTerminated,send::200C,send::487I,dum::destroy" ]; 
  ProvidedOffer -> Terminated                           [ label = "onBye/app::onTerminated,send::200B,send::487I,dum::destroy" ]; 

  EarlyNoOffer -> EarlyNoOffer                          [ label = "onTimer1xx/resend::1xx" ];
  EarlyNoOffer -> EarlyNoOffer                          [ label = "dum::provisional/send::1xx,timer::1xx" ];
  EarlyNoOffer -> EarlyProvidedOffer                    [ label = "dum::provideOffer/store::offer" ];
  EarlyNoOffer -> Assert                                [ label = "dum::accept/assert" ];
  EarlyNoOffer -> Terminated                            [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyNoOffer -> Terminated                            [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyNoOffer -> Terminated                            [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  EarlyNoOffer -> Terminated                            [ label = "onCancel/app::onTerminated,send::200C,send::487I,dum::destroy" ];
  EarlyNoOffer -> Terminated                            [ label = "onBye/app::onTerminated,send::200B,send::487I,dum::destroy" ];

  EarlyProvidedOffer -> EarlyProvidedOffer              [ label = "dum::provisional/send::1xx-early,timer::1xx" ]; 
  EarlyProvidedOffer -> AcceptedWaitingAnswer           [ label = "dum::accept/send::2XXI-offer,timer::2xx,timer::NoAck,app::onConnected" ];
  EarlyProvidedOffer -> Terminated                      [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyProvidedOffer -> Terminated                      [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  EarlyProvidedOffer -> Terminated                      [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  EarlyProvidedOffer -> Terminated                      [ label = "onCancel/app::onTerminated,send::200C,send::487I,dum::destroy" ]; 
  EarlyProvidedOffer -> Terminated                      [ label = "app::onTerminated,onBye/send::200B,send::487I,dum::destroy" ]; 

  AcceptedWaitingAnswer -> Connected                    [ label = "onACK-answer/onAnswer" ];
  AcceptedWaitingAnswer -> Terminated                   [ label = "onACK/onAnswer/send::BYE" ];
  AcceptedWaitingAnswer -> AcceptedWaitingAnswer        [ label = "onCANCEL/send::200C" ]; 
  AcceptedWaitingAnswer -> AcceptedWaitingAnswer        [ label = "onPRACK/send::2XXP" ];
  AcceptedWaitingAnswer -> Terminated                   [ label = "onTimer2xx/resend::2XXI" ]; // !jf! destroy?
  AcceptedWaitingAnswer -> Terminated                   [ label = "onTimerNoACK/send::BYE" ];
  AcceptedWaitingAnswer -> WaitingToHangup              [ label = "dum::end" ];
  // reject is not allowed once accepted

  WaitingToHangup -> Terminated                         [ label = "onACK/send::BYE" ];
  WaitingToHangup -> Terminated                         [ label = "onTimerNoACK/send::BYE" ];
  

  //////////////////////////////////////////


  Start -> OfferReliable                                [ label = "onInvite-offer-rel/app::onNewSession,app::onOffer" ];
  Start -> NoOfferReliable                              [ label = "onInvite-rel/app::onNewSession,app::onOfferRequired" ];

  OfferReliable -> OfferReliableProvidedAnswer          [ label = "dum::provideAnswer/store answer" ];
  OfferReliable -> NoAnswerReliableWaitingPrack         [ label = "dum::provisional-rel/send::1xx,timer:1xxRel" ]
  OfferReliable -> OfferReliable                        [ label = "dum::provisional/send::1xx,timer:1xx" ]
  OfferReliable -> Terminated                           [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  OfferReliable -> Terminated                           [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  OfferReliable -> Terminated                           [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  OfferReliable -> Terminated                           [ label = "onCancel/send::200C,send::487I,app::onTerminated,dum::destroy" ];

  OfferReliableProvidedAnswer -> FirstSentAnswerReliable [ label = "dum::provisional-rel/send::1xx-answer,timer::1xxRel" ];
  OfferReliableProvidedAnswer -> OfferReliableProvidedAnswer [ label = "dum::provisional/send::1xx,timer::1xx" ];
  OfferReliableProvidedAnswer -> Accepted               [ label = "dum::accept/send::2xx,timer::2xx,app::onConnected" ];
  OfferReliableProvidedAnswer -> Terminated             [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  OfferReliableProvidedAnswer -> Terminated             [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  OfferReliableProvidedAnswer -> Terminated             [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  OfferReliableProvidedAnswer -> Terminated             [ label = "onCancel/send::200C,send::487I,app::onTerminated,dum::destroy" ];

  NoAnswerReliableWaitingPrack -> NoAnswerReliableWaitingPrack [ label = "dum::provisional/queue 1xx waiting for PRACK" ];
  NoAnswerReliableWaitingPrack -> NoAnswerReliableWaitingPrack [ label = "dum::provideAnswer/store answer waiting for PRACK" ];
  NoAnswerReliableWaitingPrack -> NoAnswerReliableWaitingPrack [ label = "dum::accept/queue 200 waiting for PRACK" ];
  NoAnswerReliableWaitingPrack -> NoAnswerReliable      [ label = "onPRACK/200P" ];
  NoAnswerReliableWaitingPrack -> Accepted              [ label = "onPRACK/200P,200 in queue,send2xx,timer::2xx,app::onConnected" ];
  NoAnswerReliableWaitingPrack -> Terminated            [ label = "onTimeout/send:5XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliableWaitingPrack -> Terminated            [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliableWaitingPrack -> Terminated            [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliableWaitingPrack -> Terminated            [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliableWaitingPrack -> Terminated            [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  NoAnswerReliable -> NoAnswerReliable                  [ label = "dum::provisional/send::1xx,timer::1xx" ];
  NoAnswerReliable -> NoAnswerReliableWaitingPrack      [ label = "dum::provisional-rel/send::1xx,timer::1xxRel" ];
  NoAnswerReliable -> OfferReliableProvidedAnswer       [ label = "dum::provideAnswer/store answer" ];
  NoAnswerReliable -> Terminated                        [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliable -> Terminated                        [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliable -> Terminated                        [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  NoAnswerReliable -> Terminated                        [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  NoOfferReliable -> NoOfferReliable                    [ label = "dum::provisional/send::1xx,timer:1xx" ]; 
  NoOfferReliable -> ProvidedOfferReliable              [ label = "dum::provideOffer/store::offer" ];
  NoOfferReliable -> Terminated                         [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  NoOfferReliable -> Terminated                         [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  NoOfferReliable -> Terminated                         [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  NoOfferReliable -> Terminated                         [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  ProvidedOfferReliable -> FirstSentOfferReliable       [ label = "dum::provisional-rel/send::1xx-offer,timer:1xxRel" ];
  ProvidedOfferReliable -> AcceptedWaitingAnswer        [ label = "dum::accept/send::2xx-offer,timer:2xx,timer::NoAck,app::onConnected" ];
  ProvidedOfferReliable -> Terminated                   [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  ProvidedOfferReliable -> Terminated                   [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  ProvidedOfferReliable -> Terminated                   [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  ProvidedOfferReliable -> Terminated                   [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  FirstSentOfferReliable -> FirstSentOfferReliable      [ label = "dum::provisional/store 1xx waiting for PRACK" ]; 
  FirstSentOfferReliable -> NegotiatedReliable          [ label = "onPRACK-answer/200P,app::onAnswer" ];
  FirstSentOfferReliable -> Terminated                  [ label = "onPRACK-noanswer/send::406P,send::406I,app::onTerminated,dum::destroy" ];
  FirstSentOfferReliable -> Terminated                  [ label = "onTimeout/send:5XXI,app::onTerminated,dum::destroy" ];
  FirstSentOfferReliable -> Terminated                  [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];  
  FirstSentOfferReliable -> Terminated                  [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ]; 
  FirstSentOfferReliable -> Terminated                  [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  FirstSentOfferReliable -> Terminated                  [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  FirstSentAnswerReliable -> FirstSentAnswerReliable    [ label = "dum::provisional/store 1xx waiting for PRACK" ]; 
  FirstSentAnswerReliable -> FirstSentAnswerReliable    [ label = "dum::accept/queue::2xx waiting for PRACK" ];
  FirstSentAnswerReliable -> NegotiatedReliable         [ label = "onPRACK/200P" ];
  FirstSentAnswerReliable -> NegotiatedReliable         [ label = "onPRACK-offer/onOffer" ];
  FirstSentAnswerReliable -> Accepted                   [ label = "onPRACK/200P/200 in queue,send2xx,timer::2xx,app::onConnected" ];
  FirstSentAnswerReliable -> Terminated                 [ label = "onTimeout/send:5XXI,app::onTerminated,dum::destroy" ];
  FirstSentAnswerReliable -> Terminated                 [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];  
  FirstSentAnswerReliable -> Terminated                 [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ];
  FirstSentAnswerReliable -> Terminated                 [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ];
  FirstSentAnswerReliable -> Terminated                 [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  NegotiatedReliable -> NegotiatedReliable              [ label = "onPRACK/send::200P" ]; 
  NegotiatedReliable -> NegotiatedReliable              [ label = "dum::provisional/send::1xx,timer::1xx" ];
  NegotiatedReliable -> NegotiatedReliable              [ label = "dum::provisional-rel/send::1xx,timer::1xxRel" ];
  NegotiatedReliable -> Accepted                        [ label = "dum::accept/send::2xx,timer::2xx" ];
  NegotiatedReliable -> NegotiatedReliable              [ label = "dum::accept-queue 2xx if waiting for PRACK" ];
  NegotiatedReliable -> ReceivedUpdate                  [ label = "onUpdate-offer/app::onOffer" ];
  NegotiatedReliable -> SentUpdate                      [ label = "dum::provideOffer/send::UPDATE" ];
  NegotiatedReliable -> ProvidedOffer                   [ label = "dum::provideOffer-sendOfferAtAccept/store offer" ];
  NegotiatedReliable -> NegotiateReliable               [ label = "dum::provideAnswer/send::200P-answer" ];
  NegotiatedReliable -> Terminated                      [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  NegotiatedReliable -> Terminated                      [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ]; 
  NegotiatedReliable -> Terminated                      [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ]; 
  NegotiatedReliable -> Terminated                      [ label = "onCancel/,app::onTerminated,dum::destroy" ];
    
  SentUpdate -> SentUpdateAccepted                      [ label = "dum::accept/queue 2xx" ];
  SentUpdate -> NegotiatedReliable                      [ label = "on2XXU/app:onAnswer" ];
  SentUpdate -> SentUpdateGlare                         [ label = "on491U/start 491 timer" ];
  SentUpdate -> NegotiatedReliable                      [ label = "on4XXU/app::onOfferRejected" ];
  SentUpdate -> Terminated                              [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  SentUpdate -> Terminated                              [ label = "dum::reject/send::4XXI,app::onTerminated,dum::destroy" ]; 
  SentUpdate -> Terminated                              [ label = "dum::redirect/send::3XXI,app::onTerminated,dum::destroy" ]; 
  SentUpdate -> Terminated                              [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  SentUpdateAccepted -> Accepted                        [ label = "on2xxU/app::onAnswer,send::2XXI" ];
  SentUpdateAccepted -> Accepted                        [ label = "on4XXU/app::onOfferRejected,send::2XXI" ];
  SentUpdateAccepted -> Accepted                        [ label = "on491U/app::onOfferRejected,send::2XXI" ];
  SentUpdateAccepted -> Terminated                      [ label = "dum::end/send::4XXI,app::onTerminated,dum::destroy" ];
  SentUpdateAccepted -> Terminated                      [ label = "onCancel/,app::onTerminated,dum::destroy" ];
  // reject is not allowed once accepted

  ReceivedUpdate -> ReceivedUpdateWaitingAnswer         [ label = "dum::accept/queue::2xx" ];
  ReceivedUpdate -> NegotiatedReliable                  [ label = "dum::provideAnswer/send::200U-answer" ];
  ReceivedUpdate -> Terminated                          [ label = "dum::end/send::488U,send::4XXI,app::onTerminated,dum::destroy" ];
  ReceivedUpdate -> Terminated                          [ label = "dum::reject/send::488U,send::4XXI,app::onTerminated,dum::destroy" ]; 
  ReceivedUpdate -> Terminated                          [ label = "dum::redirect/send::488U,send::3XXI,app::onTerminated,dum::destroy" ]; 
  ReceivedUpdate -> Terminated                          [ label = "onCancel/,app::onTerminated,dum::destroy" ];

  ReceivedUpdateWaitingAnswer -> Accepted               [ label = "dum::provideAnswer/send::2XXU-answer,send::2XXI" ];
  ReceivedUpdateWaitingAnswer -> Terminated             [ label = "dum::end/send::488U,send::4XXI,dum::destroy" ];
  ReceivedUpdateWaitingAnswer -> Terminated             [ label = "onCancel/,app::onTerminated,dum::destroy" ];
  // reject is not allowed once accepted
}
