code: function () {
      var self = this;
      var s = '[Verifier state: ' + this.state;
      if (this.products.length) {
        s += ' products: ' + this.products.map(function (i) {return i.url;}).join(', ');
      }
      this.iterReceiptErrors(function (receipt, error) {
        if (error == self.state) {
          // Sometimes a receipt error is promoted to the state
          s += ' Error(' + receipt.substr(0, 4) + '...' + receipt.substr(receipt.length-4) + '): [error is state]';
        } else {
          s += ' Error(' + receipt.substr(0, 4) + '...' + receipt.substr(receipt.length-4) + '): ' + error;
        }
      });
      if (this.app) {
        s += ' installed app: ' + this.app.manifestURL;
      }
      s += ']';
      return s;
    }
docs: 40 minutes