anchor.diff:      try {
         profile = perf.parse(text);
       } catch (e, stack) {
  -      print(e);
  -      print(stack);
  -    }
  -
  -    if (methods != null) {
  +      print("ERROR loading profile");
  +      return;
  +    }
  +    _attachProfile();
  +  }
  +
  +  _attachProfile() {
  +    if (methods != null && profile != null) {
         profile.attachAll(mode, methods);
         sortMethodsBy = "ticks";
       }
     }
   
     loadProfile(e, selectedFiles, target) {
  -    _wait(selectedFiles.map((file) => readAsText(file).then(_loadProfile)));
  -  }
  -
  -  /** Load given file. */
  -  readAsText(file) {
  -    final reader = new FileReader();
  -    final result = reader.onLoad.first.then((_) => reader.result);
  -    reader.readAsText(file);
  -    return result;
  +    final profileFiles = selectedFiles
  +      .map((file) => new TextFile(file, _loadProfile))
  +      .toList();
  +    files = []
  +      ..addAll(files)
  +      ..addAll(profileFiles);
  +    _wait(profileFiles, (file) => file.load());
     }
   
     /** Load data from the given textual artifact if any mode can handle it. */
  
positive.code: 
    _loadFiles() {
      closeSplash();
      _wait(files.map((file) => readAsText(file).then(loadData)));
    }
  
    _wait(actions) {
      final SpinnerElement spinner = $["spinner"];
      spinner.start();
      async.Future.wait(
        actions
      ).then((_) => spinner.stop(), onError: (_) => spinner.stop());
    }
  
    showBlockAction(event, detail, target) {
  
negative.code:     if (selectedFiles.length > 1) {
        reset();
      }
      files = selectedFiles
        .map((file) => new TextFile(file, loadData))
        .toList();
      _loadFiles();
    }
  
  