anchor.diff:    m.init();
     m.onChangeMainButtonState.listen((bool isDown) {
       if (isDown) {
  -      startServer().then((int v){
  +      startServer().then((int v) {
           return startLocalIp();
         }).then((int v) {
           startPortMap();
         });
       } else {
         stopServer();
  +      stopPortMap();
       }
     });
     int id = 0;
  
positive.code:         res.externalIp;
          m.globalIP = res.externalIp;
        });
      });
    });
  }
  async.Future<int> startLocalIp() {
    async.Completer<int> completer = new async.Completer();
    (new hetimacl.HetiSocketBuilderChrome()).getNetworkInterfaces().then((List<hetima.HetiNetworkInterface> l) {
      // search 24
      for(hetima.HetiNetworkInterface i in l) {
        if(i.prefixLength == 24 && !i.address.startsWith("127")) {
          m.localIP = i.address;
          completer.complete(0);
          return;
        }
      }
      //
      for(hetima.HetiNetworkInterface i in l) {
        if(i.prefixLength == 64) {
          m.localIP = i.address;
          completer.complete(0);
          return;
        }
      }
    }).catchError((e){
      completer.completeError(e);
    });
    return completer.future;
  
negative.code: 
  async.Future<int> startServer() {
    print("startServer");
    localPort = basePort;
    externalPort = basePort;
    async.Completer<int> completer = new async.Completer();
    if (_server != null) {
      completer.completeError({});
  