anchor.diff:                      ,{eval_mfa,egambo_game,cancel}
                       ,{eval_mfa,egambo_game,play}
                       ,{eval_mfa,egambo_game,result}
  +                    ,{eval_mfa,egambo_game,resume}
                       ,{eval_mfa,egambo_game,moves}
                       ,{eval_mfa,egambo_game,sample}
                       ],[]}
   , {ddRole,dderl,[],[{dderl,restart},{dderl,conn,local,use},{dderl,conn,{owner,system},use},{dderl,conn,manage}],[]}
  +, {ddRole,0,[],[],[]}
   , {ddRole,1,[],[],[]}
   , {ddRole,2,[],[],[]}
   , {ddRole,3,[system],[],[]}
  
positive.code:         ]).
  
  -export([ play/4            % play one move: GameId, Cell|Command, Alias, AccountId     (not going through egambo_game gen_server if engine is running)
          , play/2            % play one move: GameId, Cell|Command                       (in the name of the next player)
          , play_bot/5        % trigger a bot to play one move (async)
          ]).
  
  -safe([create, start, cancel, accept, play, result, moves, time, sample]).
  
  %% stateful game management functions (run through gen_server for serializability)
  
  
negative.code:         insert_default(?DEFAULT_GAME_TYPES),
          insert_default(?DEFAULT_ACCOUNTS),
          insert_default(?DEFAULT_ROLES),
          insert_default(?DEFAULT_CMDS),
          insert_default(?DEFAULT_VIEWS),
          process_flag(trap_exit, true),
          {ok,#state{}}
      catch
  