anchor.diff:    final Container appContainer;
     final PreferenceStore _prefs;
   
  +  TcpClient _client;
     List<DeviceInfo> _knownDevices = [];
   
     MobileDeploy(this.appContainer, this._prefs) {
  
positive.code: 
    Future _sendHttpPush(String target, ProgressMonitor monitor) {
      List<int> httpRequest;
      TcpClient client;
      return archiveContainer(appContainer, true).then((List<int> archivedData) {
        monitor.worked(3);
        httpRequest = _buildHttpRequest(target, archivedData);
        monitor.worked(5);
        return TcpClient.createClient(target, 2424);
      }).then((TcpClient _client) {
        client = _client;
        client.write(httpRequest);
        return client.stream.timeout(new Duration(minutes: 1)).first;
      }).then((List<int> responseBytes) {
        String response = new String.fromCharCodes(responseBytes);
        List<String> lines = response.split('\n');
  
negative.code: 
        if (lines.first.contains('200')) {
          monitor.worked(2);
          return _sendLaunch(target, appContainer.project.name);
        } else {
          return new Future.error(lines.first);
        }
      });
    }
  
    /**
     * Launch an app with appId on given target address.  If target is
     * null, will be sent to USB device.
     */
    Future _sendLaunch(String appId, [String target = null]) {
      List<int> httpRequest = [];
      // Build the HTTP request headers.
      String header =
          'POST /launch HTTP/1.1\r\n'
          'User-Agent: Spark IDE\r\n';
      String body = "appId=$appId";
  
      httpRequest.addAll(header.codeUnits);
      httpRequest.addAll('Content-length: ${body.length}\r\n\r\n'.codeUnits);
      httpRequest.addAll(body.codeUnits);
  
      return _sendRequest(httpRequest, target);
    }
  
    // Safe to call multiple times. It will open the device if it has not been opened yet.
  