diff --git a/app/lib/computation/blockchainContext.js b/app/lib/computation/blockchainContext.js
index e223450250b46af23e26ed0f45c8d9b87e76a7bd..7fca13077d1d6b307ed5aa80dde7c728a7a3065d 100644
--- a/app/lib/computation/blockchainContext.js
+++ b/app/lib/computation/blockchainContext.js
@@ -3,9 +3,9 @@ const _               = require('underscore');
 const co              = require('co');
 const Q               = require('q');
 const common          = require('duniter-common');
-const indexer         = require('duniter-common').indexer;
+const indexer         = require('../indexer');
 const constants       = require('../constants');
-const rules           = require('duniter-common').rules;
+const rules           = require('../rules')
 const Identity        = require('../entity/identity');
 const Certification   = require('../entity/certification');
 const Membership      = require('../entity/membership');
diff --git a/app/lib/dal/fileDAL.js b/app/lib/dal/fileDAL.js
index a7f449aa9e2f5fd83f7790bf242b54f0fcb4cba4..b27722853151c93e98faca3359f6d4837a8ac133 100644
--- a/app/lib/dal/fileDAL.js
+++ b/app/lib/dal/fileDAL.js
@@ -3,7 +3,7 @@ const Q       = require('q');
 const co      = require('co');
 const _       = require('underscore');
 const common = require('duniter-common');
-const indexer = require('duniter-common').indexer;
+const indexer = require('../indexer');
 const logger = require('../logger')('filedal');
 const Configuration = require('../entity/configuration');
 const Merkle = require('../entity/merkle');
diff --git a/app/lib/dal/sqliteDAL/AbstractIndex.js b/app/lib/dal/sqliteDAL/AbstractIndex.js
index 3ffc5a0450e01901bc29a36b8fc8a95867007ad0..0187fc266b22c0e250b4bb9bb6b055559c2a4083 100644
--- a/app/lib/dal/sqliteDAL/AbstractIndex.js
+++ b/app/lib/dal/sqliteDAL/AbstractIndex.js
@@ -4,7 +4,7 @@
 
 const _ = require('underscore');
 const co = require('co');
-const indexer = require('duniter-common').indexer;
+const indexer = require('../../indexer');
 
 module.exports = AbstractIndex;
 
diff --git a/app/lib/dal/sqliteDAL/index/CIndexDAL.js b/app/lib/dal/sqliteDAL/index/CIndexDAL.js
index e3f2c76e00516aad814235d782885a21b86e676d..416a64a0796974ab7bc6683f1dbf0081096dc361 100644
--- a/app/lib/dal/sqliteDAL/index/CIndexDAL.js
+++ b/app/lib/dal/sqliteDAL/index/CIndexDAL.js
@@ -5,7 +5,7 @@
 const co = require('co');
 const constants = require('./../../../constants');
 const common = require('duniter-common');
-const indexer = require('duniter-common').indexer;
+const indexer         = require('../../../indexer');
 const AbstractSQLite = require('./../AbstractSQLite');
 const AbstractIndex = require('./../AbstractIndex');
 
diff --git a/app/lib/dal/sqliteDAL/index/IIndexDAL.js b/app/lib/dal/sqliteDAL/index/IIndexDAL.js
index 23157689870103645978e3dbd80d604c803dd164..d2eb3be71bbb19f8468cc43c4abc699143775bd6 100644
--- a/app/lib/dal/sqliteDAL/index/IIndexDAL.js
+++ b/app/lib/dal/sqliteDAL/index/IIndexDAL.js
@@ -4,7 +4,7 @@
 
 const co = require('co');
 const _ = require('underscore');
-const indexer = require('duniter-common').indexer;
+const indexer         = require('../../../indexer');
 const AbstractSQLite = require('./../AbstractSQLite');
 const AbstractIndex = require('./../AbstractIndex');
 
diff --git a/app/lib/dal/sqliteDAL/index/MIndexDAL.js b/app/lib/dal/sqliteDAL/index/MIndexDAL.js
index ab8ae38760ac5421bd7ced5310439470712b9d7c..0c5c670927ade50abd8440b85457bfc0b3c03d37 100644
--- a/app/lib/dal/sqliteDAL/index/MIndexDAL.js
+++ b/app/lib/dal/sqliteDAL/index/MIndexDAL.js
@@ -3,7 +3,7 @@
  */
 
 const co = require('co');
-const indexer = require('duniter-common').indexer;
+const indexer         = require('../../../indexer');
 const AbstractSQLite = require('./../AbstractSQLite');
 const AbstractIndex = require('./../AbstractIndex');
 
diff --git a/app/lib/dal/sqliteDAL/index/SIndexDAL.js b/app/lib/dal/sqliteDAL/index/SIndexDAL.js
index 27afb9900b574d17446ffacf7ba2ecc29fae6cf5..59e1f1a7a9431bb0e26c3f07ac2beac037572c2d 100644
--- a/app/lib/dal/sqliteDAL/index/SIndexDAL.js
+++ b/app/lib/dal/sqliteDAL/index/SIndexDAL.js
@@ -5,7 +5,7 @@
 const _ = require('underscore');
 const co = require('co');
 const common = require('duniter-common');
-const indexer = require('duniter-common').indexer;
+const indexer         = require('../../../indexer');
 const constants = require('../../../constants');
 const AbstractSQLite = require('./../AbstractSQLite');
 const AbstractIndex = require('./../AbstractIndex');
diff --git a/app/lib/indexer.js b/app/lib/indexer.js
new file mode 100644
index 0000000000000000000000000000000000000000..0c078402420c6a73289eddb3d4791e6e171fab0e
--- /dev/null
+++ b/app/lib/indexer.js
@@ -0,0 +1,1804 @@
+"use strict";
+
+const co              = require('co');
+const _               = require('underscore');
+const common          = require('duniter-common');
+
+const constants       = common.constants
+const rawer           = common.rawer
+const unlock          = common.txunlock
+const keyring         = common.keyring
+const Block           = common.document.Block
+const Identity        = common.document.Identity
+const Certification   = common.document.Certification
+const Membership      = common.document.Membership
+const Transaction     = common.document.Transaction
+
+const indexer = module.exports = {
+
+  localIndex: (block, conf) => {
+
+    /********************
+     * GENERAL BEHAVIOR
+     *
+     * * for each newcomer: 2 indexes (1 iindex CREATE, 1 mindex CREATE)
+     * * for each comeback: 2 indexes (1 iindex UPDATE, 1 mindex UPDATE)
+     * * for each renewer:  1 index   (                 1 mindex UPDATE)
+     * * for each leaver:   1 index   (                 1 mindex UPDATE)
+     * * for each revoked:  1 index   (                 1 mindex UPDATE)
+     * * for each excluded: 1 indexes (1 iindex UPDATE)
+     *
+     * * for each certification: 1 index (1 cindex CREATE)
+     *
+     * * for each tx output: 1 index (1 sindex CREATE)
+     * * for each tx input:  1 index (1 sindex UPDATE)
+     */
+
+    const index = [];
+
+    /***************************
+     * IDENTITIES INDEX (IINDEX)
+     **************************/
+    for (const identity of block.identities) {
+      const idty = Identity.fromInline(identity);
+      // Computes the hash if not done yet
+      index.push({
+        index: constants.I_INDEX,
+        op: constants.IDX_CREATE,
+        uid: idty.uid,
+        pub: idty.pubkey,
+        hash: idty.hash,
+        sig: idty.sig,
+        created_on: idty.buid,
+        written_on: [block.number, block.hash].join('-'),
+        member: true,
+        wasMember: true,
+        kick: false,
+        wid: null // wotb id
+      });
+    }
+
+    /****************************
+     * MEMBERSHIPS INDEX (MINDEX)
+     ***************************/
+    // Joiners (newcomer or join back)
+    for (const inlineMS of block.joiners) {
+      const ms = Membership.fromInline(inlineMS);
+      const matchesANewcomer = _.filter(index, (row) => row.index == constants.I_INDEX && row.pub == ms.issuer).length > 0;
+      if (matchesANewcomer) {
+        // Newcomer
+        index.push({
+          index: constants.M_INDEX,
+          op: constants.IDX_CREATE,
+          pub: ms.issuer,
+          created_on: [ms.number, ms.fpr].join('-'),
+          written_on: [block.number, block.hash].join('-'),
+          type: 'JOIN',
+          expires_on: conf.msValidity,
+          revokes_on: conf.msValidity * constants.REVOCATION_FACTOR,
+          chainable_on: parseInt(block.medianTime) + conf.msPeriod,
+          revoked_on: null,
+          leaving: false
+        });
+      } else {
+        // Join back
+        index.push({
+          index: constants.M_INDEX,
+          op: constants.IDX_UPDATE,
+          pub: ms.issuer,
+          created_on: [ms.number, ms.fpr].join('-'),
+          written_on: [block.number, block.hash].join('-'),
+          type: 'JOIN',
+          expires_on: conf.msValidity,
+          revokes_on: conf.msValidity * constants.REVOCATION_FACTOR,
+          chainable_on: parseInt(block.medianTime) + conf.msPeriod,
+          revoked_on: null,
+          leaving: null
+        });
+        index.push({
+          index: constants.I_INDEX,
+          op: constants.IDX_UPDATE,
+          uid: null,
+          pub: ms.issuer,
+          created_on: null,
+          written_on: [block.number, block.hash].join('-'),
+          member: true,
+          wasMember: null,
+          kick: null,
+          wid: null
+        });
+      }
+    }
+    // Actives
+    for (const inlineMS of block.actives) {
+      const ms = Membership.fromInline(inlineMS);
+      // Renew
+      index.push({
+        index: constants.M_INDEX,
+        op: constants.IDX_UPDATE,
+        pub: ms.issuer,
+        created_on: [ms.number, ms.fpr].join('-'),
+        written_on: [block.number, block.hash].join('-'),
+        type: 'ACTIVE',
+        expires_on: conf.msValidity,
+        revokes_on: conf.msValidity * constants.REVOCATION_FACTOR,
+        chainable_on: parseInt(block.medianTime) + conf.msPeriod,
+        revoked_on: null,
+        leaving: null
+      });
+    }
+    // Leavers
+    for (const inlineMS of block.leavers) {
+      const ms = Membership.fromInline(inlineMS);
+      index.push({
+        index: constants.M_INDEX,
+        op: constants.IDX_UPDATE,
+        pub: ms.issuer,
+        created_on: [ms.number, ms.fpr].join('-'),
+        written_on: [block.number, block.hash].join('-'),
+        type: 'LEAVE',
+        expires_on: null,
+        revokes_on: null,
+        chainable_on: parseInt(block.medianTime) + conf.msPeriod,
+        revoked_on: null,
+        leaving: true
+      });
+    }
+    // Revoked
+    for (const inlineRevocation of block.revoked) {
+      const revocation = Identity.revocationFromInline(inlineRevocation);
+      index.push({
+        index: constants.M_INDEX,
+        op: constants.IDX_UPDATE,
+        pub: revocation.pubkey,
+        created_on: [block.number, block.hash].join('-'),
+        written_on: [block.number, block.hash].join('-'),
+        expires_on: null,
+        revokes_on: null,
+        revoked_on: [block.number, block.hash].join('-'),
+        revocation: revocation.sig,
+        leaving: false
+      });
+    }
+    // Excluded
+    for (const excluded of block.excluded) {
+      index.push({
+        index: constants.I_INDEX,
+        op: constants.IDX_UPDATE,
+        uid: null,
+        pub: excluded,
+        created_on: null,
+        written_on: [block.number, block.hash].join('-'),
+        member: false,
+        wasMember: null,
+        kick: false,
+        wid: null
+      });
+    }
+
+    /*******************************
+     * CERTIFICATIONS INDEX (CINDEX)
+     ******************************/
+    for (const inlineCert of block.certifications) {
+      const cert = Certification.fromInline(inlineCert);
+      index.push({
+        index: constants.C_INDEX,
+        op: constants.IDX_CREATE,
+        issuer: cert.pubkey,
+        receiver: cert.to,
+        created_on: cert.block_number,
+        written_on: [block.number, block.hash].join('-'),
+        sig: cert.sig,
+        chainable_on: parseInt(block.medianTime)  + conf.sigPeriod,
+        expires_on: conf.sigValidity,
+        expired_on: 0,
+        from_wid: null,
+        to_wid: null
+      });
+    }
+
+    return index.concat(module.exports.localSIndex(block));
+  },
+
+  localSIndex: (block) => {
+    /*******************************
+     * SOURCES INDEX (SINDEX)
+     ******************************/
+    const index = [];
+    if (!block.transactions && block.getTransactions) {
+      const txs = block.getTransactions();
+      block.transactions = [];
+      for (const tx of txs) {
+        block.transactions.push({
+          version: tx.version,
+          comment: tx.comment,
+          issuers: tx.issuers,
+          signatures: tx.signatures,
+          inputs: tx.inputs.map((i) => i.raw),
+          outputs: tx.outputs.map((o) => o.raw)
+        });
+      }
+    }
+    for (const obj of block.transactions) {
+      obj.currency = block.currency || obj.currency;
+      const txObj = Transaction.fromJSON(obj);
+      const txHash = txObj.getHash(true);
+      let k = 0;
+      for (const input of txObj.inputs) {
+        index.push({
+          index: constants.S_INDEX,
+          op: constants.IDX_UPDATE,
+          tx: txHash,
+          identifier: input.identifier,
+          pos: input.pos,
+          created_on: obj.blockstamp,
+          written_on: [block.number, block.hash].join('-'),
+          written_time: block.medianTime,
+          locktime: obj.locktime,
+          unlock: txObj.unlocks[k],
+          amount: input.amount,
+          base: input.base,
+          conditions: null,
+          consumed: true,
+          txObj: txObj
+        });
+        k++;
+      }
+
+      let i = 0;
+      for (const output of txObj.outputs) {
+        index.push({
+          index: constants.S_INDEX,
+          op: constants.IDX_CREATE,
+          tx: txHash,
+          identifier: txHash,
+          pos: i++,
+          written_on: [block.number, block.hash].join('-'),
+          written_time: block.medianTime,
+          locktime: obj.locktime,
+          amount: output.amount,
+          base: output.base,
+          conditions: output.conditions,
+          consumed: false,
+          txObj: obj
+        });
+      }
+    }
+    return index;
+  },
+
+  quickCompleteGlobalScope: (block, conf, bindex, iindex, mindex, cindex, dal) => co(function*() {
+
+    function range(start, end, property) {
+      return co(function*() {
+        let range;
+        end = Math.min(end, bindex.length);
+        if (start == 1) {
+          range = bindex.slice(-end);
+        } else {
+          range = bindex.slice(-end, -start + 1);
+        }
+        range.reverse();
+        if (property) {
+          // Filter on a particular property
+          return range.map((b) => b[property]);
+        } else {
+          return range;
+        }
+      });
+    }
+
+    function head(n) {
+      return co(function*() {
+        return (yield range(n, n))[0];
+      });
+    }
+
+    const HEAD = {
+      version: block.version,
+      currency: block.currency,
+      bsize: Block.getLen(block),
+      hash: Block.getHash(block),
+      issuer: block.issuer,
+      time: block.time,
+      medianTime: block.medianTime,
+      number: block.number,
+      powMin: block.powMin,
+      unitBase: block.unitbase,
+      membersCount: block.membersCount,
+      dividend: block.dividend
+    };
+    const HEAD_1 = yield head(1);
+
+    if (HEAD.number == 0) {
+      HEAD.dividend = conf.ud0;
+    }
+    else if (!HEAD.dividend) {
+      HEAD.dividend = HEAD_1.dividend;
+    } else {
+      HEAD.new_dividend = HEAD.dividend;
+    }
+
+    // BR_G04
+    yield indexer.prepareIssuersCount(HEAD, range, HEAD_1);
+
+    // BR_G05
+    indexer.prepareIssuersFrame(HEAD, HEAD_1);
+
+    // BR_G06
+    indexer.prepareIssuersFrameVar(HEAD, HEAD_1);
+
+    // BR_G07
+    yield indexer.prepareAvgBlockSize(HEAD, range);
+
+    // BR_G09
+    indexer.prepareDiffNumber(HEAD, HEAD_1, conf);
+
+    // BR_G11
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+
+    // BR_G15
+    indexer.prepareMass(HEAD, HEAD_1);
+
+    // BR_G16
+    yield indexer.prepareSpeed(HEAD, head, conf);
+
+    // BR_G19
+    yield indexer.prepareIdentitiesAge(iindex, HEAD, HEAD_1, conf, dal);
+
+    // BR_G22
+    yield indexer.prepareMembershipsAge(mindex, HEAD, HEAD_1, conf, dal);
+
+    // BR_G37
+    yield indexer.prepareCertificationsAge(cindex, HEAD, HEAD_1, conf, dal);
+
+    // BR_G104
+    yield indexer.ruleIndexCorrectMembershipExpiryDate(HEAD, mindex, dal);
+
+    // BR_G105
+    yield indexer.ruleIndexCorrectCertificationExpiryDate(HEAD, cindex, dal);
+
+    return HEAD;
+  }),
+
+  completeGlobalScope: (block, conf, index, dal) => co(function*() {
+
+    const iindex = module.exports.iindex(index);
+    const mindex = module.exports.mindex(index);
+    const cindex = module.exports.cindex(index);
+    const sindex = module.exports.sindex(index);
+
+    const range = dal.range;
+    const head = dal.head;
+
+    const HEAD = {
+      version: block.version,
+      bsize: Block.getLen(block),
+      hash: Block.getHash(block),
+      issuer: block.issuer,
+      time: block.time,
+      powMin: block.powMin
+    };
+    const HEAD_1 = yield head(1);
+    if (HEAD_1) {
+      HEAD_1.currency = conf.currency;
+    }
+
+    // BR_G01
+    indexer.prepareNumber(HEAD, HEAD_1);
+
+    // BR_G02
+    if (HEAD.number > 0) {
+      HEAD.previousHash = HEAD_1.hash;
+    } else {
+      HEAD.previousHash = null;
+    }
+
+    // BR_G99
+    if (HEAD.number > 0) {
+      HEAD.currency = HEAD_1.currency;
+    } else {
+      HEAD.currency = null;
+    }
+
+    // BR_G03
+    if (HEAD.number > 0) {
+      HEAD.previousIssuer = HEAD_1.issuer;
+    } else {
+      HEAD.previousIssuer = null;
+    }
+
+    // BR_G03
+    if (HEAD.number > 0) {
+      HEAD.issuerIsMember = reduce(yield dal.iindexDAL.reducable(HEAD.issuer)).member;
+    } else {
+      HEAD.issuerIsMember = reduce(_.where(iindex, { pub: HEAD.issuer })).member;
+    }
+
+    // BR_G04
+    yield indexer.prepareIssuersCount(HEAD, range, HEAD_1);
+
+    // BR_G05
+    indexer.prepareIssuersFrame(HEAD, HEAD_1);
+
+    // BR_G06
+    indexer.prepareIssuersFrameVar(HEAD, HEAD_1);
+
+    // BR_G07
+    yield indexer.prepareAvgBlockSize(HEAD, range);
+
+    // BR_G08
+    if (HEAD.number > 0) {
+      HEAD.medianTime = Math.max(HEAD_1.medianTime, average(yield range(1, Math.min(conf.medianTimeBlocks, HEAD.number), 'time')));
+    } else {
+      HEAD.medianTime = HEAD.time;
+    }
+
+    // BR_G09
+    indexer.prepareDiffNumber(HEAD, HEAD_1, conf);
+
+    // BR_G10
+    if (HEAD.number == 0) {
+      HEAD.membersCount = count(_.filter(iindex, (entry) => entry.member === true));
+    } else {
+      HEAD.membersCount = HEAD_1.membersCount
+        + count(_.filter(iindex, (entry) => entry.member === true))
+        - count(_.filter(iindex, (entry) => entry.member === false));
+    }
+
+    // BR_G11
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+
+    // BR_G12
+    if (HEAD.number == 0) {
+      HEAD.unitBase = 0;
+    } else {
+      HEAD.unitBase = HEAD_1.unitBase;
+    }
+
+    // BR_G13
+    indexer.prepareDividend(HEAD, HEAD_1, conf);
+
+    // BR_G14
+    indexer.prepareUnitBase(HEAD, HEAD_1, conf);
+
+    // BR_G15
+    indexer.prepareMass(HEAD, HEAD_1);
+
+    // BR_G16
+    yield indexer.prepareSpeed(HEAD, head, conf);
+
+    // BR_G17
+    if (HEAD.number > 0) {
+
+      const ratio = constants.POW_DIFFICULTY_RANGE_RATIO;
+      const maxGenTime = Math.ceil(conf.avgGenTime * ratio);
+      const minGenTime = Math.floor(conf.avgGenTime / ratio);
+      const minSpeed = 1 / maxGenTime;
+      const maxSpeed = 1 / minGenTime;
+
+      if (HEAD.diffNumber != HEAD_1.diffNumber && HEAD.speed >= maxSpeed && (HEAD_1.powMin + 2) % 16 == 0) {
+        HEAD.powMin = HEAD_1.powMin + 2;
+      } else if (HEAD.diffNumber != HEAD_1.diffNumber && HEAD.speed >= maxSpeed) {
+        HEAD.powMin = HEAD_1.powMin + 1;
+      } else if (HEAD.diffNumber != HEAD_1.diffNumber && HEAD.speed <= minSpeed && HEAD_1.powMin % 16 == 0) {
+        HEAD.powMin = Math.max(0, HEAD_1.powMin - 2);
+      } else if (HEAD.diffNumber != HEAD_1.diffNumber && HEAD.speed <= minSpeed) {
+        HEAD.powMin = Math.max(0, HEAD_1.powMin - 1);
+      } else {
+        HEAD.powMin = HEAD_1.powMin;
+      }
+    }
+
+    // BR_G18
+    yield indexer.preparePersonalizedPoW(HEAD, HEAD_1, range, conf);
+
+    // BR_G19
+    yield indexer.prepareIdentitiesAge(iindex, HEAD, HEAD_1, conf, dal);
+
+    // BR_G20
+    yield iindex.map((ENTRY) => co(function*() {
+      if (ENTRY.op == constants.IDX_CREATE) {
+        ENTRY.uidUnique = count(yield dal.iindexDAL.sqlFind({ uid: ENTRY.uid })) == 0;
+      } else {
+        ENTRY.uidUnique = true;
+      }
+    }));
+
+    // BR_G21
+    yield iindex.map((ENTRY) => co(function*() {
+      if (ENTRY.op == constants.IDX_CREATE) {
+        ENTRY.pubUnique = count(yield dal.iindexDAL.sqlFind({pub: ENTRY.pub})) == 0;
+      } else {
+        ENTRY.pubUnique = true;
+      }
+    }));
+
+    // BR_G33
+    yield iindex.map((ENTRY) => co(function*() {
+      if (ENTRY.member !== false) {
+        ENTRY.excludedIsMember = true;
+      } else {
+        ENTRY.excludedIsMember = reduce(yield dal.iindexDAL.reducable(ENTRY.pub)).member;
+      }
+    }));
+
+    // BR_G34
+    yield mindex.map((ENTRY) => co(function*() {
+      ENTRY.isBeingRevoked = !!ENTRY.revoked_on;
+    }));
+
+    // BR_G107
+    if (HEAD.number > 0) {
+      yield mindex.map((ENTRY) => co(function*() {
+        const rows = yield dal.mindexDAL.sqlFind({ pub: ENTRY.pub, chainable_on: { $gt: HEAD_1.medianTime }});
+        // This rule will be enabled on
+        if (HEAD.medianTime >= 1498860000) {
+          ENTRY.unchainables = count(rows);
+        } else {
+          ENTRY.unchainables = []
+        }
+      }));
+    }
+
+    // BR_G35
+    yield iindex.map((ENTRY) => co(function*() {
+      ENTRY.isBeingKicked = ENTRY.member === false;
+    }));
+
+    // BR_G36
+    yield iindex.map((ENTRY) => co(function*() {
+      const isMarkedAsToKick = reduce(yield dal.iindexDAL.reducable(ENTRY.pub)).kick;
+      const isBeingRevoked = count(_.filter(mindex, (m) => m.isBeingRevoked && m.pub == ENTRY.pub)) == 1;
+      ENTRY.hasToBeExcluded = isMarkedAsToKick || isBeingRevoked;
+    }));
+
+    // BR_G22
+    yield indexer.prepareMembershipsAge(mindex, HEAD, HEAD_1, conf, dal);
+
+    // BR_G23
+    yield mindex.map((ENTRY) => co(function*() {
+      if (!ENTRY.revoked_on) {
+        const created_on = reduce(yield dal.mindexDAL.reducable(ENTRY.pub)).created_on;
+        if (created_on != null) {
+          ENTRY.numberFollowing = number(ENTRY.created_on) > number(created_on);
+        } else {
+          ENTRY.numberFollowing = true; // Follows nothing
+        }
+      } else {
+        ENTRY.numberFollowing = true;
+      }
+    }));
+
+    // BR_G24
+    // Global testing, because of wotb
+    const oneIsOutdistanced = yield checkPeopleAreNotOudistanced(
+      _.filter(mindex, (entry) => !entry.revoked_on).map((entry) => entry.pub),
+      cindex.reduce((newLinks, c) => {
+        newLinks[c.receiver] = newLinks[c.receiver] || [];
+        newLinks[c.receiver].push(c.issuer);
+        return newLinks;
+      }, {}),
+      // Newcomers
+      _.where(iindex, { op: constants.IDX_CREATE }).map((entry) => entry.pub),
+      conf,
+      dal
+    );
+    mindex.map((ENTRY) => {
+      if (ENTRY.expires_on) {
+        ENTRY.distanceOK = !oneIsOutdistanced;
+      } else {
+        ENTRY.distanceOK = true;
+      }
+    });
+
+    // BR_G25
+    yield mindex.map((ENTRY) => co(function*() {
+      ENTRY.onRevoked = reduce(yield dal.mindexDAL.reducable(ENTRY.pub)).revoked_on != null;
+    }));
+
+    // BR_G26
+    yield _.filter(mindex, (entry) => entry.op == constants.IDX_UPDATE && entry.expired_on === 0).map((ENTRY) => co(function*() {
+      ENTRY.joinsTwice = reduce(yield dal.iindexDAL.reducable(ENTRY.pub)).member == true;
+    }));
+
+    // BR_G27
+    yield mindex.map((ENTRY) => co(function*() {
+      if (ENTRY.type == 'JOIN' || ENTRY.type == 'ACTIVE') {
+        const existing = count(yield dal.cindexDAL.sqlFind({ receiver: ENTRY.pub, expired_on: 0 }));
+        const pending = count(_.filter(cindex, (c) => c.receiver == ENTRY.pub && c.expired_on == 0));
+        ENTRY.enoughCerts = (existing + pending) >= conf.sigQty;
+      } else {
+        ENTRY.enoughCerts = true;
+      }
+    }));
+
+    // BR_G28
+    yield mindex.map((ENTRY) => co(function*() {
+      if (ENTRY.type == 'LEAVE') {
+        ENTRY.leaverIsMember = reduce(yield dal.iindexDAL.reducable(ENTRY.pub)).member;
+      } else {
+        ENTRY.leaverIsMember = true;
+      }
+    }));
+
+    // BR_G29
+    yield mindex.map((ENTRY) => co(function*() {
+      if (ENTRY.type == 'ACTIVE') {
+        const reducable = yield dal.iindexDAL.reducable(ENTRY.pub);
+        ENTRY.activeIsMember = reduce(reducable).member;
+      } else {
+        ENTRY.activeIsMember = true;
+      }
+    }));
+
+    // BR_G30
+    yield mindex.map((ENTRY) => co(function*() {
+      if (!ENTRY.revoked_on) {
+        ENTRY.revokedIsMember = true;
+      } else {
+        ENTRY.revokedIsMember = reduce(yield dal.iindexDAL.reducable(ENTRY.pub)).member;
+      }
+    }));
+
+    // BR_G31
+    yield mindex.map((ENTRY) => co(function*() {
+      if (!ENTRY.revoked_on) {
+        ENTRY.alreadyRevoked = false;
+      } else {
+        ENTRY.alreadyRevoked = reduce(yield dal.mindexDAL.reducable(ENTRY.pub)).revoked_on;
+      }
+    }));
+
+    // BR_G32
+    yield mindex.map((ENTRY) => co(function*() {
+      if (!ENTRY.revoked_on) {
+        ENTRY.revocationSigOK = true;
+      } else {
+        ENTRY.revocationSigOK = yield sigCheckRevoke(ENTRY, dal, block.currency);
+      }
+    }));
+
+    // BR_G37
+    yield indexer.prepareCertificationsAge(cindex, HEAD, HEAD_1, conf, dal);
+
+    // BR_G38
+    if (HEAD.number > 0) {
+      yield cindex.map((ENTRY) => co(function*() {
+        const rows = yield dal.cindexDAL.sqlFind({ issuer: ENTRY.issuer, chainable_on: { $gt: HEAD_1.medianTime }});
+        ENTRY.unchainables = count(rows);
+      }));
+    }
+
+    // BR_G39
+    yield cindex.map((ENTRY) => co(function*() {
+      ENTRY.stock = count(yield dal.cindexDAL.getValidLinksFrom(ENTRY.issuer));
+    }));
+
+    // BR_G40
+    yield cindex.map((ENTRY) => co(function*() {
+      ENTRY.fromMember = reduce(yield dal.iindexDAL.reducable(ENTRY.issuer)).member;
+    }));
+
+    // BR_G41
+    yield cindex.map((ENTRY) => co(function*() {
+      ENTRY.toMember = reduce(yield dal.iindexDAL.reducable(ENTRY.receiver)).member;
+    }));
+
+    // BR_G42
+    yield cindex.map((ENTRY) => co(function*() {
+      ENTRY.toNewcomer = count(_.where(iindex, { member: true, pub: ENTRY.receiver })) > 0;
+    }));
+
+    // BR_G43
+    yield cindex.map((ENTRY) => co(function*() {
+      ENTRY.toLeaver = reduce(yield dal.mindexDAL.reducable(ENTRY.pub)).leaving;
+    }));
+
+    // BR_G44
+    yield cindex.map((ENTRY) => co(function*() {
+      const reducable = yield dal.cindexDAL.sqlFind({ issuer: ENTRY.issuer, receiver: ENTRY.receiver });
+      ENTRY.isReplay = count(reducable) > 0 && reduce(reducable).expired_on === 0;
+    }));
+
+    // BR_G45
+    yield cindex.map((ENTRY) => co(function*() {
+      ENTRY.sigOK = checkCertificationIsValid(block, ENTRY, (pub) => {
+        let localInlineIdty = block.getInlineIdentity(pub);
+        if (localInlineIdty) {
+          return Identity.fromInline(localInlineIdty);
+        }
+        return dal.getWrittenIdtyByPubkey(pub);
+      }, conf, dal);
+    }));
+
+    // BR_G102
+    yield _.where(sindex, { op: constants.IDX_UPDATE }).map((ENTRY) => co(function*() {
+      if (HEAD.number == 0 && ENTRY.created_on == '0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855') {
+        ENTRY.age = 0;
+      } else {
+        let ref = yield dal.getBlockByBlockstamp(ENTRY.created_on);
+        if (ref && blockstamp(ref.number, ref.hash) == ENTRY.created_on) {
+          ENTRY.age = HEAD_1.medianTime - ref.medianTime;
+        } else {
+          ENTRY.age = constants.TX_WINDOW + 1;
+        }
+      }
+    }));
+
+    // BR_G46
+    yield _.where(sindex, { op: constants.IDX_UPDATE }).map((ENTRY) => co(function*() {
+      const reducable = yield dal.sindexDAL.sqlFind({
+        identifier: ENTRY.identifier,
+        pos: ENTRY.pos,
+        amount: ENTRY.amount,
+        base: ENTRY.base
+      });
+      ENTRY.conditions = reduce(reducable).conditions; // We valuate the input conditions, so we can map these records to a same account
+      ENTRY.available = reduce(reducable).consumed === false;
+    }));
+
+    // BR_G47
+    yield _.where(sindex, { op: constants.IDX_UPDATE }).map((ENTRY) => co(function*() {
+      let source = _.filter(sindex, (src) => src.identifier == ENTRY.identifier && src.pos == ENTRY.pos && src.conditions && src.op === constants.IDX_CREATE)[0];
+      if (!source) {
+        const reducable = yield dal.sindexDAL.sqlFind({
+          identifier: ENTRY.identifier,
+          pos: ENTRY.pos,
+          amount: ENTRY.amount,
+          base: ENTRY.base
+        });
+        source = reduce(reducable);
+      }
+      ENTRY.conditions = source.conditions;
+      ENTRY.isLocked = !txSourceUnlock(ENTRY, source, HEAD);
+    }));
+
+    // BR_G48
+    yield _.where(sindex, { op: constants.IDX_UPDATE }).map((ENTRY) => co(function*() {
+      ENTRY.isTimeLocked = ENTRY.written_time - reduce(yield dal.sindexDAL.sqlFind({
+          identifier: ENTRY.identifier,
+          pos: ENTRY.pos,
+          amount: ENTRY.amount,
+          base: ENTRY.base
+        })).written_time < ENTRY.locktime;
+    }));
+
+    return HEAD;
+  }),
+
+  // BR_G01
+  prepareNumber: (HEAD, HEAD_1) => {
+    if (HEAD_1) {
+      HEAD.number = HEAD_1.number + 1;
+    } else {
+      HEAD.number = 0;
+    }
+  },
+
+  // BR_G04
+  prepareIssuersCount: (HEAD, range, HEAD_1) => co(function*() {
+    if (HEAD.number == 0) {
+      HEAD.issuersCount = 0;
+    } else {
+      HEAD.issuersCount = count(uniq(yield range(1, HEAD_1.issuersFrame, 'issuer')));
+    }
+  }),
+
+  // BR_G05
+  prepareIssuersFrame: (HEAD, HEAD_1) => {
+    if (HEAD.number == 0) {
+      HEAD.issuersFrame = 1;
+    } else if (HEAD_1.issuersFrameVar > 0) {
+      HEAD.issuersFrame = HEAD_1.issuersFrame + 1
+    } else if (HEAD_1.issuersFrameVar < 0) {
+      HEAD.issuersFrame = HEAD_1.issuersFrame - 1
+    } else {
+      HEAD.issuersFrame = HEAD_1.issuersFrame
+    }
+  },
+
+  // BR_G06
+  prepareIssuersFrameVar: (HEAD, HEAD_1) => {
+    if (HEAD.number == 0) {
+      HEAD.issuersFrameVar = 0;
+    } else {
+      const issuersVar = (HEAD.issuersCount - HEAD_1.issuersCount);
+      if (HEAD_1.issuersFrameVar > 0) {
+        HEAD.issuersFrameVar = HEAD_1.issuersFrameVar + 5 * issuersVar - 1;
+      } else if (HEAD_1.issuersFrameVar < 0) {
+        HEAD.issuersFrameVar = HEAD_1.issuersFrameVar + 5 * issuersVar + 1;
+      } else {
+        HEAD.issuersFrameVar = HEAD_1.issuersFrameVar + 5 * issuersVar;
+      }
+    }
+  },
+
+  // BR_G07
+  prepareAvgBlockSize: (HEAD, range) => co(function*() {
+    HEAD.avgBlockSize = average(yield range(1, HEAD.issuersCount, 'bsize'));
+  }),
+
+  // BR_G09
+  prepareDiffNumber: (HEAD, HEAD_1, conf) => {
+    if (HEAD.number == 0) {
+      HEAD.diffNumber = HEAD.number + conf.dtDiffEval;
+    } else if (HEAD_1.diffNumber <= HEAD.number) {
+      HEAD.diffNumber = HEAD_1.diffNumber + conf.dtDiffEval;
+    } else {
+      HEAD.diffNumber = HEAD_1.diffNumber;
+    }
+  },
+
+  // BR_G11
+  prepareUDTime: (HEAD, HEAD_1, conf) => {
+    // UD Production
+    if (HEAD.number == 0) {
+      HEAD.udTime = conf.udTime0;
+    } else if (HEAD_1.udTime <= HEAD.medianTime) {
+      HEAD.udTime = HEAD_1.udTime + conf.dt;
+    } else {
+      HEAD.udTime = HEAD_1.udTime;
+    }
+    // UD Reevaluation
+    if (HEAD.number == 0) {
+      HEAD.udReevalTime = conf.udReevalTime0;
+    } else if (HEAD_1.udReevalTime <= HEAD.medianTime) {
+      HEAD.udReevalTime = HEAD_1.udReevalTime + conf.dtReeval;
+    } else {
+      HEAD.udReevalTime = HEAD_1.udReevalTime;
+    }
+  },
+
+  // BR_G13
+  prepareDividend: (HEAD, HEAD_1, conf) => {
+    // UD re-evaluation
+    if (HEAD.number == 0) {
+      HEAD.dividend = conf.ud0;
+    } else if (HEAD.udReevalTime != HEAD_1.udReevalTime) {
+      // DUG
+      const previousUB = HEAD_1.unitBase;
+      HEAD.dividend = Math.ceil(HEAD_1.dividend + Math.pow(conf.c, 2) * Math.ceil(HEAD_1.massReeval / Math.pow(10, previousUB)) / HEAD.membersCount / (conf.dtReeval / conf.dt));
+    } else {
+      HEAD.dividend = HEAD_1.dividend;
+    }
+    // UD creation
+    if (HEAD.number == 0) {
+      HEAD.new_dividend = null;
+    } else if (HEAD.udTime != HEAD_1.udTime) {
+      HEAD.new_dividend = HEAD.dividend;
+    } else {
+      HEAD.new_dividend = null;
+    }
+  },
+
+  // BR_G14
+  prepareUnitBase: (HEAD) => {
+    if (HEAD.dividend >= Math.pow(10, constants.NB_DIGITS_UD)) {
+      HEAD.dividend = Math.ceil(HEAD.dividend / 10);
+      HEAD.new_dividend = HEAD.dividend;
+      HEAD.unitBase = HEAD.unitBase + 1;
+    }
+  },
+
+  // BR_G15
+  prepareMass: (HEAD, HEAD_1) => {
+    // Mass
+    if (HEAD.number == 0) {
+      HEAD.mass = 0;
+    }
+    else if (HEAD.udTime != HEAD_1.udTime) {
+      HEAD.mass = HEAD_1.mass + HEAD.dividend * Math.pow(10, HEAD.unitBase) * HEAD.membersCount;
+    } else {
+      HEAD.mass = HEAD_1.mass;
+    }
+    // Mass on re-evaluation
+    if (HEAD.number == 0) {
+      HEAD.massReeval = 0;
+    }
+    else if (HEAD.udReevalTime != HEAD_1.udReevalTime) {
+      HEAD.massReeval = HEAD_1.mass;
+    } else {
+      HEAD.massReeval = HEAD_1.massReeval;
+    }
+  },
+
+  // BR_G16
+  prepareSpeed: (HEAD, head, conf) => co(function*() {
+    if (HEAD.number == 0) {
+      HEAD.speed = 0;
+    } else {
+      const quantity = Math.min(conf.dtDiffEval, HEAD.number);
+      const elapsed = (HEAD.medianTime - (yield head(quantity)).medianTime);
+      if (!elapsed) {
+        HEAD.speed = 100;
+      } else {
+        HEAD.speed = quantity / elapsed;
+      }
+    }
+  }),
+
+  // BR_G18
+  preparePersonalizedPoW: (HEAD, HEAD_1, range, conf) => co(function*() {
+    let nbPersonalBlocksInFrame, medianOfBlocksInFrame, blocksOfIssuer;
+    let nbPreviousIssuers = 0, nbBlocksSince = 0;
+    if (HEAD.number == 0) {
+      nbPersonalBlocksInFrame = 0;
+      medianOfBlocksInFrame = 1;
+    } else {
+      const blocksInFrame = _.filter(yield range(1, HEAD_1.issuersFrame), (b) => b.number <= HEAD_1.number);
+      const issuersInFrame = blocksInFrame.map((b) => b.issuer);
+      blocksOfIssuer = _.filter(blocksInFrame, (entry) => entry.issuer == HEAD.issuer);
+      nbPersonalBlocksInFrame = count(blocksOfIssuer);
+      const blocksPerIssuerInFrame = uniq(issuersInFrame).map((issuer) => count(_.where(blocksInFrame, { issuer })));
+      medianOfBlocksInFrame = Math.max(1, median(blocksPerIssuerInFrame));
+      if (nbPersonalBlocksInFrame == 0) {
+        nbPreviousIssuers = 0;
+        nbBlocksSince = 0;
+      } else {
+        const last = blocksOfIssuer[0];
+        nbPreviousIssuers = last.issuersCount;
+        nbBlocksSince = HEAD_1.number - last.number;
+      }
+    }
+
+    // V0.6 Hardness
+    const PERSONAL_EXCESS = Math.max(0, ( (nbPersonalBlocksInFrame + 1) / medianOfBlocksInFrame) - 1);
+    const PERSONAL_HANDICAP = Math.floor(Math.log(1 + PERSONAL_EXCESS) / Math.log(1.189));
+    HEAD.issuerDiff = Math.max(HEAD.powMin, HEAD.powMin * Math.floor(conf.percentRot * nbPreviousIssuers / (1 + nbBlocksSince))) + PERSONAL_HANDICAP;
+    if ((HEAD.issuerDiff + 1) % 16 == 0) {
+      HEAD.issuerDiff += 1;
+    }
+
+    HEAD.powRemainder = HEAD.issuerDiff  % 16;
+    HEAD.powZeros = (HEAD.issuerDiff - HEAD.powRemainder) / 16;
+  }),
+
+  // BR_G19
+  prepareIdentitiesAge: (iindex, HEAD, HEAD_1, conf, dal) => co(function*() {
+    yield _.where(iindex, { op: constants.IDX_CREATE }).map((ENTRY) => co(function*() {
+      if (HEAD.number == 0 && ENTRY.created_on == '0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855') {
+        ENTRY.age = 0;
+      } else {
+        let ref = yield dal.getBlockByBlockstamp(ENTRY.created_on);
+        if (ref && blockstamp(ref.number, ref.hash) == ENTRY.created_on) {
+          ENTRY.age = HEAD_1.medianTime - ref.medianTime;
+        } else {
+          ENTRY.age = conf.idtyWindow + 1;
+        }
+      }
+    }));
+  }),
+
+  // BR_G22
+  prepareMembershipsAge: (mindex, HEAD, HEAD_1, conf, dal) => co(function*() {
+    yield _.filter(mindex, (entry) => !entry.revoked_on).map((ENTRY) => co(function*() {
+      if (HEAD.number == 0 && ENTRY.created_on == '0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855') {
+        ENTRY.age = 0;
+      } else {
+        let ref = yield dal.getBlockByBlockstamp(ENTRY.created_on);
+        if (ref && blockstamp(ref.number, ref.hash) == ENTRY.created_on) {
+          ENTRY.age = HEAD_1.medianTime - ref.medianTime;
+        } else {
+          ENTRY.age = conf.msWindow + 1;
+        }
+      }
+    }));
+  }),
+
+  // BR_G37
+  prepareCertificationsAge: (cindex, HEAD, HEAD_1, conf, dal) => co(function*() {
+    yield cindex.map((ENTRY) => co(function*() {
+      if (HEAD.number == 0) {
+        ENTRY.age = 0;
+      } else {
+        let ref = yield dal.getBlock(number(ENTRY.created_on));
+        if (ref) {
+          ENTRY.age = HEAD_1.medianTime - ref.medianTime;
+        } else {
+          ENTRY.age = conf.sigWindow + 1;
+        }
+      }
+    }));
+  }),
+
+  // BR_G49
+  ruleVersion: (HEAD, HEAD_1) => {
+    if (HEAD.number > 0) {
+      return HEAD.version == HEAD_1.version || HEAD.version == HEAD_1.version + 1;
+    }
+    return true;
+  },
+
+  // BR_G50
+  ruleBlockSize: (HEAD) => {
+    if (HEAD.number > 0) {
+      return HEAD.bsize < indexer.DUP_HELPERS.getMaxBlockSize(HEAD);
+    }
+    return true;
+  },
+
+  // BR_G98
+  ruleCurrency: (block, HEAD) => {
+    if (HEAD.number > 0) {
+      return block.currency === HEAD.currency;
+    }
+    return true;
+  },
+
+  // BR_G51
+  ruleNumber: (block, HEAD) => block.number == HEAD.number,
+
+  // BR_G52
+  rulePreviousHash: (block, HEAD) => {
+    const equal = block.previousHash == HEAD.previousHash || (!block.previousHash && !HEAD.previousHash)
+    return equal
+  },
+
+  // BR_G53
+  rulePreviousIssuer: (block, HEAD) => block.previousIssuer == HEAD.previousIssuer || (!block.previousIssuer && !HEAD.previousIssuer),
+
+  // BR_G101
+  ruleIssuerIsMember: (HEAD) => HEAD.issuerIsMember == true,
+
+  // BR_G54
+  ruleIssuersCount: (block, HEAD) => block.issuersCount == HEAD.issuersCount,
+
+  // BR_G55
+  ruleIssuersFrame: (block, HEAD) => block.issuersFrame == HEAD.issuersFrame,
+
+  // BR_G56
+  ruleIssuersFrameVar: (block, HEAD) => block.issuersFrameVar == HEAD.issuersFrameVar,
+
+  // BR_G57
+  ruleMedianTime: (block, HEAD) => block.medianTime == HEAD.medianTime,
+
+  // BR_G58
+  ruleDividend: (block, HEAD) => block.dividend == HEAD.new_dividend,
+
+  // BR_G59
+  ruleUnitBase: (block, HEAD) => block.unitbase == HEAD.unitBase,
+
+  // BR_G60
+  ruleMembersCount: (block, HEAD) => block.membersCount == HEAD.membersCount,
+
+  // BR_G61
+  rulePowMin: (block, HEAD) => {
+    if (HEAD.number > 0) {
+      return block.powMin == HEAD.powMin;
+    }
+  },
+
+  // BR_G62
+  ruleProofOfWork: (HEAD) => {
+    // Compute exactly how much zeros are required for this block's issuer
+    const remainder = HEAD.powRemainder;
+    const nbZerosReq = HEAD.powZeros;
+    const highMark = constants.PROOF_OF_WORK.UPPER_BOUND[remainder];
+    const powRegexp = new RegExp('^0{' + nbZerosReq + '}' + '[0-' + highMark + ']');
+    try {
+      if (!HEAD.hash.match(powRegexp)) {
+        const givenZeros = Math.max(0, Math.min(nbZerosReq, HEAD.hash.match(/^0*/)[0].length));
+        const c = HEAD.hash.substr(givenZeros, 1);
+        throw Error('Wrong proof-of-work level: given ' + givenZeros + ' zeros and \'' + c + '\', required was ' + nbZerosReq + ' zeros and an hexa char between [0-' + highMark + ']');
+      }
+      return true;
+    } catch (e) {
+      console.error(e)
+      return false;
+    }
+  },
+
+  // BR_G63
+  ruleIdentityWritability: (iindex, conf) => {
+    for (const ENTRY of iindex) {
+      if (ENTRY.age > conf.idtyWindow) return false;
+    }
+  },
+
+  // BR_G64
+  ruleMembershipWritability: (mindex, conf) => {
+    for (const ENTRY of mindex) {
+      if (ENTRY.age > conf.msWindow) return false;
+    }
+  },
+
+  // BR_G108
+  ruleMembershipPeriod: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (ENTRY.unchainables > 0) return false;
+    }
+  },
+
+  // BR_G65
+  ruleCertificationWritability: (cindex, conf) => {
+    for (const ENTRY of cindex) {
+      if (ENTRY.age > conf.sigWindow) return false;
+    }
+  },
+
+  // BR_G66
+  ruleCertificationStock: (cindex, conf) => {
+    for (const ENTRY of cindex) {
+      if (ENTRY.stock > conf.sigStock) return false;
+    }
+  },
+
+  // BR_G67
+  ruleCertificationPeriod: (cindex) => {
+    for (const ENTRY of cindex) {
+      if (ENTRY.unchainables > 0) return false;
+    }
+  },
+
+  // BR_G68
+  ruleCertificationFromMember: (HEAD, cindex) => {
+    if (HEAD.number > 0) {
+      for (const ENTRY of cindex) {
+        if (!ENTRY.fromMember) return false;
+      }
+    }
+  },
+
+  // BR_G69
+  ruleCertificationToMemberOrNewcomer: (cindex) => {
+    for (const ENTRY of cindex) {
+      if (!ENTRY.toMember && !ENTRY.toNewcomer) return false;
+    }
+  },
+
+  // BR_G70
+  ruleCertificationToLeaver: (cindex) => {
+    for (const ENTRY of cindex) {
+      if (ENTRY.toLeaver) return false;
+    }
+  },
+
+  // BR_G71
+  ruleCertificationReplay: (cindex) => {
+    for (const ENTRY of cindex) {
+      if (ENTRY.isReplay) return false;
+    }
+  },
+
+  // BR_G72
+  ruleCertificationSignature: (cindex) => {
+    for (const ENTRY of cindex) {
+      if (!ENTRY.sigOK) return false;
+    }
+  },
+
+  // BR_G73
+  ruleIdentityUIDUnicity: (iindex) => {
+    for (const ENTRY of iindex) {
+      if (!ENTRY.uidUnique) return false;
+    }
+  },
+
+  // BR_G74
+  ruleIdentityPubkeyUnicity: (iindex) => {
+    for (const ENTRY of iindex) {
+      if (!ENTRY.pubUnique) return false;
+    }
+  },
+
+  // BR_G75
+  ruleMembershipSuccession: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (!ENTRY.numberFollowing) return false;
+    }
+  },
+
+  // BR_G76
+  ruleMembershipDistance: (HEAD, mindex) => {
+    for (const ENTRY of mindex) {
+      if (HEAD.currency == 'gtest'
+        && !ENTRY.distanceOK
+        // && HEAD.number != 8450
+        // && HEAD.number != 9775
+        // && HEAD.number != 10893
+        // && HEAD.number != 11090
+        // && HEAD.number != 11263
+        // && HEAD.number != 11392
+        && HEAD.number < 11512) {
+        return false;
+      }
+      else if (HEAD.currency != 'gtest' && !ENTRY.distanceOK) {
+        return false;
+      }
+    }
+  },
+
+  // BR_G77
+  ruleMembershipOnRevoked: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (ENTRY.onRevoked) return false;
+    }
+  },
+
+  // BR_G78
+  ruleMembershipJoinsTwice: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (ENTRY.joinsTwice) return false;
+    }
+  },
+
+  // BR_G79
+  ruleMembershipEnoughCerts: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (!ENTRY.enoughCerts) return false;
+    }
+  },
+
+  // BR_G80
+  ruleMembershipLeaverIsMember: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (!ENTRY.leaverIsMember) return false;
+    }
+  },
+
+  // BR_G81
+  ruleMembershipActiveIsMember: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (!ENTRY.activeIsMember) return false;
+    }
+  },
+
+  // BR_G82
+  ruleMembershipRevokedIsMember: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (!ENTRY.revokedIsMember) return false;
+    }
+  },
+
+  // BR_G83
+  ruleMembershipRevokedSingleton: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (ENTRY.alreadyRevoked) return false;
+    }
+  },
+
+  // BR_G84
+  ruleMembershipRevocationSignature: (mindex) => {
+    for (const ENTRY of mindex) {
+      if (!ENTRY.revocationSigOK) return false;
+    }
+  },
+
+  // BR_G85
+  ruleMembershipExcludedIsMember: (iindex) => {
+    for (const ENTRY of iindex) {
+      if (!ENTRY.excludedIsMember) return false;
+    }
+  },
+
+  // BR_G86
+  ruleToBeKickedArePresent: (iindex, dal) => co(function*() {
+    const toBeKicked = yield dal.iindexDAL.getToBeKickedPubkeys();
+    for (const toKick of toBeKicked) {
+      if (count(_.where(iindex, { pub: toKick, isBeingKicked: true })) !== 1) {
+        return false;
+      }
+    }
+    const beingKicked = _.filter(iindex, (i) => i.member === false);
+    for (const entry of beingKicked) {
+      if (!entry.hasToBeExcluded) {
+        return false;
+      }
+    }
+  }),
+
+  // BR_G103
+  ruleTxWritability: (sindex) => {
+    for (const ENTRY of sindex) {
+      if (ENTRY.age > constants.TX_WINDOW) return false;
+    }
+  },
+
+  // BR_G87
+  ruleInputIsAvailable: (sindex) => {
+    const inputs = _.where(sindex, { op: constants.IDX_UPDATE });
+    for (const ENTRY of inputs) {
+      if (!ENTRY.available) {
+        return false;
+      }
+    }
+  },
+
+  // BR_G88
+  ruleInputIsUnlocked: (sindex) => {
+    const inputs = _.where(sindex, { op: constants.IDX_UPDATE });
+    for (const ENTRY of inputs) {
+      if (ENTRY.isLocked) {
+        return false;
+      }
+    }
+  },
+
+  // BR_G89
+  ruleInputIsTimeUnlocked: (sindex) => {
+    const inputs = _.where(sindex, { op: constants.IDX_UPDATE });
+    for (const ENTRY of inputs) {
+      if (ENTRY.isTimeLocked) {
+        return false;
+      }
+    }
+  },
+
+  // BR_G90
+  ruleOutputBase: (sindex, HEAD_1) => {
+    const inputs = _.where(sindex, { op: constants.IDX_CREATE });
+    for (const ENTRY of inputs) {
+      if (ENTRY.unitBase > HEAD_1.unitBase) {
+        return false;
+      }
+    }
+  },
+
+  // BR_G91
+  ruleIndexGenDividend: (HEAD, dal) => co(function*() {
+    const dividends = [];
+    if (HEAD.new_dividend) {
+      const members = yield dal.iindexDAL.getMembersPubkeys()
+      for (const MEMBER of members) {
+        dividends.push({
+          op: 'CREATE',
+          identifier: MEMBER.pub,
+          pos: HEAD.number,
+          written_on: [HEAD.number, HEAD.hash].join('-'),
+          written_time: HEAD.medianTime,
+          amount: HEAD.dividend,
+          base: HEAD.unitBase,
+          locktime: null,
+          conditions: 'SIG(' + MEMBER.pub + ')',
+          consumed: false
+        });
+      }
+    }
+    return dividends;
+  }),
+
+  // BR_G106
+  ruleIndexGarbageSmallAccounts: (HEAD, sindex, dal) => co(function*() {
+    const garbages = [];
+    const accounts = Object.keys(sindex.reduce((acc, src) => {
+      acc[src.conditions] = true;
+      return acc;
+    }, {}));
+    const wallets = accounts.reduce((map, acc) => {
+      map[acc] = dal.getWallet(acc);
+      return map;
+    }, {});
+    for (const account of accounts) {
+      const localAccountEntries = _.filter(sindex, (src) => src.conditions == account);
+      const wallet = yield wallets[account];
+      const balance = wallet.balance
+      const variations = localAccountEntries.reduce((sum, src) => {
+        if (src.op === 'CREATE') {
+          return sum + src.amount * Math.pow(10, src.base);
+        } else {
+          return sum - src.amount * Math.pow(10, src.base);
+        }
+      }, 0)
+      // console.log('Balance of %s = %s (%s)', account, balance, variations > 0 ? '+' + variations : variations)
+      if (balance + variations < constants.ACCOUNT_MINIMUM_CURRENT_BASED_AMOUNT * Math.pow(10, HEAD.unitBase)) {
+        const globalAccountEntries = yield dal.sindexDAL.getAvailableForConditions(account)
+        for (const src of localAccountEntries.concat(globalAccountEntries)) {
+          const sourceBeingConsumed = _.filter(sindex, (entry) => entry.op === 'UPDATE' && entry.identifier == src.identifier && entry.pos == src.pos).length > 0;
+          if (!sourceBeingConsumed) {
+            garbages.push({
+              op: 'UPDATE',
+              tx: src.tx,
+              identifier: src.identifier,
+              pos: src.pos,
+              amount: src.amount,
+              base: src.base,
+              written_on: [HEAD.number, HEAD.hash].join('-'),
+              written_time: HEAD.medianTime,
+              conditions: src.conditions,
+              consumed: true // It is now consumed
+            });
+          }
+        }
+      }
+    }
+    return garbages;
+  }),
+
+  // BR_G92
+  ruleIndexGenCertificationExpiry: (HEAD, dal) => co(function*() {
+    const expiries = [];
+    const certs = yield dal.cindexDAL.findExpired(HEAD.medianTime);
+    for (const CERT of certs) {
+      expiries.push({
+        op: 'UPDATE',
+        issuer: CERT.issuer,
+        receiver: CERT.receiver,
+        created_on: CERT.created_on,
+        written_on: [HEAD.number, HEAD.hash].join('-'),
+        expired_on: HEAD.medianTime
+      });
+    }
+    return expiries;
+  }),
+
+  // BR_G93
+  ruleIndexGenMembershipExpiry: (HEAD, dal) => co(function*() {
+    const expiries = [];
+    const memberships = reduceBy(yield dal.mindexDAL.sqlFind({ expires_on: { $lte: HEAD.medianTime } }), ['pub']);
+    for (const POTENTIAL of memberships) {
+      const MS = yield dal.mindexDAL.getReducedMS(POTENTIAL.pub);
+      const hasRenewedSince = MS.expires_on > HEAD.medianTime;
+      if (!MS.expired_on && !hasRenewedSince) {
+        expiries.push({
+          op: 'UPDATE',
+          pub: MS.pub,
+          created_on: MS.created_on,
+          written_on: [HEAD.number, HEAD.hash].join('-'),
+          expired_on: HEAD.medianTime
+        });
+      }
+    }
+    return expiries;
+  }),
+
+  // BR_G94
+  ruleIndexGenExclusionByMembership: (HEAD, mindex, dal) => co(function*() {
+    const exclusions = [];
+    const memberships = _.filter(mindex, (entry) => entry.expired_on);
+    for (const MS of memberships) {
+      const idty = yield dal.iindexDAL.getFromPubkey(MS.pub);
+      if (idty.member) {
+        exclusions.push({
+          op: 'UPDATE',
+          pub: MS.pub,
+          written_on: [HEAD.number, HEAD.hash].join('-'),
+          kick: true
+        });
+      }
+    }
+    return exclusions;
+  }),
+
+  // BR_G95
+  ruleIndexGenExclusionByCertificatons: (HEAD, cindex, iindex, conf, dal) => co(function*() {
+    const exclusions = [];
+    const expiredCerts = _.filter(cindex, (c) => c.expired_on > 0);
+    for (const CERT of expiredCerts) {
+      const just_expired = _.filter(cindex, (c) => c.receiver == CERT.receiver && c.expired_on > 0);
+      const just_received = _.filter(cindex, (c) => c.receiver == CERT.receiver && c.expired_on == 0);
+      const non_expired_global = yield dal.cindexDAL.getValidLinksTo(CERT.receiver);
+      if ((count(non_expired_global) - count(just_expired) + count(just_received)) < conf.sigQty) {
+        const isInExcluded = _.filter(iindex, (i) => i.member === false && i.pub === CERT.receiver)[0];
+        const idty = yield dal.iindexDAL.getFromPubkey(CERT.receiver);
+        if (!isInExcluded && idty.member) {
+          exclusions.push({
+            op: 'UPDATE',
+            pub: CERT.receiver,
+            written_on: [HEAD.number, HEAD.hash].join('-'),
+            kick: true
+          });
+        }
+      }
+    }
+    return exclusions;
+  }),
+
+  // BR_G96
+  ruleIndexGenImplicitRevocation: (HEAD, dal) => co(function*() {
+    const revocations = [];
+    const pending = yield dal.mindexDAL.sqlFind({ revokes_on: { $lte: HEAD.medianTime}, revoked_on: { $null: true } });
+    for (const MS of pending) {
+      const REDUCED = reduce(yield dal.mindexDAL.sqlFind({ pub: MS.pub }));
+      if (REDUCED.revokes_on <= HEAD.medianTime && !REDUCED.revoked_on) {
+        revocations.push({
+          op: 'UPDATE',
+          pub: MS.pub,
+          created_on: REDUCED.created_on,
+          written_on: [HEAD.number, HEAD.hash].join('-'),
+          revoked_on: HEAD.medianTime
+        });
+      }
+    }
+    return revocations;
+  }),
+
+  // BR_G104
+  ruleIndexCorrectMembershipExpiryDate: (HEAD, mindex, dal) => co(function*() {
+    for (const MS of mindex) {
+      if (MS.type == 'JOIN' || MS.type == 'ACTIVE') {
+        let basedBlock = { medianTime: 0 };
+        if (HEAD.number == 0) {
+          basedBlock = HEAD;
+        } else {
+          if (HEAD.currency === 'gtest') {
+            basedBlock = yield dal.getBlockByBlockstamp(MS.created_on);
+          } else {
+            basedBlock = yield dal.getBlockByBlockstamp(MS.created_on);
+          }
+        }
+        MS.expires_on += basedBlock.medianTime;
+        MS.revokes_on += basedBlock.medianTime;
+      }
+    }
+  }),
+
+  // BR_G105
+  ruleIndexCorrectCertificationExpiryDate: (HEAD, cindex, dal) => co(function*() {
+    for (const CERT of cindex) {
+      let basedBlock = { medianTime: 0 };
+      if (HEAD.number == 0) {
+        basedBlock = HEAD;
+      } else {
+        if (HEAD.currency === 'gtest') {
+          basedBlock = yield dal.getBlock(CERT.created_on);
+        } else {
+          basedBlock = yield dal.getBlock(CERT.created_on);
+        }
+      }
+      CERT.expires_on += basedBlock.medianTime;
+    }
+  }),
+
+  iindexCreate: (index) => _(index).filter({ index: constants.I_INDEX, op: constants.IDX_CREATE }),
+  mindexCreate: (index) => _(index).filter({ index: constants.M_INDEX, op: constants.IDX_CREATE }),
+  iindex:       (index) => _(index).filter({ index: constants.I_INDEX }),
+  mindex:       (index) => _(index).filter({ index: constants.M_INDEX }),
+  cindex:       (index) => _(index).filter({ index: constants.C_INDEX }),
+  sindex:       (index) => _(index).filter({ index: constants.S_INDEX }),
+
+  DUP_HELPERS: {
+
+    reduce: reduce,
+    reduceBy: reduceBy,
+    getMaxBlockSize: (HEAD) => Math.max(500, Math.ceil(1.1 * HEAD.avgBlockSize)),
+    checkPeopleAreNotOudistanced: checkPeopleAreNotOudistanced
+  }
+};
+
+function count(range) {
+  return range.length;
+}
+
+function uniq(range) {
+  return _.uniq(range);
+}
+
+function average(values) {
+  // No values => 0 average
+  if (!values.length) return 0;
+  // Otherwise, real average
+  const avg = values.reduce((sum, val) => sum + val, 0) / values.length;
+  return Math.floor(avg);
+}
+
+function median(values) {
+  let med = 0;
+  values.sort((a, b) => a < b ? -1 : (a > b ? 1 : 0));
+  const nbValues = values.length;
+  if (nbValues > 0) {
+    if (nbValues % 2 === 0) {
+      // Even number: the median is the average between the 2 central values, ceil rounded.
+      const firstValue = values[nbValues / 2];
+      const secondValue = values[nbValues / 2 - 1];
+      med = ((firstValue + secondValue) / 2);
+    } else {
+      med = values[(nbValues + 1) / 2 - 1];
+    }
+  }
+  return med;
+}
+
+function number(blockstamp) {
+  return parseInt(blockstamp);
+}
+
+function blockstamp(number, hash) {
+  return [number, hash].join('-');
+}
+
+function reduce(records) {
+  return records.reduce((obj, record) => {
+    const keys = Object.keys(record);
+    for (const k of keys) {
+      if (record[k] !== undefined && record[k] !== null) {
+        obj[k] = record[k];
+      }
+    }
+    return obj;
+  }, {});
+}
+
+function reduceBy(reducables, properties) {
+  const reduced = reducables.reduce((map, entry) => {
+    const id = properties.map((prop) => entry[prop]).join('-');
+    map[id] = map[id] || [];
+    map[id].push(entry);
+    return map;
+  }, {});
+  return Object.values(reduced).map((value) => indexer.DUP_HELPERS.reduce(value));
+}
+
+function checkPeopleAreNotOudistanced (pubkeys, newLinks, newcomers, conf, dal) {
+  return co(function *() {
+    // let wotb = dal.wotb;
+    let wotb = dal.wotb.memCopy();
+    let current = yield dal.getCurrentBlockOrNull();
+    let membersCount = current ? current.membersCount : 0;
+    // TODO: make a temporary copy of the WoT in RAM
+    // We add temporarily the newcomers to the WoT, to integrate their new links
+    let nodesCache = newcomers.reduce((map, pubkey) => {
+      let nodeID = wotb.addNode();
+      map[pubkey] = nodeID;
+      wotb.setEnabled(false, nodeID); // These are not members yet
+      return map;
+    }, {});
+    // Add temporarily the links to the WoT
+    let tempLinks = [];
+    let toKeys = _.keys(newLinks);
+    for (const toKey of toKeys) {
+      let toNode = yield getNodeIDfromPubkey(nodesCache, toKey, dal);
+      for (const fromKey of newLinks[toKey]) {
+        let fromNode = yield getNodeIDfromPubkey(nodesCache, fromKey, dal);
+        tempLinks.push({ from: fromNode, to: toNode });
+      }
+    }
+    wotb.setMaxCert(conf.sigStock + tempLinks.length);
+    tempLinks.forEach((link) => wotb.addLink(link.from, link.to));
+    // Checking distance of each member against them
+    let error;
+    for (const pubkey of pubkeys) {
+      let nodeID = yield getNodeIDfromPubkey(nodesCache, pubkey, dal);
+      const dSen = Math.ceil(Math.pow(membersCount, 1 / conf.stepMax));
+      let isOutdistanced = wotb.isOutdistanced(nodeID, dSen, conf.stepMax, conf.xpercent);
+      if (isOutdistanced) {
+        error = Error('Joiner/Active is outdistanced from WoT');
+        break;
+      }
+    }
+    // Undo temp links/nodes
+    tempLinks.forEach((link) => wotb.removeLink(link.from, link.to));
+    newcomers.forEach(() => wotb.removeNode());
+    wotb.clear();
+    return error ? true : false;
+  });
+}
+
+function getNodeIDfromPubkey(nodesCache, pubkey, dal) {
+  return co(function *() {
+    let toNode = nodesCache[pubkey];
+    // Eventually cache the target nodeID
+    if (toNode === null || toNode === undefined) {
+      let idty = yield dal.getWrittenIdtyByPubkey(pubkey);
+      toNode = idty.wotb_id;
+      nodesCache[pubkey] = toNode;
+    }
+    return toNode;
+  });
+}
+
+function sigCheckRevoke(entry, dal, currency) {
+  return co(function*() {
+    try {
+      let pubkey = entry.pub, sig = entry.revocation;
+      let idty = yield dal.getWrittenIdtyByPubkey(pubkey);
+      if (!idty) {
+        throw Error("A pubkey who was never a member cannot be revoked");
+      }
+      if (idty.revoked) {
+        throw Error("A revoked identity cannot be revoked again");
+      }
+      let rawRevocation = rawer.getOfficialRevocation({
+        currency: currency,
+        issuer: idty.pubkey,
+        uid: idty.uid,
+        buid: idty.buid,
+        sig: idty.sig,
+        revocation: ''
+      });
+      let sigOK = keyring.verify(rawRevocation, sig, pubkey);
+      if (!sigOK) {
+        throw Error("Revocation signature must match");
+      }
+      return true;
+    } catch (e) {
+      return false;
+    }
+  });
+}
+
+
+
+function checkCertificationIsValid (block, cert, findIdtyFunc, conf, dal) {
+  return co(function *() {
+    if (block.number == 0 && cert.created_on != 0) {
+      throw Error('Number must be 0 for root block\'s certifications');
+    } else {
+      try {
+        let basedBlock = {
+          hash: constants.SPECIAL_HASH
+        };
+        if (block.number != 0) {
+          try {
+            basedBlock = yield dal.getBlock(cert.created_on);
+          } catch (e) {
+            throw Error('Certification based on an unexisting block');
+          }
+        }
+        let idty = yield findIdtyFunc(block, cert.to, dal);
+        let current = block.number == 0 ? null : yield dal.getCurrentBlockOrNull();
+        if (!idty) {
+          throw Error('Identity does not exist for certified');
+        }
+        else if (current && current.medianTime > basedBlock.medianTime + conf.sigValidity) {
+          throw Error('Certification has expired');
+        }
+        else if (cert.from == idty.pubkey)
+          throw Error('Rejected certification: certifying its own self-certification has no meaning');
+        else {
+          const buid = [cert.created_on, basedBlock.hash].join('-');
+          idty.currency = conf.currency;
+          const raw = rawer.getOfficialCertification(_.extend(idty, {
+            idty_issuer: idty.pubkey,
+            idty_uid: idty.uid,
+            idty_buid: idty.buid,
+            idty_sig: idty.sig,
+            issuer: cert.from,
+            buid: buid,
+            sig: ''
+          }));
+          const verified = keyring.verify(raw, cert.sig, cert.from);
+          if (!verified) {
+            throw constants.ERRORS.WRONG_SIGNATURE_FOR_CERT
+          }
+          return true;
+        }
+      } catch (e) {
+        return false;
+      }
+    }
+  });
+}
+
+function txSourceUnlock(ENTRY, source, HEAD) {
+  const tx = ENTRY.txObj;
+  let sigResults = require('./rules').HELPERS.getSigResult(tx, 'a');
+  let unlocksForCondition = [];
+  let unlocksMetadata = {};
+  let unlockValues = ENTRY.unlock;
+  if (source.conditions) {
+    if (unlockValues) {
+      // Evaluate unlock values
+      let sp = unlockValues.split(' ');
+      for (const func of sp) {
+        let param = func.match(/\((.+)\)/)[1];
+        if (func.match(/SIG/)) {
+          let pubkey = tx.issuers[parseInt(param)];
+          if (!pubkey) {
+            return false;
+          }
+          unlocksForCondition.push({
+            pubkey: pubkey,
+            sigOK: sigResults.sigs[pubkey] && sigResults.sigs[pubkey].matching || false
+          });
+        } else {
+          // XHX
+          unlocksForCondition.push(param);
+        }
+      }
+    }
+
+    if (source.conditions.match(/CLTV/)) {
+      unlocksMetadata.currentTime = HEAD.medianTime;
+    }
+
+    if (source.conditions.match(/CSV/)) {
+      unlocksMetadata.elapsedTime = HEAD.medianTime - parseInt(source.written_time);
+    }
+
+    if (unlock(source.conditions, unlocksForCondition, unlocksMetadata)) {
+      return true;
+    }
+  }
+  return false;
+}
diff --git a/app/lib/rules/global_rules.js b/app/lib/rules/global_rules.js
new file mode 100644
index 0000000000000000000000000000000000000000..d27cf232a66f11d9725fbf2ffce407822d381268
--- /dev/null
+++ b/app/lib/rules/global_rules.js
@@ -0,0 +1,287 @@
+"use strict";
+
+const co             = require('co');
+const _              = require('underscore');
+const common         = require('duniter-common');
+const indexer        = require('../indexer');
+const local_rules    = require('../rules/local_rules');
+
+const constants      = common.constants
+const keyring        = common.keyring
+const rawer          = common.rawer
+const Identity       = common.document.Identity
+const Transaction    = common.document.Transaction
+const unlock         = common.txunlock
+
+let rules = {};
+
+// Empty logger by default
+let logger = {
+  debug: () => {},
+  warn: () => {}
+}
+
+// TODO: all the global rules should be replaced by index rule someday
+
+rules.FUNCTIONS = {
+
+  checkIdentitiesAreWritable: (block, conf, dal) => co(function *() {
+    let current = yield dal.getCurrentBlockOrNull();
+    for (const obj of block.identities) {
+      let idty = Identity.fromInline(obj);
+      let found = yield dal.getWrittenIdtyByUID(idty.uid);
+      if (found) {
+        throw Error('Identity already used');
+      }
+      // Because the window rule does not apply on initial certifications
+      if (current && idty.buid != constants.SPECIAL_BLOCK) {
+        // From DUP 0.5: we fully check the blockstamp
+        const basedBlock = yield dal.getBlockByBlockstamp(idty.buid);
+        // Check if writable
+        let duration = current.medianTime - parseInt(basedBlock.medianTime);
+        if (duration > conf.idtyWindow) {
+          throw Error('Identity is too old and cannot be written');
+        }
+      }
+    }
+    return true;
+  }),
+
+  checkSourcesAvailability: (block, conf, dal, alsoCheckPendingTransactions) => co(function *() {
+    let txs = block.getTransactions();
+    const current = yield dal.getCurrentBlockOrNull();
+    for (const tx of txs) {
+      let unlocks = {};
+      let sumOfInputs = 0;
+      let maxOutputBase = current.unitbase;
+      for (const unlock of tx.unlocks) {
+        let sp = unlock.split(':');
+        let index = parseInt(sp[0]);
+        unlocks[index] = sp[1];
+      }
+      for (let k = 0, len2 = tx.inputs.length; k < len2; k++) {
+        let src = tx.inputs[k];
+        let dbSrc = yield dal.getSource(src.identifier, src.pos);
+        logger.debug('Source %s:%s:%s:%s = %s', src.amount, src.base, src.identifier, src.pos, dbSrc && dbSrc.consumed);
+        if (!dbSrc && alsoCheckPendingTransactions) {
+          // For chained transactions which are checked on sandbox submission, we accept them if there is already
+          // a previous transaction of the chain already recorded in the pool
+          dbSrc = yield co(function*() {
+            let hypotheticSrc = null;
+            let targetTX = yield dal.getTxByHash(src.identifier);
+            if (targetTX) {
+              let outputStr = targetTX.outputs[src.pos];
+              if (outputStr) {
+                hypotheticSrc = Transaction.outputStr2Obj(outputStr);
+                hypotheticSrc.consumed = false;
+                hypotheticSrc.time = 0;
+              }
+            }
+            return hypotheticSrc;
+          });
+        }
+        if (!dbSrc || dbSrc.consumed) {
+          logger.warn('Source ' + [src.type, src.identifier, src.pos].join(':') + ' is not available');
+          throw constants.ERRORS.SOURCE_ALREADY_CONSUMED;
+        }
+        sumOfInputs += dbSrc.amount * Math.pow(10, dbSrc.base);
+        if (block.medianTime - dbSrc.written_time < tx.locktime) {
+          throw constants.ERRORS.LOCKTIME_PREVENT;
+        }
+        let sigResults = local_rules.HELPERS.getSigResult(tx);
+        let unlocksForCondition = [];
+        let unlocksMetadata = {};
+        let unlockValues = unlocks[k];
+        if (dbSrc.conditions) {
+          if (unlockValues) {
+            // Evaluate unlock values
+            let sp = unlockValues.split(' ');
+            for (const func of sp) {
+              let param = func.match(/\((.+)\)/)[1];
+              if (func.match(/^SIG/)) {
+                let pubkey = tx.issuers[parseInt(param)];
+                if (!pubkey) {
+                  logger.warn('Source ' + [src.amount, src.base, src.type, src.identifier, src.pos].join(':') + ' unlock fail (unreferenced signatory)');
+                  throw constants.ERRORS.WRONG_UNLOCKER;
+                }
+                unlocksForCondition.push({
+                  pubkey: pubkey,
+                  sigOK: sigResults.sigs[pubkey] && sigResults.sigs[pubkey].matching || false
+                });
+              } else if (func.match(/^XHX/)) {
+                unlocksForCondition.push(param);
+              }
+            }
+          }
+
+          if (dbSrc.conditions.match(/CLTV/)) {
+            unlocksMetadata.currentTime = block.medianTime;
+          }
+
+          if (dbSrc.conditions.match(/CSV/)) {
+            unlocksMetadata.elapsedTime = block.medianTime - dbSrc.written_time;
+          }
+
+          try {
+            if (!unlock(dbSrc.conditions, unlocksForCondition, unlocksMetadata)) {
+              throw Error('Locked');
+            }
+          } catch (e) {
+            logger.warn('Source ' + [src.amount, src.base, src.type, src.identifier, src.pos].join(':') + ' unlock fail');
+            throw constants.ERRORS.WRONG_UNLOCKER;
+          }
+        }
+      }
+      let sumOfOutputs = tx.outputs.reduce(function(p, output) {
+        if (output.base > maxOutputBase) {
+          throw constants.ERRORS.WRONG_OUTPUT_BASE;
+        }
+        return p + output.amount * Math.pow(10, output.base);
+      }, 0);
+      if (sumOfInputs !== sumOfOutputs) {
+        logger.warn('Inputs/Outputs != 1 (%s/%s)', sumOfInputs, sumOfOutputs);
+        throw constants.ERRORS.WRONG_AMOUNTS;
+      }
+    }
+    return true;
+  })
+};
+
+rules.HELPERS = {
+
+  // Functions used in an external context too
+  checkMembershipBlock: (ms, current, conf, dal) => checkMSTarget(ms, current ? { number: current.number + 1} : { number: 0 }, conf, dal),
+
+  checkCertificationIsValid: (cert, current, findIdtyFunc, conf, dal) => checkCertificationIsValid(current ? current : { number: 0 }, cert, findIdtyFunc, conf, dal),
+
+  checkCertificationIsValidForBlock: (cert, block, idty, conf, dal) => checkCertificationIsValid(block, cert, () => idty, conf, dal),
+
+  isOver3Hops: (member, newLinks, newcomers, current, conf, dal) => co(function *() {
+    if (!current) {
+      return Promise.resolve(false);
+    }
+    try {
+      return indexer.DUP_HELPERS.checkPeopleAreNotOudistanced([member], newLinks, newcomers, conf, dal);
+    } catch (e) {
+      return true;
+    }
+  }),
+
+  checkExistsUserID: (uid, dal) => dal.getWrittenIdtyByUID(uid),
+
+  checkExistsPubkey: (pub, dal) => dal.getWrittenIdtyByPubkey(pub),
+
+  checkSingleTransaction: (tx, block, conf, dal, alsoCheckPendingTransactions) => rules.FUNCTIONS.checkSourcesAvailability({
+    getTransactions: () => [tx],
+    medianTime: block.medianTime
+  }, conf, dal, alsoCheckPendingTransactions),
+
+  checkTxBlockStamp: (tx, dal) => co(function *() {
+    const number = tx.blockstamp.split('-')[0];
+    const hash = tx.blockstamp.split('-')[1];
+    const basedBlock = yield dal.getBlockByNumberAndHashOrNull(number, hash);
+    if (!basedBlock) {
+      throw "Wrong blockstamp for transaction";
+    }
+    // Valuates the blockstampTime field
+    tx.blockstampTime = basedBlock.medianTime;
+    const current = yield dal.getCurrentBlockOrNull();
+    if (current && current.medianTime > basedBlock.medianTime + constants.TX_WINDOW) {
+      throw "Transaction has expired";
+    }
+  })
+};
+
+/*****************************
+ *
+ *      UTILITY FUNCTIONS
+ *
+ *****************************/
+
+function checkMSTarget (ms, block, conf, dal) {
+  return co(function *() {
+    if (block.number == 0 && ms.number != 0) {
+      throw Error('Number must be 0 for root block\'s memberships');
+    }
+    else if (block.number == 0 && ms.fpr != 'E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855') {
+      throw Error('Hash must be E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 for root block\'s memberships');
+    }
+    else if (block.number == 0) {
+      return null; // Valid for root block
+    } else {
+      let basedBlock;
+      try {
+        basedBlock = yield dal.getBlockByNumberAndHash(ms.number, ms.fpr);
+      } catch (e) {
+        throw Error('Membership based on an unexisting block');
+      }
+      let current = yield dal.getCurrentBlockOrNull();
+      if (current && current.medianTime > basedBlock.medianTime + conf.msValidity) {
+        throw Error('Membership has expired');
+      }
+      return basedBlock;
+    }
+  });
+}
+
+function checkCertificationIsValid (block, cert, findIdtyFunc, conf, dal) {
+  return co(function *() {
+    if (block.number == 0 && cert.block_number != 0) {
+      throw Error('Number must be 0 for root block\'s certifications');
+    } else {
+      let basedBlock = {
+        hash: constants.SPECIAL_HASH
+      };
+      if (block.number != 0) {
+        try {
+          basedBlock = yield dal.getBlock(cert.block_number);
+        } catch (e) {
+          throw Error('Certification based on an unexisting block');
+        }
+        try {
+          const issuer = yield dal.getWrittenIdtyByPubkey(cert.from)
+          if (!issuer || !issuer.member) {
+            throw Error('Issuer is not a member')
+          }
+        } catch (e) {
+          throw Error('Certifier must be a member')
+        }
+      }
+      let idty = yield findIdtyFunc(block, cert.to, dal);
+      let current = block.number == 0 ? null : yield dal.getCurrentBlockOrNull();
+      if (!idty) {
+        throw Error('Identity does not exist for certified');
+      }
+      else if (current && current.medianTime > basedBlock.medianTime + conf.sigValidity) {
+        throw Error('Certification has expired');
+      }
+      else if (cert.from == idty.pubkey)
+        throw Error('Rejected certification: certifying its own self-certification has no meaning');
+      else {
+        const buid = [cert.block_number, basedBlock.hash].join('-');
+        if (cert.block_hash && buid != [cert.block_number, cert.block_hash].join('-'))
+          throw Error('Certification based on an unexisting block buid. from ' + cert.from.substring(0,8) + ' to ' + idty.pubkey.substring(0,8));
+        idty.currency = conf.currency;
+        const raw = rawer.getOfficialCertification(_.extend(idty, {
+          idty_issuer: idty.pubkey,
+          idty_uid: idty.uid,
+          idty_buid: idty.buid,
+          idty_sig: idty.sig,
+          issuer: cert.from,
+          buid: buid,
+          sig: ''
+        }));
+        const verified = keyring.verify(raw, cert.sig, cert.from);
+        if (!verified) {
+          throw constants.ERRORS.WRONG_SIGNATURE_FOR_CERT
+        }
+        return true;
+      }
+    }
+  });
+}
+
+module.exports = {
+  setLogger: (newLogger) => logger = newLogger,
+  rules
+};
diff --git a/app/lib/rules/helpers.js b/app/lib/rules/helpers.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b61c2aabb2e2f1e2bec954a69bc82e94eb68f83
--- /dev/null
+++ b/app/lib/rules/helpers.js
@@ -0,0 +1,13 @@
+"use strict";
+
+const common    = require('duniter-common');
+const constants = common.constants
+
+module.exports = {
+  maxAcceleration
+}
+
+function maxAcceleration (conf) {
+  let maxGenTime = Math.ceil(conf.avgGenTime * constants.POW_DIFFICULTY_RANGE_RATIO);
+  return Math.ceil(maxGenTime * conf.medianTimeBlocks);
+}
\ No newline at end of file
diff --git a/app/lib/rules/index.js b/app/lib/rules/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e1c0333a73bf8852747e44fb208e6aa26ee6ab5
--- /dev/null
+++ b/app/lib/rules/index.js
@@ -0,0 +1,102 @@
+"use strict";
+
+const _           = require('underscore');
+const co          = require('co');
+const common      = require('duniter-common');
+
+const local_rules  = require('../rules/local_rules')
+const global_rules = require('../rules/global_rules').rules
+const Block        = common.document.Block
+
+let rules = {};
+
+rules.LOCAL = local_rules.FUNCTIONS;
+rules.GLOBAL = global_rules.FUNCTIONS;
+
+rules.HELPERS = {};
+
+_.extend(rules.HELPERS, local_rules.HELPERS);
+_.extend(rules.HELPERS, global_rules.HELPERS);
+
+rules.ALIAS = {
+
+  ALL_LOCAL: (block, conf) => co(function *() {
+    yield rules.LOCAL.checkParameters(block);
+    yield rules.LOCAL.checkProofOfWork(block);
+    yield rules.LOCAL.checkInnerHash(block);
+    yield rules.LOCAL.checkPreviousHash(block);
+    yield rules.LOCAL.checkPreviousIssuer(block);
+    yield rules.LOCAL.checkUnitBase(block);
+    yield rules.LOCAL.checkBlockSignature(block);
+    yield rules.LOCAL.checkBlockTimes(block, conf);
+    yield rules.LOCAL.checkIdentitiesSignature(block);
+    yield rules.LOCAL.checkIdentitiesUserIDConflict(block, conf);
+    yield rules.LOCAL.checkIdentitiesPubkeyConflict(block, conf);
+    yield rules.LOCAL.checkIdentitiesMatchJoin(block, conf);
+    yield rules.LOCAL.checkMembershipUnicity(block, conf);
+    yield rules.LOCAL.checkRevokedUnicity(block, conf);
+    yield rules.LOCAL.checkRevokedAreExcluded(block, conf);
+    yield rules.LOCAL.checkMembershipsSignature(block);
+    yield rules.LOCAL.checkPubkeyUnicity(block);
+    yield rules.LOCAL.checkCertificationOneByIssuer(block, conf);
+    yield rules.LOCAL.checkCertificationUnicity(block, conf);
+    yield rules.LOCAL.checkCertificationIsntForLeaverOrExcluded(block, conf);
+    yield rules.LOCAL.checkTxVersion(block);
+    yield rules.LOCAL.checkTxIssuers(block);
+    yield rules.LOCAL.checkTxSources(block);
+    yield rules.LOCAL.checkTxRecipients(block);
+    yield rules.LOCAL.checkTxAmounts(block);
+    yield rules.LOCAL.checkTxSignature(block);
+  }),
+
+  ALL_LOCAL_BUT_POW_AND_SIGNATURE: (block, conf) => co(function *() {
+    yield rules.LOCAL.checkParameters(block);
+    yield rules.LOCAL.checkInnerHash(block);
+    yield rules.LOCAL.checkPreviousHash(block);
+    yield rules.LOCAL.checkPreviousIssuer(block);
+    yield rules.LOCAL.checkUnitBase(block);
+    yield rules.LOCAL.checkBlockTimes(block, conf);
+    yield rules.LOCAL.checkIdentitiesSignature(block);
+    yield rules.LOCAL.checkIdentitiesUserIDConflict(block, conf);
+    yield rules.LOCAL.checkIdentitiesPubkeyConflict(block, conf);
+    yield rules.LOCAL.checkIdentitiesMatchJoin(block, conf);
+    yield rules.LOCAL.checkMembershipUnicity(block, conf);
+    yield rules.LOCAL.checkRevokedUnicity(block, conf);
+    yield rules.LOCAL.checkRevokedAreExcluded(block, conf);
+    yield rules.LOCAL.checkMembershipsSignature(block);
+    yield rules.LOCAL.checkPubkeyUnicity(block);
+    yield rules.LOCAL.checkCertificationOneByIssuer(block, conf);
+    yield rules.LOCAL.checkCertificationUnicity(block, conf);
+    yield rules.LOCAL.checkCertificationIsntForLeaverOrExcluded(block, conf);
+    yield rules.LOCAL.checkTxVersion(block);
+    yield rules.LOCAL.checkTxIssuers(block);
+    yield rules.LOCAL.checkTxSources(block);
+    yield rules.LOCAL.checkTxRecipients(block);
+    yield rules.LOCAL.checkTxAmounts(block);
+    yield rules.LOCAL.checkTxSignature(block);
+  })
+};
+
+rules.CHECK = {
+  ASYNC: {
+    ALL_LOCAL: checkLocal(rules.ALIAS.ALL_LOCAL),
+    ALL_LOCAL_BUT_POW: checkLocal(rules.ALIAS.ALL_LOCAL_BUT_POW_AND_SIGNATURE)
+  }
+};
+
+function checkLocal(contract) {
+  return (b, conf, done) => {
+    return co(function *() {
+      try {
+        const block = Block.fromJSON(b);
+        yield contract(block, conf);
+        done && done();
+      } catch (err) {
+        if (done) return done(err);
+        throw err;
+      }
+    });
+  };
+}
+
+module.exports = rules;
diff --git a/app/lib/rules/local_rules.js b/app/lib/rules/local_rules.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4a8f16a5d489aacb6ce3def8fb484027489f2d8
--- /dev/null
+++ b/app/lib/rules/local_rules.js
@@ -0,0 +1,515 @@
+"use strict";
+
+const co         = require('co');
+const _          = require('underscore');
+const common     = require('duniter-common');
+const indexer    = require('../indexer');
+
+const constants       = common.constants
+const hashf           = common.hashf
+const keyring         = common.keyring
+const rawer           = common.rawer
+const Block           = common.document.Block
+const Identity        = common.document.Identity
+const Membership      = common.document.Membership
+const Transaction     = common.document.Transaction
+const maxAcceleration = require('./helpers').maxAcceleration
+
+let rules = {};
+
+// TODO: make a global variable 'index' instead of recomputing the index each time
+
+rules.FUNCTIONS = {
+
+  checkParameters: (block) => co(function *() {
+    if (block.number == 0 && !block.parameters) {
+      throw Error('Parameters must be provided for root block');
+    }
+    else if (block.number > 0 && block.parameters) {
+      throw Error('Parameters must not be provided for non-root block');
+    }
+    return true;
+  }),
+
+  checkProofOfWork: (block) => co(function *() {
+    let remainder = block.powMin % 16;
+    let nb_zeros = (block.powMin - remainder) / 16;
+    const powRegexp = new RegExp('^0{' + nb_zeros + '}');
+    if (!block.hash.match(powRegexp)) {
+      throw Error('Not a proof-of-work');
+    }
+    return true;
+  }),
+
+  checkInnerHash: (block) => co(function *() {
+    let inner_hash = hashf(block.getRawInnerPart()).toUpperCase();
+    if (block.inner_hash != inner_hash) {
+      throw Error('Wrong inner hash');
+    }
+    return true;
+  }),
+
+  checkPreviousHash: (block) => co(function *() {
+    if (block.number == 0 && block.previousHash) {
+      throw Error('PreviousHash must not be provided for root block');
+    }
+    else if (block.number > 0 && !block.previousHash) {
+      throw Error('PreviousHash must be provided for non-root block');
+    }
+    return true;
+  }),
+
+  checkPreviousIssuer: (block) => co(function *() {
+    if (block.number == 0 && block.previousIssuer)
+      throw Error('PreviousIssuer must not be provided for root block');
+    else if (block.number > 0 && !block.previousIssuer)
+      throw Error('PreviousIssuer must be provided for non-root block');
+    return true;
+  }),
+
+  checkUnitBase: (block) => co(function *() {
+    if (block.number == 0 && block.unitbase != 0) {
+      throw Error('UnitBase must equal 0 for root block');
+    }
+    return true;
+  }),
+
+  checkBlockSignature: (block) => co(function *() {
+    if (!keyring.verify(block.getSignedPart(), block.signature, block.issuer))
+      throw Error('Block\'s signature must match');
+    return true;
+  }),
+
+  checkBlockTimes: (block, conf) => co(function *() {
+    const time = parseInt(block.time);
+    const medianTime = parseInt(block.medianTime);
+    if (block.number > 0 && (time < medianTime || time > medianTime + maxAcceleration(conf)))
+      throw Error('A block must have its Time between MedianTime and MedianTime + ' + maxAcceleration(conf));
+    else if (block.number == 0 && time != medianTime)
+      throw Error('Root block must have Time equal MedianTime');
+    return true;
+  }),
+
+  checkIdentitiesSignature: (block) => co(function *() {
+    let i = 0;
+    let wrongSig = false;
+    while (!wrongSig && i < block.identities.length) {
+      const idty = Identity.fromInline(block.identities[i]);
+      idty.currency = block.currency;
+      wrongSig = !keyring.verify(idty.rawWithoutSig(), idty.sig, idty.pubkey);
+      if (wrongSig) {
+        throw Error('Identity\'s signature must match');
+      }
+      i++;
+    }
+    return true;
+  }),
+
+  checkIdentitiesUserIDConflict: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const creates = indexer.iindexCreate(index);
+    const uids = _.chain(creates).pluck('uid').uniq().value();
+    if (creates.length !== uids.length) {
+      throw Error('Block must not contain twice same identity uid');
+    }
+    return true;
+  }),
+
+  checkIdentitiesPubkeyConflict: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const creates = indexer.iindexCreate(index);
+    const pubkeys = _.chain(creates).pluck('pub').uniq().value();
+    if (creates.length !== pubkeys.length) {
+      throw Error('Block must not contain twice same identity pubkey');
+    }
+    return true;
+  }),
+
+  checkIdentitiesMatchJoin: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const icreates = indexer.iindexCreate(index);
+    const mcreates = indexer.mindexCreate(index);
+    for (const icreate of icreates) {
+      const matching = _(mcreates).filter({ pub: icreate.pub });
+      if (matching.length == 0) {
+        throw Error('Each identity must match a newcomer line with same userid and certts');
+      }
+    }
+    return true;
+  }),
+
+  checkRevokedAreExcluded: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const iindex = indexer.iindex(index);
+    const mindex = indexer.mindex(index);
+    const revocations = _.chain(mindex)
+      .filter((row) => row.op == constants.IDX_UPDATE && row.revoked_on !== null)
+      .pluck('pub')
+      .value();
+    for (const pub of revocations) {
+      const exclusions = _(iindex).where({ op: constants.IDX_UPDATE, member: false, pub });
+      if (exclusions.length == 0) {
+        throw Error('A revoked member must be excluded');
+      }
+    }
+    return true;
+  }),
+
+  checkRevokedUnicity: (block, conf) => co(function *() {
+    try {
+      yield rules.FUNCTIONS.checkMembershipUnicity(block, conf);
+    } catch (e) {
+      throw Error('A single revocation per member is allowed');
+    }
+    return true;
+  }),
+
+  checkMembershipUnicity: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const mindex = indexer.mindex(index);
+    const pubkeys = _.chain(mindex).pluck('pub').uniq().value();
+    if (pubkeys.length !== mindex.length) {
+      throw Error('Unicity constraint PUBLIC_KEY on MINDEX is not respected');
+    }
+    return true;
+  }),
+
+  checkMembershipsSignature: (block) => co(function *() {
+    let i = 0;
+    let wrongSig = false, ms;
+    // Joiners
+    while (!wrongSig && i < block.joiners.length) {
+      ms = Membership.fromInline(block.joiners[i], 'IN', block.currency);
+      wrongSig = !checkSingleMembershipSignature(ms);
+      i++;
+    }
+    // Actives
+    i = 0;
+    while (!wrongSig && i < block.actives.length) {
+      ms = Membership.fromInline(block.actives[i], 'IN', block.currency);
+      wrongSig = !checkSingleMembershipSignature(ms);
+      i++;
+    }
+    // Leavers
+    i = 0;
+    while (!wrongSig && i < block.leavers.length) {
+      ms = Membership.fromInline(block.leavers[i], 'OUT', block.currency);
+      wrongSig = !checkSingleMembershipSignature(ms);
+      i++;
+    }
+    if (wrongSig) {
+      throw Error('Membership\'s signature must match');
+    }
+    return true;
+  }),
+
+  checkPubkeyUnicity: (block) => co(function *() {
+    const pubkeys = [];
+    let conflict = false;
+    let pubk;
+    // Joiners
+    let i = 0;
+    while (!conflict && i < block.joiners.length) {
+      pubk = block.joiners[i].split(':')[0];
+      conflict = ~pubkeys.indexOf(pubk);
+      pubkeys.push(pubk);
+      i++;
+    }
+    // Actives
+    i = 0;
+    while (!conflict && i < block.actives.length) {
+      pubk = block.actives[i].split(':')[0];
+      conflict = ~pubkeys.indexOf(pubk);
+      pubkeys.push(pubk);
+      i++;
+    }
+    // Leavers
+    i = 0;
+    while (!conflict && i < block.leavers.length) {
+      pubk = block.leavers[i].split(':')[0];
+      conflict = ~pubkeys.indexOf(pubk);
+      pubkeys.push(pubk);
+      i++;
+    }
+    // Excluded
+    i = 0;
+    while (!conflict && i < block.excluded.length) {
+      pubk = block.excluded[i].split(':')[0];
+      conflict = ~pubkeys.indexOf(pubk);
+      pubkeys.push(pubk);
+      i++;
+    }
+    if (conflict) {
+      throw Error('Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded');
+    }
+    return true;
+  }),
+
+  checkCertificationOneByIssuer: (block, conf) => co(function *() {
+    if (block.number > 0) {
+      const index = indexer.localIndex(block, conf);
+      const cindex = indexer.cindex(index);
+      const certFromA = _.uniq(cindex.map((row) => row.issuer));
+      if (certFromA.length !== cindex.length) {
+        throw Error('Block cannot contain two certifications from same issuer');
+      }
+    }
+    return true;
+  }),
+
+  checkCertificationUnicity: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const cindex = indexer.cindex(index);
+    const certAtoB = _.uniq(cindex.map((row) => row.issuer + row.receiver));
+    if (certAtoB.length !== cindex.length) {
+      throw Error('Block cannot contain identical certifications (A -> B)');
+    }
+    return true;
+  }),
+
+  checkCertificationIsntForLeaverOrExcluded: (block, conf) => co(function *() {
+    const index = indexer.localIndex(block, conf);
+    const cindex = indexer.cindex(index);
+    const iindex = indexer.iindex(index);
+    const mindex = indexer.mindex(index);
+    const certified = cindex.map((row) => row.receiver);
+    for (const pub of certified) {
+      const exclusions = _(iindex).where({ op: constants.IDX_UPDATE, member: false, pub: pub });
+      const leavers    = _(mindex).where({ op: constants.IDX_UPDATE, leaving: true, pub: pub });
+      if (exclusions.length > 0 || leavers.length > 0) {
+        throw Error('Block cannot contain certifications concerning leavers or excluded members');
+      }
+    }
+    return true;
+  }),
+
+  checkTxVersion: (block) => co(function *() {
+    const txs = Block.getTransactions(block);
+    // Check rule against each transaction
+    for (const tx of txs) {
+      if (tx.version != 10) {
+        throw Error('A transaction must have the version 10');
+      }
+    }
+    return true;
+  }),
+
+  checkTxLen: (block) => co(function *() {
+    const txs = Block.getTransactions(block);
+    // Check rule against each transaction
+    for (const tx of txs) {
+      const txLen = Transaction.getLen(tx);
+      if (txLen > constants.MAXIMUM_LEN_OF_COMPACT_TX) {
+        throw constants.ERRORS.A_TRANSACTION_HAS_A_MAX_SIZE;
+      }
+    }
+    // Check rule against each output of each transaction
+    for (const tx of txs) {
+      for (const output of tx.outputs) {
+        const out = typeof output === 'string' ? output : Transaction.outputObj2Str(output)
+        if (out.length > constants.MAXIMUM_LEN_OF_OUTPUT) {
+          throw constants.ERRORS.MAXIMUM_LEN_OF_OUTPUT
+        }
+      }
+    }
+    // Check rule against each unlock of each transaction
+    for (const tx of txs) {
+      for (const unlock of tx.unlocks) {
+        if (unlock.length > constants.MAXIMUM_LEN_OF_UNLOCK) {
+          throw constants.ERRORS.MAXIMUM_LEN_OF_UNLOCK
+        }
+      }
+    }
+    return true;
+  }),
+
+  checkTxIssuers: (block) => co(function *() {
+    const txs = Block.getTransactions(block);
+    // Check rule against each transaction
+    for (const tx of txs) {
+      if (tx.issuers.length == 0) {
+        throw Error('A transaction must have at least 1 issuer');
+      }
+    }
+    return true;
+  }),
+
+  checkTxSources: (block) => co(function *() {
+    const txs = Block.getTransactions(block);
+    for (const tx of txs) {
+      if (!tx.inputs || tx.inputs.length == 0) {
+        throw Error('A transaction must have at least 1 source');
+      }
+    }
+    const sindex = indexer.localSIndex(block);
+    const inputs = _.filter(sindex, (row) => row.op == constants.IDX_UPDATE).map((row) => [row.op, row.identifier, row.pos].join('-'));
+    if (inputs.length !== _.uniq(inputs).length) {
+      throw Error('It cannot exist 2 identical sources for transactions inside a given block');
+    }
+    const outputs = _.filter(sindex, (row) => row.op == constants.IDX_CREATE).map((row) => [row.op, row.identifier, row.pos].join('-'));
+    if (outputs.length !== _.uniq(outputs).length) {
+      throw Error('It cannot exist 2 identical sources for transactions inside a given block');
+    }
+    return true;
+  }),
+
+  checkTxAmounts: (block) => co(function *() {
+    for (const tx of Block.getTransactions(block)) {
+      rules.HELPERS.checkTxAmountsValidity(tx);
+    }
+  }),
+
+  checkTxRecipients: (block) => co(function *() {
+    const txs = Block.getTransactions(block);
+    // Check rule against each transaction
+    for (const tx of txs) {
+      if (!tx.outputs || tx.outputs.length == 0) {
+        throw Error('A transaction must have at least 1 recipient');
+      }
+      else {
+        // Cannot have empty output condition
+        for (const output of tx.outputs) {
+          if (!output.conditions.match(/(SIG|XHX)/)) {
+            throw Error('Empty conditions are forbidden');
+          }
+        }
+      }
+    }
+    return true;
+  }),
+
+  checkTxSignature: (block) => co(function *() {
+    const txs = Block.getTransactions(block);
+    // Check rule against each transaction
+    for (const tx of txs) {
+      let sigResult = getSigResult(tx);
+      if (!sigResult.matching) {
+        throw Error('Signature from a transaction must match');
+      }
+    }
+    return true;
+  })
+};
+
+function checkSingleMembershipSignature(ms) {
+  return keyring.verify(ms.getRaw(), ms.signature, ms.issuer);
+}
+
+function getSigResult(tx) {
+  let sigResult = { sigs: {}, matching: true };
+  let json = { "version": tx.version, "currency": tx.currency, "blockstamp": tx.blockstamp, "locktime": tx.locktime, "inputs": [], "outputs": [], "issuers": tx.issuers, "signatures": [], "comment": tx.comment };
+  tx.inputs.forEach(function (input) {
+    json.inputs.push(input.raw);
+  });
+  tx.outputs.forEach(function (output) {
+    json.outputs.push(output.raw);
+  });
+  json.unlocks = tx.unlocks;
+  let i = 0;
+  let signaturesMatching = true;
+  const raw = rawer.getTransaction(json);
+  while (signaturesMatching && i < tx.signatures.length) {
+    const sig = tx.signatures[i];
+    const pub = tx.issuers[i];
+    signaturesMatching = keyring.verify(raw, sig, pub);
+    sigResult.sigs[pub] = {
+      matching: signaturesMatching,
+      index: i
+    };
+    i++;
+  }
+  sigResult.matching = signaturesMatching;
+  return sigResult;
+}
+
+function checkBunchOfTransactions(transactions, done){
+  const block = { transactions };
+  return co(function *() {
+    try {
+      let local_rule = rules.FUNCTIONS;
+      yield local_rule.checkTxLen(block);
+      yield local_rule.checkTxIssuers(block);
+      yield local_rule.checkTxSources(block);
+      yield local_rule.checkTxRecipients(block);
+      yield local_rule.checkTxAmounts(block);
+      yield local_rule.checkTxSignature(block);
+      done && done();
+    } catch (err) {
+      if (done) return done(err);
+      throw err;
+    }
+  });
+}
+
+rules.HELPERS = {
+
+  maxAcceleration: (conf) => maxAcceleration(conf),
+
+  checkSingleMembershipSignature: checkSingleMembershipSignature,
+
+  getSigResult: getSigResult,
+
+  checkBunchOfTransactions: checkBunchOfTransactions,
+
+  checkSingleTransactionLocally: (tx, done) => checkBunchOfTransactions([tx], done),
+
+  checkTxAmountsValidity: (tx) => {
+    // Rule of money conservation
+    const commonBase = tx.inputs.concat(tx.outputs).reduce((min, input) => {
+      if (min === null) return input.base;
+      return Math.min(min, parseInt(input.base));
+    }, null);
+    const inputSumCommonBase = tx.inputs.reduce((sum, input) => {
+      return sum + input.amount * Math.pow(10, input.base - commonBase);
+    }, 0);
+    const outputSumCommonBase = tx.outputs.reduce((sum, output) => {
+      return sum + output.amount * Math.pow(10, output.base - commonBase);
+    }, 0);
+    if (inputSumCommonBase !== outputSumCommonBase) {
+      throw constants.ERRORS.TX_INPUTS_OUTPUTS_NOT_EQUAL;
+    }
+    // Rule of unit base transformation
+    const maxOutputBase = tx.outputs.reduce((max, output) => {
+      return Math.max(max, parseInt(output.base));
+    }, 0);
+    // Compute deltas
+    const deltas = {};
+    for (let i = commonBase; i <= maxOutputBase; i++) {
+      const inputBaseSum = tx.inputs.reduce((sum, input) => {
+        if (input.base == i) {
+          return sum + input.amount * Math.pow(10, input.base - commonBase);
+        } else {
+          return sum;
+        }
+      }, 0);
+      const outputBaseSum = tx.outputs.reduce((sum, output) => {
+        if (output.base == i) {
+          return sum + output.amount * Math.pow(10, output.base - commonBase);
+        } else {
+          return sum;
+        }
+      }, 0);
+      const delta = outputBaseSum - inputBaseSum;
+      let sumUpToBase = 0;
+      for (let j = commonBase; j < i; j++) {
+        sumUpToBase -= deltas[j];
+      }
+      if (delta > 0 && delta > sumUpToBase) {
+        throw constants.ERRORS.TX_OUTPUT_SUM_NOT_EQUALS_PREV_DELTAS;
+      }
+      deltas[i] = delta;
+    }
+  },
+
+  getMaxPossibleVersionNumber: (current) => co(function*() {
+    // Looking at current blockchain, find what is the next maximum version we can produce
+
+    // 1. We follow previous block's version
+    let version = current ? current.version : constants.BLOCK_GENERATED_VERSION;
+
+    // 2. If we can, we go to the next version
+    return version;
+  })
+};
+
+module.exports = rules;
diff --git a/app/modules/prover/lib/blockGenerator.js b/app/modules/prover/lib/blockGenerator.js
index 4549c2249115379acc54238904a43586c3a80979..e0bf142f96f01f3574bbbd1016144594fe679b7c 100644
--- a/app/modules/prover/lib/blockGenerator.js
+++ b/app/modules/prover/lib/blockGenerator.js
@@ -4,6 +4,8 @@ const co              = require('co');
 const moment          = require('moment');
 const inquirer        = require('inquirer');
 const common          = require('duniter-common');
+const indexer         = require('../../../lib/indexer')
+const rules           = require('../../../lib/rules')
 
 const keyring       = common.keyring;
 const hashf         = common.hashf;
@@ -14,8 +16,6 @@ const Transaction   = common.document.Transaction;
 const Identity      = common.document.Identity;
 const Certification = common.document.Certification;
 const constants     = common.constants
-const indexer       = common.indexer
-const rules         = common.rules
 
 module.exports = (server, prover) => {
   return new BlockGenerator(server, prover);
diff --git a/app/modules/prover/lib/proof.js b/app/modules/prover/lib/proof.js
index 64d68645dcb8eac0518566f33c63c683e4c3e33c..146d3177e9a85fd04828f25ba45daa4c10579157 100644
--- a/app/modules/prover/lib/proof.js
+++ b/app/modules/prover/lib/proof.js
@@ -268,7 +268,7 @@ function getBlockTime (block, conf, forcedTime) {
     return forcedTime;
   }
   const now = moment.utc().unix();
-  const maxAcceleration = require('duniter-common').rules.HELPERS.maxAcceleration(conf);
+  const maxAcceleration = require('../../../lib/rules').HELPERS.maxAcceleration(conf);
   const timeoffset = block.number >= conf.medianTimeBlocks ? 0 : conf.rootoffset || 0;
   const medianTime = block.medianTime;
   const upperBound = block.number === 0 ? medianTime : Math.min(medianTime + maxAcceleration, now - timeoffset);
diff --git a/app/service/BlockchainService.js b/app/service/BlockchainService.js
index d91a84b430eda5c6735e5f5733ca8f05c1238e2e..6e418b5bf380d85cc682e39e58b2474c8abec693 100644
--- a/app/service/BlockchainService.js
+++ b/app/service/BlockchainService.js
@@ -4,7 +4,7 @@ const _               = require('underscore');
 const co              = require('co');
 const Q               = require('q');
 const parsers         = require('duniter-common').parsers;
-const rules           = require('duniter-common').rules
+const rules           = require('../lib/rules')
 const constants       = require('../lib/constants');
 const blockchainCtx   = require('../lib/computation/blockchainContext');
 const Block           = require('../lib/entity/block');
diff --git a/app/service/IdentityService.js b/app/service/IdentityService.js
index d5e0aa6fb970c17fc41dc95a298c40e2b755ccf8..dcb7ffe08857e86ac63698f8216ac6bb30298452 100644
--- a/app/service/IdentityService.js
+++ b/app/service/IdentityService.js
@@ -1,6 +1,6 @@
 "use strict";
 const Q               = require('q');
-const rules           = require('duniter-common').rules
+const rules           = require('../lib/rules')
 const keyring          = require('duniter-common').keyring;
 const constants       = require('../lib/constants');
 const Block           = require('../../app/lib/entity/block');
diff --git a/app/service/MembershipService.js b/app/service/MembershipService.js
index ec115bf1affcd4f62adada0c37d937c9a8ccc7dd..ffce63db7f12737741372bd7176612483f76871f 100644
--- a/app/service/MembershipService.js
+++ b/app/service/MembershipService.js
@@ -1,7 +1,7 @@
 "use strict";
 
 const co              = require('co');
-const rules           = require('duniter-common').rules
+const rules           = require('../lib/rules')
 const hashf           = require('duniter-common').hashf;
 const constants       = require('../lib/constants');
 const Membership      = require('../lib/entity/membership');
diff --git a/app/service/TransactionsService.js b/app/service/TransactionsService.js
index d362c003f7284a1e90aa87ffbb8cf40297a90b9f..cd8db28f1a1616d865580d562ff67008d4772de3 100644
--- a/app/service/TransactionsService.js
+++ b/app/service/TransactionsService.js
@@ -3,7 +3,7 @@
 const co              = require('co');
 const Q               = require('q');
 const constants       = require('../lib/constants');
-const rules           = require('duniter-common').rules
+const rules           = require('../lib/rules')
 const Transaction     = require('../lib/entity/transaction');
 const AbstractService = require('./AbstractService');
 
diff --git a/package.json b/package.json
index 63387d7bb5026c81e8a91578e2fe3e3c1dd53434..afe21705c3284093e47cc00dfe9ba13ae4182310 100644
--- a/package.json
+++ b/package.json
@@ -51,7 +51,7 @@
     "colors": "1.1.2",
     "commander": "2.9.0",
     "daemonize2": "0.4.2",
-    "duniter-common": "^1.3.5",
+    "duniter-common": "1.4.x",
     "event-stream": "3.3.4",
     "heapdump": "^0.3.9",
     "inquirer": "3.0.6",
diff --git a/test/dal/source_dal.js b/test/dal/source_dal.js
index 7458cbfc0a4142aeff095311dadf9aeab2251778..f924031c101285444343054ce476af777c8d8e51 100644
--- a/test/dal/source_dal.js
+++ b/test/dal/source_dal.js
@@ -3,7 +3,7 @@ const co = require('co');
 const should = require('should');
 const FileDAL = require('../../app/lib/dal/fileDAL');
 const dir = require('../../app/lib/system/directory');
-const indexer = require('duniter-common').indexer;
+const indexer    = require('../../app/lib/indexer');
 const toolbox = require('../integration/tools/toolbox');
 
 let dal;
diff --git a/test/dal/triming.js b/test/dal/triming.js
index f6091a019fca1c31c9950cc61f73e2248b97b437..92a7f2ed7af841cd14a4e849a4c3e15759e00343 100644
--- a/test/dal/triming.js
+++ b/test/dal/triming.js
@@ -3,7 +3,7 @@ const co = require('co');
 const should = require('should');
 const FileDAL = require('../../app/lib/dal/fileDAL');
 const dir = require('../../app/lib/system/directory');
-const indexer = require('duniter-common').indexer;
+const indexer    = require('../../app/lib/indexer');
 const toolbox = require('../integration/tools/toolbox');
 
 let dal;
diff --git a/test/data/blocks.js b/test/data/blocks.js
new file mode 100644
index 0000000000000000000000000000000000000000..9500a38f7f5a1590a00cde7a914e941313ea54fc
--- /dev/null
+++ b/test/data/blocks.js
@@ -0,0 +1,4100 @@
+
+module.exports = {
+  WRONG_SIGNATURE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 50\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411775999\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  VALID_ROOT:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: duniter_unit_test_currency\n" +
+    "Number: 0\n" +
+    "PoWMin: 0\n" +
+    "Time: 1483614905\n" +
+    "MedianTime: 1483614905\n" +
+    "UnitBase: 0\n" +
+    "Issuer: DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV\n" +
+    "IssuersFrame: 1\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 0\n" +
+    "Parameters: 0.007376575:3600:120:0:40:604800:31536000:1:604800:604800:0.9:31536000:3:20:960:10:0.6666666666666666:1483614905:1483614905:100\n" +
+    "MembersCount: 2\n" +
+    "Identities:\n" +
+    "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:1eubHHbuNfilHMM0G2bI30iZzebQ2cQ1PC7uPAw08FGMMmQCRerlF/3pc4sAcsnexsxBseA/3lY03KlONqJBAg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tic\n" +
+    "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:lcekuS0eP2dpFL99imJcwvDAwx49diiDMkG8Lj7FLkC/6IJ0tgNjUzCIZgMGi7bL5tODRiWi9B49UMXb8b3MAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:s2hUbokkibTAWGEwErw6hyXSWlWFQ2UWs2PWx8d/kkElAyuuWaQq4Tsonuweh1xn4AC1TVWt4yMR3WrDdkhnAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tic\n" +
+    "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:80pUx9YBk0RwqrVrQQA+PuxoNn21A8NwQ3824CQPU1ad9R1oDXc/pU6NVpQv92LM8gaWs/Pm1mLXNNVnr+m6BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:0:vMaYgBSnU+83AYOVQCZAx1XLpg/F1MmMztDfCnZvl8hPs4LE9tcDvCrrFogAwMEW2N7Y0gCH62/fBMgw4KrGCA==\n" +
+    "DNann1Lh55eZMEDXeYt59bzHbA3NJR46DeQYCS2qQdLV:DKpQPUL4ckzXYdnDRvCRKAm1gNvSdmAXnTrJZ7LvM5Qo:0:RKIGMgYIhB9FmjPbmyo4egPufg/iTpBznYGZp5hjK1WZ1a9imQldLNUMe0eiPlSKJTK/JD3gOlCiynOEY2csBA==\n" +
+    "Transactions:\n" +
+    "InnerHash: 7A4E76A9A3410594AC9AED94B14AD9892426D76EDAF735CFE6C66432E422A63F\n" +
+    "Nonce: 300000000001\n" +
+    "WJourHkd6NnMxKDSEfrsiB7qE0mGbiFHSwy0cE8/q/is6hTd0mzlMNBPxDhoPkAiocfXJrQuIVeG0/ygxQrTBw==\n",
+
+  WRONG_PROOF_OF_WORK:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 1\n" +
+    "PoWMin: 17\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 97E7DBF5D3AC27A4AFB797365304B7922917B6ADCDEFD736F20E38ADE982A47D\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  ROOT_WITHOUT_PARAMETERS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 0\n" +
+    "Time: 1411775999\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 1\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  NON_ROOT_WITH_PARAMETERS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 5\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "Parameters: 0.7376575:100:157680000:0:40:7200:31536000:1:1000:1000:0.9:31536000:3:1:60:10:0.67:1511776000:1511776000:1511776000\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  ROOT_WITH_PREVIOUS_HASH: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855\n" +
+    "MembersCount: 0\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  ROOT_WITH_PREVIOUS_ISSUER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  NON_ROOT_WITHOUT_PREVIOUS_HASH: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 1\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  NON_ROOT_WITHOUT_PREVIOUS_ISSUER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 1\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 97E7DBF5D3AC27A4AFB797365304B7922917B6ADCDEFD736F20E38ADE982A47D\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  COLLIDING_UIDS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:NJE8nYU4Im+KQDRdoAn5gcfic+Gjjzp0Pp0iji/Fzh9JIThoQeUDDew4Q5vJBEg/Aw7gPnIg+11TbLkIGa/ODQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  COLLIDING_PUBKEYS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:NJE8nYU4Im+KQDRdoAn5gcfic+Gjjzp0Pp0iji/Fzh9JIThoQeUDDew4Q5vJBEg/Aw7gPnIg+11TbLkIGa/ODQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_DATE_LOWER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 50\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411775999\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_DATE_HIGHER_BUT_TOO_FEW: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 10\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776059\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_DATE_HIGHER_BUT_TOO_HIGH: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 10\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411785481\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_ROOT_TIMES: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776001\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  GOOD_DATE_HIGHER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 20\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776060\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_IDTY_MATCH_JOINS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  MULTIPLE_JOINERS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 1\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  MULTIPLE_ACTIVES: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 1\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  MULTIPLE_LEAVES: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  MULTIPLE_EXCLUDED: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  MULTIPLE_OVER_ALL: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  MULTIPLE_CERTIFICATIONS_FROM_SAME_ISSUER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 2\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  IDENTICAL_CERTIFICATIONS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  LEAVER_WITH_CERTIFICATIONS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:I9kYCknNTp9zYS4CflAMk4Xh1yQIaP1H3PgPHJeQZQNkBavyqddXsq5DUzscsi2kRttJw6C/MATSD8KyZYPNAg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  EXCLUDED_WITH_CERTIFICATIONS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONGLY_SIGNED_IDENTITIES: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:Die9lYNW1u/w50AfuaXwb4MJc3aKA3WfJwiy531TqHIGC+VNnRKjMmrwMptN+a+dL6INjLrhMrPqoK60IkTlDQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONGLY_SIGNED_JOIN: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV3Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONGLY_SIGNED_ACTIVE: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV3Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONGLY_SIGNED_LEAVE: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:I9kYCknNTp9zYS4CflAMk4Xh1yQIaP1H3PgPHJeQZQNkBavyqddXsq5DUzscsi2kRttJw6C/MATSD8KyZYPNAg==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  CORRECTLY_SIGNED_LEAVE: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:I9kYCknNTp9zYS4CflAMk4Xh1yQIaP1H3PgPHJeQZQNkBavyqddXsq5DUzscsi2kRttJw6C/MATSD8KyZYPNAg==:1411850496\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONGLY_SIGNED_CERTIFICATION: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 29890\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  UNKNOWN_CERTIFIER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  UNKNOWN_CERTIFIED: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:1411844654:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  EXISTING_UID: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:Die9lYNW1u/w50AfuaXwb4MJc3aKA3WfJwiy+31TqHIGC+VNnRKjMmrwMptN+a+dL6INjLrhMrPqoK60IkTlDQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:EXISTING\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  EXISTING_PUBKEY: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH:Die9lYNW1u/w50AfuaXwb4MJc3aKA3WfJwiy+31TqHIGC+VNnRKjMmrwMptN+a+dL6INjLrhMrPqoK60IkTlDQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TOO_EARLY_CERTIFICATION_REPLAY: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:Die9lYNW1u/w50AfuaXwb4MJc3aKA3WfJwiy+31TqHIGC+VNnRKjMmrwMptN+a+dL6INjLrhMrPqoK60IkTlDQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:1411844654:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:1411844658:2KmmmIL8eK/TACjOqTqO5ZG/tgMYWWV8zRICWFQJuqWyYVg/y5wzXyHrgfpdMYhwYMRBhwbMk1sPNLo/kzp0AA==\n" +
+    "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:DU4JlHxJtIb2Z7Ag4Jy+z0qjNNo5jzN5EvTUWOTRRzeb6LbOClw2X+pmb0mV/wpVKd/lJrUHAWeKMDHG4MukCA==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:kr2JA6wCGfbNKGpyM86BscsFk22aA9oiAon8mWRPl4G8UpJKZs3tjuPRAw5+04KLCRWl/TT1TumDCkeEjev7DA==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  EXPIRED_CERTIFICATIONS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 90\n" +
+    "PoWMin: 1\n" +
+    "Time: 1443333600\n" +
+    "MedianTime: 1443333600\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "Joiners:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:70:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  EXPIRED_MEMBERSHIP: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 90\n" +
+    "PoWMin: 1\n" +
+    "Time: 1443333600\n" +
+    "MedianTime: 1443333600\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "Joiners:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:70-5918CE7F40186F8E0BD8F239986A723FCC329927B999885B32DAAE40EA8BEDB6:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REVOKED_JOINER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 113\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  NOT_ENOUGH_CERTIFICATIONS_JOINER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 3\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  NOT_ENOUGH_CERTIFICATIONS_JOINER_BLOCK_0: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  OUTDISTANCED_JOINER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 3\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-0C1C080CA81F6D763C6C42B7D043DF40DDABC2E27D47E0FE27DEF0E65D795280:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  VALID_NEXT: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 3\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 5\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_PREVIOUS_HASH:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 97E7DBF5D3AC27A4AFB797365304B7922917B6ADCDEFD736F20E38ADE982A47D\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_PREVIOUS_ISSUER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_DIFFERENT_ISSUERS_COUNT_FOLLOWING_V2:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_DIFFERENT_ISSUERS_COUNT_FOLLOWING_V3:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_ISSUERS_FRAME_FOLLOWING_V2:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_ISSUERS_FRAME_FOLLOWING_V3:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 2\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_ISSUER:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_JOIN_BLOCK_TARGET_ROOT: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:44-9F118AC87B062F23F193761E081082BB661547CF9A0C243CD3994E99C78A74C3:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_JOIN_ROOT_NUMBER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:44-9F118AC87B062F23F193761E081082BB661547CF9A0C243CD3994E99C78A74C3:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_JOIN_ROOT_HASH: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-9F118AC87B062F23F193761E081082BB661547CF9A0C243CD3994E99C78A74C3:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_JOIN_NUMBER_TOO_LOW: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 12\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:2-65DDE908DC06D42EC8AAAE4AB716C299ECD4891740349BCF50EF3D70C947CBE0:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_JOIN_BLOCK_TARGET: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:44-9F118AC87B062F23F193761E081082BB661547CF9A0C243CD3994E99C78A74C3:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_JOIN_ALREADY_MEMBER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:3-65DDE908DC06D42EC8AAAE4AB716C299ECD4891740349BCF50EF3D70C947CBE0:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_ACTIVE_BLOCK_TARGET: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 51\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8\n" +
+    "PreviousIssuer: G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:44-9F118AC87B062F23F193761E081082BB661547CF9A0C243CD3994E99C78A74C3:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  KICKED_NOT_EXCLUDED: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 4\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 1\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  KICKED_EXCLUDED: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 4\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 1\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_MEMBERS_COUNT: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 4\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  NO_LEADING_ZERO: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 3\n" +
+    "PoWMin: 8\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 10\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REQUIRES_4_LEADING_ZEROS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 60\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REQUIRES_7_LEADING_ZEROS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 61\n" +
+    "PoWMin: 6\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 11\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REQUIRES_6_LEADING_ZEROS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 67\n" +
+    "PoWMin: 8\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 4\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REQUIRES_5_LEADING_ZEROS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 63\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REQUIRES_7_LEADING_ZEROS_AGAIN: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 64\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  FIRST_BLOCK_OF_NEWCOMER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 65\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 2\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  SECOND_BLOCK_OF_NEWCOMER: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 66\n" +
+    "PoWMin: 160\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: AbCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 10\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_ROOT_DATES: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776002\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_MEDIAN_TIME_ODD: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 101\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_MEDIAN_TIME_EVEN: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 102\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  GOOD_MEDIAN_TIME_ODD: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 103\n" +
+    "PoWMin: 1\n" +
+    "Time: 161\n" +
+    "MedianTime: 161\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  GOOD_MEDIAN_TIME_EVEN: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 104\n" +
+    "PoWMin: 1\n" +
+    "Time: 162\n" +
+    "MedianTime: 162\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  WRONG_CONFIRMED_DATE_MUST_CONFIRM: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 72\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  ROOT_BLOCK_WITH_UD: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:s9DSBEAIbLi1HjBvXaHySApHo0HBkE9Ibxm10k/zUvmP49+FLg1IbXGj0JK6Y5SsywTcPWyQXseqXGSeGiIjAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:Te6R+OlWveuHKkegVDpg2hyse2ojBRfCAdCjMwtqMZx662qdgbMD9+xdZTXIjLRMtdsQ973EEZtwMc3hJkcdBw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+    "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  UD_BLOCK_WIHTOUT_UD: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 80\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  UD_BLOCK_WIHTOUT_BASE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 80\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  V3_ROOT_BLOCK_NOBASE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  V3_ROOT_BLOCK_POSITIVE_BASE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 1\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_UD:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 81\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_UD_V3: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 81\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UniversalDividend: 100\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_UNIT_BASE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 160\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411778000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 1\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_UNIT_BASE_NO_UD:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 160\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 8\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_UNLEGITIMATE_UD:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 82\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_UNLEGITIMATE_UD_2: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  FIRST_UD_BLOCK_WITH_UD_THAT_SHOULDNT: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 20\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411773099\n" +
+    "MedianTime: 1411773099\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  FIRST_UD_BLOCK_WITH_UD_THAT_SHOULD: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 20\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411773100\n" +
+    "MedianTime: 1411773100\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITHOUT_TRANSACTIONS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_GOOD_TRANSACTIONS: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:3:6:6:3:0:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "CYYjHsNyg3HMRMpTHqCJAN9McjH5BwFLmDKGV3PmCuKp\n" +
+    "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB\n" +
+    "T:6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3:4\n" +
+    "T:3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435:10\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:46\n" +
+    "T:A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956:66\n" +
+    "T:67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B:176\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:46\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "3:SIG(0)\n" +
+    "4:SIG(0)\n" +
+    "5:SIG(0)\n" +
+    "30:4:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "156:4:SIG(DSz4rgncXCytsUMW2JU2yhLquZECD2XpEkpP9gG5HyAx)\n" +
+    "49:4:SIG(6DyGr5LFtFmbaJYRvcs9WmBsr4cbJbJ1EV9zBbqG7A6i)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "2D96KZwNUvVtcapQPq2mm7J9isFcDCfykwJpVEZwBc7tCgL4qPyu17BT5ePozAE9HS6Yvj51f62Mp4n9d9dkzJoX\n" +
+    "2XiBDpuUdu6zCPWGzHXXy8c4ATSscfFQG9DjmqMZUxDZVt1Dp4m2N5oHYVUfoPdrU9SLk4qxi65RNrfCVnvQtQJk\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_TRANSACTION_SUMS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:3:6:6:3:0:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "CYYjHsNyg3HMRMpTHqCJAN9McjH5BwFLmDKGV3PmCuKp\n" +
+    "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB\n" +
+    "T:6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3:4\n" +
+    "T:3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435:10\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:46\n" +
+    "T:A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956:66\n" +
+    "T:67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B:176\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:46\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "3:SIG(0)\n" +
+    "4:SIG(0)\n" +
+    "5:SIG(0)\n" +
+    "30:4:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "156:4:SIG(DSz4rgncXCytsUMW2JU2yhLquZECD2XpEkpP9gG5HyAx)\n" +
+    "50:4:SIG(6DyGr5LFtFmbaJYRvcs9WmBsr4cbJbJ1EV9zBbqG7A6i)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "2D96KZwNUvVtcapQPq2mm7J9isFcDCfykwJpVEZwBc7tCgL4qPyu17BT5ePozAE9HS6Yvj51f62Mp4n9d9dkzJoX\n" +
+    "2XiBDpuUdu6zCPWGzHXXy8c4ATSscfFQG9DjmqMZUxDZVt1Dp4m2N5oHYVUfoPdrU9SLk4qxi65RNrfCVnvQtQJk\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_TRANSACTION_UNIT_BASES:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:3:6:6:3:0:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "CYYjHsNyg3HMRMpTHqCJAN9McjH5BwFLmDKGV3PmCuKp\n" +
+    "9WYHTavL1pmhunFCzUwiiq4pXwvgGG5ysjZnjz9H8yB\n" +
+    "T:6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3:4\n" +
+    "T:3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435:10\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:46\n" +
+    "T:A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956:66\n" +
+    "T:67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B:176\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:46\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "3:SIG(0)\n" +
+    "4:SIG(0)\n" +
+    "5:SIG(0)\n" +
+    "30:4:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "156:3:SIG(DSz4rgncXCytsUMW2JU2yhLquZECD2XpEkpP9gG5HyAx)\n" +
+    "49:4:SIG(6DyGr5LFtFmbaJYRvcs9WmBsr4cbJbJ1EV9zBbqG7A6i)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "2D96KZwNUvVtcapQPq2mm7J9isFcDCfykwJpVEZwBc7tCgL4qPyu17BT5ePozAE9HS6Yvj51f62Mp4n9d9dkzJoX\n" +
+    "2XiBDpuUdu6zCPWGzHXXy8c4ATSscfFQG9DjmqMZUxDZVt1Dp4m2N5oHYVUfoPdrU9SLk4qxi65RNrfCVnvQtQJk\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_UD_SOURCE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:1:1:1:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:33\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_TX_SOURCE: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:1:1:1:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "T:A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956:44\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_UNAVAILABLE_UD_SOURCE: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:1:1:1:1:0:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "D:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:55\n" +
+    "0:SIG(0)\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_UNAVAILABLE_TX_SOURCE: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:1:1:1:1:1:0:0\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITHOUT_ISSUERS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:0:2:2:1:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "4500:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "4500:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITHOUT_SOURCES:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:0:0:1:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITHOUT_RECIPIENT: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:2:2:0:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "300:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "300:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITH_DUPLICATED_SOURCE_SINGLE_TX:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:3:3:1:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "400:5:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "200:4:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "200:4:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "120:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITH_EMPTY_TX_CONDITIONS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:2:2:2:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "200:1:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "200:1:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "40:0:()\n" +
+    "40:0:  \n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WRONG_TOTAL:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:2:2:2:0:0\n" +
+    "5-2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "2:2:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "1:2:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "40:2:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "70:2:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_V3_GOOD_AMOUNTS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:1:3:3:17:1:0\n" +
+    "33089-00004C8D3A7EAA34ADD20E36268F7A141A45B8D47C0872EFDB00187810E0BBFD\n" +
+    "TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS\n" +
+    "17602605:0:T:E4E8486E20D521AAB329376431BD633A59FE847EF533C38CDD2C9F6E820FF786:14\n" +
+    "800:1:T:E9BDCC49762D17757B1AA8C52744CD182DF3FFC8EA9B237267A1B3B33ABE089B:0\n" +
+    "1897916:1:T:04A9E034116E436E581C01B9B58150A38615C06D12AE434614D5A08F6B409B1C:0\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "5:0:SIG(TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS)\n" +
+    "6:1:SIG(TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS)\n" +
+    "7:2:SIG(TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS)\n" +
+    "60:3:SIG(DesHja7gonANRJB7YUkfCgQpnDjgGeDXAeArdhcbXPmJ)\n" +
+    "170:3:SIG(HGYV5C16mrdvE9vpb1S9nMDHkVPsubBgANs9pSb6HWCV)\n" +
+    "210:3:SIG(HxWwfnVXpfec957STN97q6cMSzefkbXdApRTwVuUFUyc)\n" +
+    "110:3:SIG(9bZEATXBGPUSsk8oAYi4KAChg3rHKwNt67hVdErbNGCW)\n" +
+    "200:3:SIG(8Fi1VSTbjkXguwThF4v2ZxC5whK7pwG2vcGTkPUPjPGU)\n" +
+    "100:3:SIG(2eijdARyo6FuTVX6kZPbVziRB8wq87sGXpCth9eaUNX4)\n" +
+    "160:3:SIG(HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk)\n" +
+    "90:3:SIG(8KTEFQS78HwEz1NK627rNsYwENxNXJyvtyMAyfKPXZRB)\n" +
+    "180:3:SIG(XeBpJwRLkF5J4mnwyEDriEcNB13iFpe1MAKR4mH3fzN)\n" +
+    "130:3:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+    "130:3:SIG(4eDissnRvTq7JSgbmnL62ogQcrCLzw2zdrxA4q1yuczs)\n" +
+    "100:3:SIG(2pyPsXM8UCB88jP2NRM4rUHxb63qm89JMEWbpoRrhyDK)\n" +
+    "40:3:SIG(6KXBjAFceD1gp8RBVZfy5YQyKFXG8GaX8tKaLAyPWHrj)\n" +
+    "34909:3:SIG(TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS)\n" +
+    "REMU:22684:22851\n" +
+    "Iu9NripkuUAeYhhUyeiW9PSTkYFu4kM8ZEtFUgfh44qsuF5PaM38zy3/IszWtJ1i6HGQsbrxDiOVem6Gu+tyDA==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_TOO_LONG:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: test_net\n" +
+    "Number: 33520\n" +
+    "PoWMin: 77\n" +
+    "Time: 1472124036\n" +
+    "MedianTime: 1472124036\n" +
+    "UnitBase: 3\n" +
+    "Issuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+    "IssuersFrame: 52\n" +
+    "IssuersFrameVar: -2\n" +
+    "DifferentIssuersCount: 9\n" +
+    "PreviousHash: 00001E78E26DD813024EEFBC8F5C50BBA8B30DD1DB5C4F492D9606EE12C06BB4\n" +
+    "PreviousIssuer: 5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of\n" +
+    "MembersCount: 128\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:1:48:48:2:0:0\n" +
+    "33518-00001D9E2EA1F967667528817FAF17ECBACE6150EBB875A2196B4457C0366D2A\n" +
+    "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+    "60:3:T:2A74F44780925586EA4C01BEE9DA5042FE8BDB0FB0506B9D69990750B555AC91:15\n" +
+    "1829442:3:T:FAC74B122B951F99C28B75587CFE002DC8340B053281050747D480E1F9E9193D:1\n" +
+    "1000:3:T:0C4C6D1321698DA41084A84C1DCD34769EB1C744933885CA3BF4A73BACB5C348:7\n" +
+    "1500:3:T:060BDC4B0E1D9BB01BF91F5082700C51BBDB9BDA1051BD13F6DCF1F6C5064664:8\n" +
+    "6000:3:T:B514D9CAF277F4DBE98B8ECC61014DB1609BA924903A884ABF969FFBB1E1C3F6:8\n" +
+    "4500:3:T:B4A735DE1C5860C3B02AD68420BC5949B26B905F83C2E6E1F88D7D4490350C6F:8\n" +
+    "4500:3:T:A2407DBDA4F687DB4B6CE5020EB64DD8F6CA71D761FB80F0D379B9E574CF134E:5\n" +
+    "5750:3:T:120AA878EEB49D33C64C87661BADBE154B5ECAAC05502C478AC79F4E465E4EBC:3\n" +
+    "16805:3:T:0562B378C254D538E4B73B928AD25CD3EACE2C2C8D662D1D48AF4B7860620B4D:0\n" +
+    "7250:3:T:C0D99A2E3271606CB99384DD881CF2DE5F36180728464A4B88B33A0AFDDCA587:9\n" +
+    "9750:3:T:180E64F8C76416455B4B34029F05E3C87D1F0E65AF7128358F7A6D874AFAA492:6\n" +
+    "14000:3:T:CFBA4FB960BBDB9DD56BEE0ABCF68C04F71A51910F148FC219A72D2DD5F24F58:3\n" +
+    "6750:3:T:570BD788DE59A5A99564026FAAEF7F2F1A398E858FE745D3A0ABE7C71040A6A3:4\n" +
+    "6250:3:T:6ABBA329813201CBA66D0A8A682BE7986F1F80918FF2A5809B864EA0E134ABA4:3\n" +
+    "7500:3:T:3B34FC6AD7543CE3671E6E302576A92A6B97BE1C15DEA1DBAB2D327A2911306B:3\n" +
+    "5000:3:T:443B53D39DC3551CB3E49A1AE856E115F0571C154C432094D472D1C70BA368A8:8\n" +
+    "6750:3:T:BDA9E8104D8458C65628A647086A3331C724E895E0EF24B9BB3B6144B27AC554:5\n" +
+    "8250:3:T:A67E6D09AD60339255297A05ECA04E3E20AB290AB9CA1A5DE787BD67FE64F544:4\n" +
+    "7250:3:T:DD2C145C4F2940EC1FAF1CAC830A52F01F0AA0A3AB9D88DD075BFEAEEBDAC27A:3\n" +
+    "6000:3:T:2B1B033D6E56C67C251C24F11941BAE1D3CBE7B71FB9E910018461CD9E4C6C65:6\n" +
+    "5500:3:T:75B5FC3419CEC4553FEBED80437CC8816041757932DC9803FF061E77B77A86F6:8\n" +
+    "8000:3:T:1DBC2228962C9154AD37993F67F497FC51B38768A4DCCD8872B8DF9B8AB7A5D8:7\n" +
+    "5750:3:T:D3E329ED2003A86876EBAC64F8727459D9F9478A5E4D614BA439786D49CFE51E:5\n" +
+    "7250:3:T:956457195A5C5700CF8F7A89597F90A5A60F3124E3F4ED9D6D4D58DB1B7E8C3B:6\n" +
+    "6000:3:T:EA45AFC115379BF663DA6BB517409ACC3D45E66291FF7D1767CA1030334A124B:5\n" +
+    "4750:3:T:A7664F399173A3EC98519DC5F1428416ED962FFEF7AA44075F0AAAA64A6E5880:5\n" +
+    "5750:3:T:D25272F1D778B52798B7A51CF0CE21F7C5812F841374508F4367872D4A47F0F7:3\n" +
+    "4750:3:T:1556A77A6A1019484770F5AE2905EA58A7D9B434552B85772AE6EF1C96C138C6:7\n" +
+    "4000:3:T:C9E4360176A5908DFB1F550D8295FC74DA062851ED087FE3F24275BC9E7D1E82:8\n" +
+    "4000:3:T:C519A4D03F4725EF97B2D9EB88D13C3AAB4F1F0F30B84D6D8B4E8849506BAF4D:8\n" +
+    "4500:3:T:D4B87D5FF3A517C622C75662F0D2746CD94AAC6365FAA3D41670B0320FA7F89E:5\n" +
+    "5500:3:T:5918DE9FB72A329F20684F12E69BC3FE01CEE638A9FA7E3080F5FA025FA8F480:4\n" +
+    "5250:3:T:DC32942E881ED8221CAD5A4DD55C2CB672F827407773064B4E8D8E8327CBC578:3\n" +
+    "6250:3:T:9E01B679E2B9BD4E06FA8787EDBEEB77EA99E73CD90CCD5011D24DE68BFFBD08:3\n" +
+    "5250:3:T:FDF089AA99BA44E0A2C66F6389DD4BBDB2200DF07C993146305353A9BD290ADC:4\n" +
+    "6250:3:T:392409C3FBC2F72C23841089A7A4258F2915D4B09C963EC309F49072DD686E89:4\n" +
+    "6000:3:T:F3DC72E0BC3FE36F0C4055831D66ED13FA90875335D12648B8ABA777B0966EB1:4\n" +
+    "5250:3:T:ADB9EC0BE8B20D33DAC2EADDE29C67F3931F23A3856855F42704C72360619027:6\n" +
+    "5000:3:T:6D7C4808CD9D8158DBDD69FEED6C29E6743E8ED075FD1C8D1BDEC2456C63A910:9\n" +
+    "6000:3:T:49500A1D9CAB37244C33F8EACFF449907790BC32D7323D748373B1D8F02C2FBC:3\n" +
+    "10500:3:T:F4651339A9C1D29A78F06F30FD05819F4F9DF5C599867D4278170DDB9A22AA4E:6\n" +
+    "8000:3:T:999C1E9631F1F5DB1EF5DBB7933C97A3D215FC7D12538C353D9740DF2A49D61E:4\n" +
+    "6500:3:T:B7B629039D1B87D478C3008AB743F71FE69F40E373A8279A6BDD06460BC88803:6\n" +
+    "5500:3:T:F51FC58E86630A00C8CE9E6EE633B6DAB2AB824C818F6A89DE2ABDFE82B2B07F:6\n" +
+    "6500:3:T:0C8A317ED208529660DDA43B1688489C7EE6EE5470BC6EA24C683180D55B9B64:6\n" +
+    "7500:3:T:DA6F7ABDE903366FD1BB92A025459F0D3A1C39D40D9AAF9DEA1015AAEBB112D3:5\n" +
+    "5250:3:T:7197A1785D81F4AA3C179E86E2D4DA32D36999B49E8BCDAACE38B5B100AECAB8:6\n" +
+    "2305438:3:T:0FC57133A2CA3A1413E2FC2606F5004A9A6F107DC6E72A3348B5C7A8039ED852:1\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "3:SIG(0)\n" +
+    "4:SIG(0)\n" +
+    "5:SIG(0)\n" +
+    "6:SIG(0)\n" +
+    "7:SIG(0)\n" +
+    "8:SIG(0)\n" +
+    "9:SIG(0)\n" +
+    "10:SIG(0)\n" +
+    "11:SIG(0)\n" +
+    "12:SIG(0)\n" +
+    "13:SIG(0)\n" +
+    "14:SIG(0)\n" +
+    "15:SIG(0)\n" +
+    "16:SIG(0)\n" +
+    "17:SIG(0)\n" +
+    "18:SIG(0)\n" +
+    "19:SIG(0)\n" +
+    "20:SIG(0)\n" +
+    "21:SIG(0)\n" +
+    "22:SIG(0)\n" +
+    "23:SIG(0)\n" +
+    "24:SIG(0)\n" +
+    "25:SIG(0)\n" +
+    "26:SIG(0)\n" +
+    "27:SIG(0)\n" +
+    "28:SIG(0)\n" +
+    "29:SIG(0)\n" +
+    "30:SIG(0)\n" +
+    "31:SIG(0)\n" +
+    "32:SIG(0)\n" +
+    "33:SIG(0)\n" +
+    "34:SIG(0)\n" +
+    "35:SIG(0)\n" +
+    "36:SIG(0)\n" +
+    "37:SIG(0)\n" +
+    "38:SIG(0)\n" +
+    "39:SIG(0)\n" +
+    "40:SIG(0)\n" +
+    "41:SIG(0)\n" +
+    "42:SIG(0)\n" +
+    "43:SIG(0)\n" +
+    "44:SIG(0)\n" +
+    "45:SIG(0)\n" +
+    "46:SIG(0)\n" +
+    "47:SIG(0)\n" +
+    "2706:3:SIG(TENGx7WtzFsTXwnbrPEvb6odX2WnqYcnnrjiiLvp1mS)\n" +
+    "4417789:3:SIG(HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk)\n" +
+    "ue7NjWPfPXxPNqvlGgr/K4jZjyHlUdYVl6dq+RXJ5RMuu8xBoo6bKhTKOyz/vXZz2clnwV/FqPDdDsWImxCmAg==\n" +
+    "InnerHash: 1C9EF3BCCBB14DA060F172855D18F7D979FBA752E55BB288E253806E4980E5AC\n" +
+    "Nonce: 0\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  OUTPUT_TOO_LONG:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: test_net\n" +
+    "Number: 33520\n" +
+    "PoWMin: 77\n" +
+    "Time: 1472124036\n" +
+    "MedianTime: 1472124036\n" +
+    "UnitBase: 3\n" +
+    "Issuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+    "IssuersFrame: 52\n" +
+    "IssuersFrameVar: -2\n" +
+    "DifferentIssuersCount: 9\n" +
+    "PreviousHash: 00001E78E26DD813024EEFBC8F5C50BBA8B30DD1DB5C4F492D9606EE12C06BB4\n" +
+    "PreviousIssuer: 5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of\n" +
+    "MembersCount: 128\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:1:1:1:1:0:0\n" +
+    "33518-00001D9E2EA1F967667528817FAF17ECBACE6150EBB875A2196B4457C0366D2A\n" +
+    "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+    "60:3:T:2A74F44780925586EA4C01BEE9DA5042FE8BDB0FB0506B9D69990750B555AC91:15\n" +
+    "0:SIG(0)\n" +
+    "60:3:(SIG(EA7Dsw39ShZg4SpURsrgMaMqrweJPUFPYHwZA8e92e3D) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4)|| XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4)  || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4) || XHX(03AC674216F3E15C761EE1A5E255F067953623C8B388B4459E13F978D7C846F4))\n" +
+    "ue7NjWPfPXxPNqvlGgr/K4jZjyHlUdYVl6dq+RXJ5RMuu8xBoo6bKhTKOyz/vXZz2clnwV/FqPDdDsWImxCmAg==\n" +
+    "InnerHash: 1C9EF3BCCBB14DA060F172855D18F7D979FBA752E55BB288E253806E4980E5AC\n" +
+    "Nonce: 0\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  UNLOCK_TOO_LONG:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: test_net\n" +
+    "Number: 33520\n" +
+    "PoWMin: 77\n" +
+    "Time: 1472124036\n" +
+    "MedianTime: 1472124036\n" +
+    "UnitBase: 3\n" +
+    "Issuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+    "IssuersFrame: 52\n" +
+    "IssuersFrameVar: -2\n" +
+    "DifferentIssuersCount: 9\n" +
+    "PreviousHash: 00001E78E26DD813024EEFBC8F5C50BBA8B30DD1DB5C4F492D9606EE12C06BB4\n" +
+    "PreviousIssuer: 5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of\n" +
+    "MembersCount: 128\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:1:1:1:1:0:0\n" +
+    "33518-00001D9E2EA1F967667528817FAF17ECBACE6150EBB875A2196B4457C0366D2A\n" +
+    "HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+    "60:3:T:2A74F44780925586EA4C01BEE9DA5042FE8BDB0FB0506B9D69990750B555AC91:15\n" +
+    "0:SIG(0) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789) XHX(123456789)\n" +
+    "60:3:SIG(EA7Dsw39ShZg4SpURsrgMaMqrweJPUFPYHwZA8e92e3D)\n" +
+    "ue7NjWPfPXxPNqvlGgr/K4jZjyHlUdYVl6dq+RXJ5RMuu8xBoo6bKhTKOyz/vXZz2clnwV/FqPDdDsWImxCmAg==\n" +
+    "InnerHash: 1C9EF3BCCBB14DA060F172855D18F7D979FBA752E55BB288E253806E4980E5AC\n" +
+    "Nonce: 0\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WRONG_TRANSFORM:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:3:3:3:0:0\n" +
+    "5-2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "1000:1:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "200:2:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "30:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "900:1:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "220:2:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "29:3:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WRONG_TRANSFORM_LOW_BASE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:1:6:6:8:1:0\n" +
+    "33753-0000054FC8AC7B450BA7D8BA7ED873FEDD5BF1E98D5D3B0DEE38DED55CB80CB3\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "150605:3:T:01B1AB40E7C1021712FF40D5605037C0ACEECA547BF519ABDCB6473A9F6BDF45:1\n" +
+    "297705:3:D:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:33530\n" +
+    "2244725:3:T:507CBE120DB654645B55431A9967789ACB7CD260EA962B839F1708834D1E5491:0\n" +
+    "972091:2:D:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:30324\n" +
+    "3808457:2:T:657229C5433FB9FFE64BF2E795E79DA796E0B1AF536DC740ECC26CCBBE104C33:1\n" +
+    "4:2:T:507CBE120DB654645B55431A9967789ACB7CD260EA962B839F1708834D1E5491:1\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "2:SIG(0)\n" +
+    "3:SIG(0)\n" +
+    "4:SIG(0)\n" +
+    "5:SIG(0)\n" +
+    "3171064:3:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+    "3:2:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+    "4:1:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+    "8:0:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+    "25:3:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+    "8:2:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+    "5:1:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+    "2:0:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+    "all 10.6517\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_TX_V3_TOO_HIGH_OUTPUT_BASE:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 101\n" +
+    "IssuersFrameVar: 11\n" +
+    "DifferentIssuersCount: 4\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:1:1:1:1:0:0\n" +
+    "5-2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "10:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:4:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITH_DUPLICATED_SOURCE_MULTIPLE_TX:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:2:2:1:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "200:1:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "100:1:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "80:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "TX:10:1:1:1:1:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "200:1:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "40:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  TRANSACTION_WITH_WRONG_SIGNATURES: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 83\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411777000\n" +
+    "MedianTime: 1411777000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "TX:10:2:2:2:1:0:0\n" +
+    "3-2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+    "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+    "600:5:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "600:5:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+    "0:SIG(0)\n" +
+    "1:SIG(0)\n" +
+    "80:0:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+    "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+    "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  CERT_BASED_ON_NON_ZERO_FOR_ROOT: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:1:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  CERT_BASED_ON_NON_EXISTING_BLOCK: 
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 1\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:CCCCJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:111:vTvKYvjTYUT30t/9h7uNE/2LFJiYuA4YleIetFkb62XxDoxGizKC9VvVs7WRNArcfHvJ+RLyOoawQzpmw2DyCw==\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REVOKED_WITH_MEMBERSHIPS:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REVOKED_WITH_DUPLICATES:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "Excluded:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  REVOKED_NOT_IN_EXCLUDED:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "Excluded:\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_UNKNOWN_REVOKED:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "HATTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "Excluded:\n" +
+    "HATTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_YET_REVOKED:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "BBTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "Excluded:\n" +
+    "BBTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n",
+
+  BLOCK_WITH_WRONG_REVOCATION_SIG:
+    "Version: 10\n" +
+    "Type: Block\n" +
+    "Currency: beta_brousouf\n" +
+    "Number: 0\n" +
+    "PoWMin: 1\n" +
+    "Time: 1411776000\n" +
+    "MedianTime: 1411776000\n" +
+    "UnitBase: 0\n" +
+    "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "IssuersFrame: 100\n" +
+    "IssuersFrameVar: 0\n" +
+    "DifferentIssuersCount: 3\n" +
+    "MembersCount: 3\n" +
+    "Identities:\n" +
+    "Joiners:\n" +
+    "Actives:\n" +
+    "Leavers:\n" +
+    "Revoked:\n" +
+    "CCTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+    "Excluded:\n" +
+    "CCTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+    "Certifications:\n" +
+    "Transactions:\n" +
+    "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+    "Nonce: 1\n" +
+    "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n"
+};
diff --git a/test/fast/block_format.js b/test/fast/block_format.js
new file mode 100644
index 0000000000000000000000000000000000000000..9f57aa5058cc10abf5ecd011a70de703230b815f
--- /dev/null
+++ b/test/fast/block_format.js
@@ -0,0 +1,86 @@
+"use strict";
+const should  = require('should');
+const parsers = require('duniter-common').parsers;
+
+const raw = "Version: 10\n" +
+  "Type: Block\n" +
+  "Currency: test_net\n" +
+  "Number: 32029\n" +
+  "PoWMin: 72\n" +
+  "Time: 1471640455\n" +
+  "MedianTime: 1471640455\n" +
+  "UnitBase: 3\n" +
+  "Issuer: HnFcSms8jzwngtVomTTnzudZx7SHUQY8sVE1y8yBmULk\n" +
+  "IssuersFrame: 50\n" +
+  "IssuersFrameVar: -5\n" +
+  "DifferentIssuersCount: 8\n" +
+  "PreviousHash: 00001A8B07B4F5BD5473B83ECC02217E0DDE64A31D695B734C5D88F470B45606\n" +
+  "PreviousIssuer: E2uioubZeK5SDMoxkTkizRnhE8qDL24v5oUNNa1sQKMH\n" +
+  "MembersCount: 124\n" +
+  "Identities:\n" +
+  "Joiners:\n" +
+  "Actives:\n" +
+  "Leavers:\n" +
+  "Revoked:\n" +
+  "Excluded:\n" +
+  "Certifications:\n" +
+  "Transactions:\n" +
+  "TX:10:1:6:6:2:1:0\n" +
+  "32028-00001A8B07B4F5BD5473B83ECC02217E0DDE64A31D695B734C5D88F470B45606\n" +
+  "F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL\n" +
+  "106930:3:D:F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL:30580\n" +
+  "117623:3:D:F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL:30882\n" +
+  "129386:3:D:F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL:31142\n" +
+  "140010:3:D:F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL:31404\n" +
+  "152769:3:D:F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL:31684\n" +
+  "168046:3:D:F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL:31966\n" +
+  "0:SIG(0)\n" +
+  "1:SIG(0)\n" +
+  "2:SIG(0)\n" +
+  "3:SIG(0)\n" +
+  "4:SIG(0)\n" +
+  "5:SIG(0)\n" +
+  "168046:3:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+  "646718:3:SIG(F1pirjHYJYimekfvjVp2SGrVQSsJXb4H8JYKJddLzwVL)\n" +
+  "developpement JavaScript explorateur\n" +
+  "9WR/NRQaIbEuNmatwRytS6QdFjUYME2/ghH/N0KrRF0a6WqG4RvlUEnbzSFpQT4wJ9tTb4cvf0MOW9ZmLli8Cg==\n" +
+  "InnerHash: 6AEFB6C53390077861F834E5EE7B6222CC6A474040DF22E4FA669B66D5FA13AA\n" +
+  "Nonce: 0\n" +
+  "mqzcL5FW0ZMz7/aPpV8vLb6KzMYXl3WYI4bdm6Usq34tSgvROoAOp1uSuyqFBHNd7hggfR/8tACCPhkJMVNLCw==\n";
+
+describe("Block format", function(){
+
+  var parser = parsers.parseBlock;
+
+  it('a valid block should be well formatted', () => parser.syncWrite(raw, {
+    trace: (msg, p1) => {
+      if (p1) {
+        console.log(msg, p1)
+      } else {
+        console.log(msg)
+      }
+    }
+  }));
+
+  describe("should be rejected", function(){
+
+    it('a block without signature', () => {
+      try {
+        parser.syncWrite(raw.replace("mqzcL5FW0ZMz7/aPpV8vLb6KzMYXl3WYI4bdm6Usq34tSgvROoAOp1uSuyqFBHNd7hggfR/8tACCPhkJMVNLCw==\n", ""));
+        should.not.exist('Should have thrown a format error.');
+      } catch (err) {
+        should.exist(err);
+      }
+    });
+
+    it('a block with wrong pubkey format', () => {
+      try {
+        parser.syncWrite(raw.replace("HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:", "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvY:"));
+        should.not.exist('Should have thrown a format error.');
+      } catch (err) {
+        should.exist(err);
+      }
+    });
+  });
+  
+});
diff --git a/test/fast/block_global.disabled b/test/fast/block_global.disabled
new file mode 100644
index 0000000000000000000000000000000000000000..7611166fd585ea3d7d3ea15ffea5d38b2937f23d
--- /dev/null
+++ b/test/fast/block_global.disabled
@@ -0,0 +1,678 @@
+"use strict";
+const co            = require('co');
+const Q             = require('q');
+const _             = require('underscore');
+const async         = require('async');
+const should        = require('should');
+const rules         = require('../../app/lib/rules');
+const wotb          = require('../../app/lib/wot');
+const parsers       = require('duniter-common').parsers;
+const blocks        = require('../data/blocks');
+const parser        = parsers.parseBlock;
+const Block         = require('../../app/lib/entity/block');
+const Identity      = require('../../app/lib/entity/identity');
+
+const conf = {
+  currency: 'bb',
+  msValidity: 365.25 * 24 * 3600, // 1 year
+  sigValidity: 365.25 * 24 * 3600, // 1 year
+  sigQty: 1,
+  xpercent: 0.9,
+  powZeroMin: 1,
+  powPeriod: 18,
+  incDateMin: 10,
+  dt: 100,
+  ud0: 100,
+  c: 0.1,
+  medianTimeBlocks: 200,
+  percentRot: 2 / 3,
+  blockRot: 300,
+  dtDiffEval: 500,
+  stepMax: 1
+};
+
+function getDAL(overrides) {
+  return _.extend({
+    wotb: wotb.memoryInstance(),
+    getCurrentBlockOrNull: () => Q(null),
+    getWrittenIdtyByUID: () => Q(null),
+    getWrittenIdtyByPubkey: () => Q(null),
+    getToBeKicked: () => Q([]),
+    isLeaving: () => Q(false),
+    getPreviousLinks: () => Q(null),
+    getLastValidFrom: () => Q(null),
+    lastUDBlock: () => Q(null),
+    getBlock: () => Q(null),
+    isMember: () => Q(false),
+    getBlocksBetween: () => Q([]),
+    lastBlockOfIssuer: () => Q(null)
+  }, overrides);
+}
+
+/**
+ * TODO: reimplement tests according to new convention:
+ *
+ *   - Name: protocol-brg<number>-<title>.js
+ *   - Content: see existing tests
+ */
+
+describe("Block global coherence:", function(){
+
+  it('a valid block should not have any error', validate(blocks.VALID_ROOT, getDAL(), {
+    getIssuerPersonalizedDifficulty: () => Q(1),
+    getvHEAD_1: () => Q({ version : 2 })
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a valid (next) block should not have any error', validate(blocks.VALID_NEXT, getDAL({
+    getCurrentBlockOrNull: () => Q({ number: 2, hash: '52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57', issuer: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', membersCount: 3, time: 1411776000, medianTime: 1411776000 }),
+    getBlock: (number) => {
+      if (number == 1) {
+        return Q({ time: 1411776000, powMin: 1 });
+      }
+      if (number == 2) {
+        return Q({ number: 3, powMin: 1 });
+      }
+      return Q(null);
+    },
+    isMember: () => Q(true),
+    getBlocksBetween: () => Q([{time:1411776000},{time:1411776000},{time:1411776000}])
+  }), {
+    getIssuerPersonalizedDifficulty: () => Q(2),
+    getvHEAD_1: () => Q({ version : 2 })
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block with wrong PreviousHash should fail', test(rules.GLOBAL.checkPreviousHash, blocks.WRONG_PREVIOUS_HASH, {
+    getCurrentBlockOrNull: () => Q({ number: 50, hash: '4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8', issuer: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', membersCount: 3 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('PreviousHash not matching hash of current block');
+  }));
+
+  it('a block with wrong PreviousIssuer should fail', test(rules.GLOBAL.checkPreviousIssuer, blocks.WRONG_PREVIOUS_ISSUER, {
+    getCurrentBlockOrNull: () => Q({ number: 50, hash: '4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8', issuer: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', membersCount: 3 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('PreviousIssuer not matching issuer of current block');
+  }));
+
+  it('a block with wrong DifferentIssuersCount following V2 should fail', test(rules.GLOBAL.checkDifferentIssuersCount, blocks.WRONG_DIFFERENT_ISSUERS_COUNT_FOLLOWING_V2, {
+    getCurrentBlockOrNull: () => Q({ version: 2 }),
+    getBlocksBetween: () => Q([])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('DifferentIssuersCount is not correct');
+  }));
+  
+  it('a block with wrong DifferentIssuersCount following V3 should fail', test(rules.GLOBAL.checkDifferentIssuersCount, blocks.WRONG_DIFFERENT_ISSUERS_COUNT_FOLLOWING_V3, {
+    getCurrentBlockOrNull: () => Q({ version: 3, issuersCount: 4 }),
+    getBlocksBetween: () => Q([
+      // 5 blocks, 4 different issuers
+      { issuer: 'A' },
+      { issuer: 'B' },
+      { issuer: 'A' },
+      { issuer: 'C' },
+      { issuer: 'D' }
+    ])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('DifferentIssuersCount is not correct');
+  }));
+
+  it('a block with wrong IssuersFrame following V2 should fail', test(rules.GLOBAL.checkIssuersFrame, blocks.WRONG_ISSUERS_FRAME_FOLLOWING_V2, {
+    getCurrentBlockOrNull: () => Q({ version: 2 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('IssuersFrame is not correct');
+  }));
+
+  it('a block with wrong IssuersFrame following V3 should fail', test(rules.GLOBAL.checkIssuersFrameVar, blocks.WRONG_ISSUERS_FRAME_FOLLOWING_V3, {
+    getCurrentBlockOrNull: () => Q({ version: 3, issuersCount: 3, issuersFrame: 56, issuersFrameVar: 6 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('IssuersFrameVar is not correct');
+  }));
+
+  it('a block with wrong Issuer should fail', test(rules.GLOBAL.checkIssuerIsMember, blocks.WRONG_ISSUER, {
+    isMember: () => Q(false)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Issuer is not a member');
+  }));
+
+  it('a block with joiner for root block without root number shoud fail', test(rules.GLOBAL.checkJoiners, blocks.WRONG_JOIN_ROOT_NUMBER, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Number must be 0 for root block\'s memberships');
+  }));
+
+  it('a block with joiner for root block without root hash shoud fail', test(rules.GLOBAL.checkJoiners, blocks.WRONG_JOIN_ROOT_HASH, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Hash must be E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855 for root block\'s memberships');
+  }));
+
+  it('a block with joiner targeting unexisting block fail', test(rules.GLOBAL.checkJoiners, blocks.WRONG_JOIN_BLOCK_TARGET, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Membership based on an unexisting block');
+  }));
+
+  it('a block with joiner membership number lower or equal than previous should fail', test(rules.GLOBAL.checkJoiners, blocks.WRONG_JOIN_NUMBER_TOO_LOW, {
+    getCurrentBlockOrNull: () => Q(null),
+    getWrittenIdtyByPubkey: () => Q({ currentMSN: 2 }),
+    getBlockByNumberAndHash: () => Q({ number: 3, powMin: 1 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Membership\'s number must be greater than last membership of the pubkey');
+  }));
+
+  it('a block with joiner membership of a yet member should fail', test(rules.GLOBAL.checkJoiners, blocks.WRONG_JOIN_ALREADY_MEMBER, {
+    isMember: () => Q(true),
+    getWrittenIdtyByPubkey: () => Q({ currentMSN: 2, member: true }),
+    getBlockByNumberAndHash: () => Q({ number: 3, powMin: 1 }),
+    getCurrentBlockOrNull: () => Q({ number: 50, hash: '4C8800825C44A22F230AFC0D140BF1930331A686899D16EBE4C58C9F34C609E8', issuer: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', membersCount: 3 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Cannot be in joiners if already a member');
+  }));
+
+  it('a block with at least one revoked joiner should fail', test(rules.GLOBAL.checkJoinersAreNotRevoked, blocks.REVOKED_JOINER, {
+    getWrittenIdtyByPubkey: () => Q({ currentMSN: 2, revoked: true })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Revoked pubkeys cannot join');
+  }));
+
+  it('a block with at least one joiner without enough certifications should fail', test(rules.GLOBAL.checkJoinersHaveEnoughCertifications, blocks.NOT_ENOUGH_CERTIFICATIONS_JOINER, {
+    getValidLinksTo: () => Q([])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Joiner/Active does not gathers enough certifications');
+  }));
+
+  it('a block with at least one joiner without enough certifications should succeed', test(rules.GLOBAL.checkJoinersHaveEnoughCertifications, blocks.NOT_ENOUGH_CERTIFICATIONS_JOINER_BLOCK_0, {
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block with expired membership should fail', test(rules.GLOBAL.checkJoiners, blocks.EXPIRED_MEMBERSHIP, {
+    getWrittenIdtyByPubkey: () => Q({ currentMSN: 2 }),
+    getBlockByNumberAndHash: () => Q({ medianTime: 1411775000, powMin: 1 }),
+    getCurrentBlockOrNull: () => Q({ time: 1443333600, medianTime: 1443333600 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Membership has expired');
+  }));
+
+  it('a block with at least one joiner outdistanced from WoT should fail', test(rules.GLOBAL.checkJoinersAreNotOudistanced, blocks.OUTDISTANCED_JOINER, {
+    wotb: {
+      addNode: () => 1,
+      setEnabled: () => 1,
+      addLink: () => 1,
+      removeLink: () => 1,
+      removeNode: () => 1,
+      isOutdistanced: () => true
+    },
+    getCurrentBlockOrNull: () => Q({ number: 2, hash: '52DC8A585C5D89571C511BB83F7E7D3382F0041452064B1272E65F0B42B82D57', issuer: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd', membersCount: 3, time: 1411776000, medianTime: 1411776000 }),
+    getWrittenIdtyByPubkey: () => Q({ wotb_id: 0 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Joiner/Active is outdistanced from WoT');
+  }));
+
+  it('a block with active targeting unexisting block fail', test(rules.GLOBAL.checkActives, blocks.WRONG_ACTIVE_BLOCK_TARGET, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Membership based on an unexisting block');
+  }));
+
+  it('a block with certification of unknown pubkey should fail', test(rules.GLOBAL.checkCertificationsAreValid, blocks.WRONGLY_SIGNED_CERTIFICATION, {
+    getCurrentBlockOrNull: () => Q(null),
+    getBlock: () => Q({}),
+    getBlockByNumberAndHash: () => Q({})
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong signature for certification');
+  }));
+
+  it('a block with certification to non-zero block for root block should fail', test(rules.GLOBAL.checkCertificationsAreValid, blocks.CERT_BASED_ON_NON_ZERO_FOR_ROOT, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Number must be 0 for root block\'s certifications');
+  }));
+
+  it('a block with certification to unknown block should fail', test(rules.GLOBAL.checkCertificationsAreValid, blocks.CERT_BASED_ON_NON_EXISTING_BLOCK, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Certification based on an unexisting block');
+  }));
+
+  it('a block with expired certifications should fail', test(rules.GLOBAL.checkCertificationsAreValid, blocks.EXPIRED_CERTIFICATIONS, {
+    getCurrentBlockOrNull: () => Q({ time: 1443333600, medianTime: 1443333600 }),
+    getBlock: () => Q({ medianTime: 1411775000, powMin: 1 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Certification has expired');
+  }));
+
+  it('a block with certification from non-member pubkey should fail', test(rules.GLOBAL.checkCertificationsAreMadeByMembers, blocks.UNKNOWN_CERTIFIER, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Certification from non-member');
+  }));
+
+  it('a block with certification to non-member pubkey should fail', test(rules.GLOBAL.checkCertificationsAreMadeToMembers, blocks.UNKNOWN_CERTIFIED, {
+    isMember: () => Q(false)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Certification to non-member');
+  }));
+
+  it('a block with already used UserID should fail', test(rules.GLOBAL.checkIdentityUnicity, blocks.EXISTING_UID, {
+    getWrittenIdtyByUID: () => Q({})
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Identity already used');
+  }));
+
+  it('a block with already used pubkey should fail', test(rules.GLOBAL.checkPubkeyUnicity, blocks.EXISTING_PUBKEY, {
+    getWrittenIdtyByPubkey: () => Q({})
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Pubkey already used');
+  }));
+
+  it('a block with too early certification replay should fail', test(rules.GLOBAL.checkCertificationsDelayIsRespected, blocks.TOO_EARLY_CERTIFICATION_REPLAY, {
+    getPreviousLinks: (from, to) => {
+      if (from == 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU'
+        && to == 'CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') {
+        // Exactly 1 second remaining
+        return Q({ timestamp: '1380218401' });
+      }
+      return Q(null);
+    }
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('A similar certification is already active');
+  }));
+
+  it('a block with kicked members not written under Excluded field should fail', test(rules.GLOBAL.checkKickedMembersAreExcluded, blocks.KICKED_NOT_EXCLUDED, {
+    getToBeKicked: () => Q([{}])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('All kicked members must be present under Excluded members');
+  }));
+
+  it('a block with kicked members well written under Excluded field should succeed', test(rules.GLOBAL.checkKickedMembersAreExcluded, blocks.KICKED_EXCLUDED, {
+    getToBeKicked: () => Q([
+      { pubkey: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' },
+      { pubkey: 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU' }
+    ])
+  }, function (err) {
+    should.not.exist(err);
+  }));
+  it('a block with kicked members not well written under Excluded field should fail', test(rules.GLOBAL.checkKickedMembersAreExcluded, blocks.KICKED_EXCLUDED, {
+    getToBeKicked: () => Q([
+      { pubkey: 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' },
+      { pubkey: 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU' },
+      { pubkey: 'D2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU' }
+    ])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('All kicked members must be present under Excluded members');
+  }));
+
+  it('a block with wrong members count should fail', test(rules.GLOBAL.checkMembersCountIsGood, blocks.WRONG_MEMBERS_COUNT, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong members count');
+  }));
+
+  it('a block not starting with a leading zero should fail', test(rules.GLOBAL.checkProofOfWork, blocks.NO_LEADING_ZERO, {
+    bcContext: {
+      getIssuerPersonalizedDifficulty: () => Q(8)
+    }
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong proof-of-work level: given 0 zeros and \'F\', required was 0 zeros and an hexa char between [0-7]');
+  }));
+
+  it('a block requiring 2 leading zeros but providing less should fail', test(rules.GLOBAL.checkProofOfWork, blocks.REQUIRES_7_LEADING_ZEROS, {
+    bcContext: {
+      getIssuerPersonalizedDifficulty: () => Q(12)
+    }
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong proof-of-work level: given 0 zeros and \'B\', required was 0 zeros and an hexa char between [0-3]');
+  }));
+
+  it('a block requiring 1 leading zeros but providing less should fail', test(rules.GLOBAL.checkProofOfWork, blocks.REQUIRES_6_LEADING_ZEROS, {
+    bcContext: {
+      getIssuerPersonalizedDifficulty: () => Q(8)
+    }
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong proof-of-work level: given 0 zeros and \'8\', required was 0 zeros and an hexa char between [0-7]');
+  }));
+
+  it('a block requiring 1 leading zeros as first block of newcomer should succeed', test(rules.GLOBAL.checkProofOfWork, blocks.FIRST_BLOCK_OF_NEWCOMER, {
+    bcContext: {
+      getIssuerPersonalizedDifficulty: () => Q(1)
+    }
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block requiring 40 leading zeros as second block of newcomer should fail', test(rules.GLOBAL.checkProofOfWork, blocks.SECOND_BLOCK_OF_NEWCOMER, {
+    bcContext: {
+      getIssuerPersonalizedDifficulty: () => Q(160)
+    }
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong proof-of-work level: given 0 zeros and \'F\', required was 10 zeros and an hexa char between [0-9A-F]');
+  }));
+
+  it('a root block should not fail for time reason', test(rules.GLOBAL.checkTimes, blocks.WRONG_ROOT_DATES, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block with wrong median for an odd number of blocks should fail', test(rules.GLOBAL.checkTimes, blocks.WRONG_MEDIAN_TIME_ODD, {
+    getBlocksBetween: () => Q([{time: 1},{time: 12}])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong MedianTime');
+  }));
+
+  it('a block with wrong median for an even number of blocks should fail', test(rules.GLOBAL.checkTimes, blocks.WRONG_MEDIAN_TIME_EVEN, {
+    getBlocksBetween: () => Q([{time: 1},{time: 12}])
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Wrong MedianTime');
+  }));
+
+  it('a block whose median time is correct (odd) should pass', test(rules.GLOBAL.checkTimes, blocks.GOOD_MEDIAN_TIME_ODD, {
+    getBlocksBetween: () => {
+      let times = [];
+      for (let i = 0; i < 103; i++)
+        times.push({ time: 161 });
+      return Q(times);
+    }
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block whose median time is correct (even) should pass', test(rules.GLOBAL.checkTimes, blocks.GOOD_MEDIAN_TIME_EVEN, {
+    getBlocksBetween: () => {
+      let times = [];
+      for (let i = 0; i < 104; i++)
+        times.push({ time: 162 });
+      return Q(times);
+    }
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a root block with Universal Dividend should fail', test(rules.GLOBAL.checkUD, blocks.ROOT_BLOCK_WITH_UD, {
+    lastUDBlock: () => Q(null),
+    getBlock: () => Q(null),
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Root block cannot have UniversalDividend field');
+  }));
+
+  it('first block with Universal Dividend should not happen before root time + dt', test(rules.GLOBAL.checkUD, blocks.FIRST_UD_BLOCK_WITH_UD_THAT_SHOULDNT, {
+    lastUDBlock: () => Q(null),
+    getBlock: () => Q({ hash: 'E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855', medianTime: 1411773000, powMin: 1 }),
+    getCurrentBlockOrNull: () => Q({ number: 19, time: 1411773000, medianTime: 1411773000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('This block cannot have UniversalDividend');
+  }));
+
+  it('first block with Universal Dividend should happen on root time + dt', test(rules.GLOBAL.checkUD, blocks.FIRST_UD_BLOCK_WITH_UD_THAT_SHOULD, {
+    lastUDBlock: () => Q(null),
+    getBlock: () => Q({ hash: 'E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855', medianTime: 1411773000, powMin: 1 }),
+    getCurrentBlockOrNull: () => Q({ number: 19, time: 1411773000, medianTime: 1411773000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Block must have a UniversalDividend field');
+  }));
+
+  it('a block without Universal Dividend whereas it have to have one should fail', test(rules.GLOBAL.checkUD, blocks.UD_BLOCK_WIHTOUT_UD, {
+    lastUDBlock: () => Q(null),
+    getBlock: () => Q({ hash: 'E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855', medianTime: 1411773000, powMin: 1 }),
+    getCurrentBlockOrNull: () => Q({ number: 19, time: 1411773000, medianTime: 1411773000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Block must have a UniversalDividend field');
+  }));
+
+  it('a block with wrong (version 2) Universal Dividend value should fail', test(rules.GLOBAL.checkUD, blocks.BLOCK_WITH_WRONG_UD, {
+    lastUDBlock: () => Q({ UDTime: 1411776900, medianTime: 1411776900, monetaryMass: 3620 * 10000, dividend: 110, unitbase: 4 }),
+    getBlock: () => Q(),
+    getCurrentBlockOrNull: () => Q({ time: 1411777000, medianTime: 1411777000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('UniversalDividend must be equal to 121');
+  }));
+
+  it('a block with wrong (version 3) Universal Dividend value should fail', test(rules.GLOBAL.checkUD, blocks.BLOCK_WITH_WRONG_UD_V3, {
+    lastUDBlock: () => Q({ UDTime: 1411776900, medianTime: 1411776900, dividend: 110, unitbase: 4 }),
+    getBlock: () => Q(),
+    getCurrentBlockOrNull: () => Q({ time: 1411777000, medianTime: 1411777000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('UniversalDividend must be equal to 121');
+  }));
+
+  it('a block with wrong UnitBase value should fail', test(rules.GLOBAL.checkUD, blocks.BLOCK_WITH_WRONG_UNIT_BASE, {
+    lastUDBlock: () => Q({ UDTime: 1411777000, medianTime: 1411777000, monetaryMass: 12345678900, dividend: 100, unitbase: 2 }),
+    getBlock: () => Q(),
+    getCurrentBlockOrNull: () => Q({ time: 1411777000, medianTime: 1411777000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('UnitBase must be equal to 3');
+  }));
+
+  it('a block without UD with wrong UnitBase value should fail', test(rules.GLOBAL.checkUD, blocks.BLOCK_WITH_WRONG_UNIT_BASE_NO_UD, {
+    lastUDBlock: () => Q({ UDTime: 1411777000, medianTime: 1411777000, monetaryMass: 12345678900, dividend: 100, unitbase: 8 }),
+    getBlock: () => Q(),
+    getCurrentBlockOrNull: () => Q({ time: 1411777000, medianTime: 1411777000, unitbase: 5 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('UnitBase must be equal to previous unit base = 5');
+  }));
+
+  it('a root block with unlegitimated Universal Dividend presence should fail', test(rules.GLOBAL.checkUD, blocks.BLOCK_UNLEGITIMATE_UD, {
+    lastUDBlock: () => Q({ UDTime: 1411777000, medianTime: 1411777000, monetaryMass: 3620 * 10000, dividend: 110, unitbase: 4 }),
+    getBlock: () => Q(),
+    getCurrentBlockOrNull: () => Q({ time: 1411777000, medianTime: 1411777000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('This block cannot have UniversalDividend');
+  }));
+
+  it('a root block with unlegitimated Universal Dividend presence should fail', test(rules.GLOBAL.checkUD, blocks.BLOCK_UNLEGITIMATE_UD_2, {
+    lastUDBlock: () => Q({ UDTime: 1411777000, medianTime: 1411777000, monetaryMass: 3620 * 10000, dividend: 110, unitbase: 4 }),
+    getBlock: () => Q(),
+    getCurrentBlockOrNull: () => Q({ time: 1411777000, medianTime: 1411777000 })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('This block cannot have UniversalDividend');
+  }));
+
+
+  it('a block without transactions should pass', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITHOUT_TRANSACTIONS, {
+    getCurrentBlockOrNull: () => Q(null)
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block with good transactions should pass', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITH_GOOD_TRANSACTIONS, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 5 }),
+    getSource: (id, noffset) => {
+      if (id == '6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3' && noffset == 4)   return Q({ amount: 0,   base: 4 });
+      if (id == '3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435' && noffset == 10)  return Q({ amount: 0,   base: 3 });
+      if (id == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' && noffset == 46)                      return Q({ amount: 0,   base: 4 });
+      if (id == 'A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956' && noffset == 66)  return Q({ amount: 235, base: 4 });
+      if (id == '67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B' && noffset == 176) return Q({ amount: 0,   base: 4 });
+      return Q(null);
+    }
+  }, function (err) {
+    should.not.exist(err);
+  }));
+
+  it('a block with wrong transaction sum should fail', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITH_WRONG_TRANSACTION_SUMS, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 5 }),
+    getSource: (id, noffset) => {
+      if (id == '6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3' && noffset == 4)   return Q({ amount: 0,   base: 4 });
+      if (id == '3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435' && noffset == 10)  return Q({ amount: 0,   base: 3 });
+      if (id == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' && noffset == 46)                      return Q({ amount: 0,   base: 4 });
+      if (id == 'A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956' && noffset == 66)  return Q({ amount: 235, base: 4 });
+      if (id == '67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B' && noffset == 176) return Q({ amount: 0,   base: 4 });
+      return Q(null);
+    }
+  }, function (err) {
+    should.exist(err);
+    err.uerr.message.should.equal('Sum of inputs must equal sum of outputs');
+  }));
+
+  it('a block with wrong transaction unit bases should fail', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITH_WRONG_TRANSACTION_SUMS, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 5 }),
+    getSource: (id, noffset) => {
+      if (id == '6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3' && noffset == 4)   return Q({ amount: 0,   base: 4 });
+      if (id == '3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435' && noffset == 10)  return Q({ amount: 0,   base: 3 });
+      if (id == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' && noffset == 46)                      return Q({ amount: 0,   base: 4 });
+      if (id == 'A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956' && noffset == 66)  return Q({ amount: 235, base: 4 });
+      if (id == '67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B' && noffset == 176) return Q({ amount: 0,   base: 4 });
+      return Q(null);
+    }
+  }, function (err) {
+    should.exist(err);
+    err.uerr.message.should.equal('Sum of inputs must equal sum of outputs');
+  }));
+
+  it('a block with whose transaction has too high unit bases should fail', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITH_WRONG_TRANSACTION_UNIT_BASES, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 2 }),
+    getSource: (id, noffset) => {
+      if (id == '6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3' && noffset == 4)   return Q({ amount: 0,   base: 4 });
+      if (id == '3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435' && noffset == 10)  return Q({ amount: 0,   base: 3 });
+      if (id == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' && noffset == 46)                      return Q({ amount: 0,   base: 4 });
+      if (id == 'A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956' && noffset == 66)  return Q({ amount: 235, base: 4 });
+      if (id == '67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B' && noffset == 176) return Q({ amount: 0,   base: 4 });
+      return Q(null);
+    }
+  }, function (err) {
+    should.exist(err);
+    err.uerr.message.should.equal('Wrong unit base for outputs');
+  }));
+
+  it('a block with unavailable UD source should fail', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITH_UNAVAILABLE_UD_SOURCE, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 5 }),
+    getSource: (id, noffset) => {
+      if (id == '6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3' && noffset == 4)   return Q({ amount: 0,   base: 4 });
+      if (id == '3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435' && noffset == 10)  return Q({ amount: 0,   base: 3 });
+      if (id == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' && noffset == 46)                      return Q({ amount: 0,   base: 4 });
+      if (id == 'A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956' && noffset == 66)  return Q({ amount: 235, base: 4 });
+      if (id == '67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B' && noffset == 176) return Q({ amount: 0,   base: 4 });
+      return Q(null);
+    }
+  }, function (err) {
+    should.exist(err);
+    err.should.have.property('uerr').property('message').equal('Source already consumed');
+  }));
+
+  it('a block with unavailable TX source should fail', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_WITH_UNAVAILABLE_TX_SOURCE, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 5 }),
+    getSource: (id, noffset) => {
+      if (id == '6991C993631BED4733972ED7538E41CCC33660F554E3C51963E2A0AC4D6453D3' && noffset == 4)   return Q({ amount: 0,   base: 4 });
+      if (id == '3A09A20E9014110FD224889F13357BAB4EC78A72F95CA03394D8CCA2936A7435' && noffset == 10)  return Q({ amount: 0,   base: 3 });
+      if (id == 'HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd' && noffset == 46)                      return Q({ amount: 0,   base: 4 });
+      if (id == 'A0D9B4CDC113ECE1145C5525873821398890AE842F4B318BD076095A23E70956' && noffset == 66)  return Q({ amount: 235, base: 4 });
+      if (id == '67F2045B5318777CC52CD38B424F3E40DDA823FA0364625F124BABE0030E7B5B' && noffset == 176) return Q({ amount: 0,   base: 4 });
+      return Q(null);
+    }
+  }, function (err) {
+    should.exist(err);
+    err.should.have.property('uerr').property('message').equal('Source already consumed');
+  }));
+
+  it('a block with a too high unit base should fail', test(rules.GLOBAL.checkSourcesAvailability, blocks.BLOCK_TX_V3_TOO_HIGH_OUTPUT_BASE, {
+    getCurrentBlockOrNull: () => Q({ unitbase: 3 }),
+    getSource: () => Q({ base: 1, amount: 10 })
+  }, function (err) {
+    should.exist(err);
+    err.should.have.property('uerr').property('message').equal('Wrong unit base for outputs');
+  }));
+
+  it('a block with an unknown member revoked should fail', test(rules.GLOBAL.checkRevoked, blocks.BLOCK_UNKNOWN_REVOKED, {
+    getWrittenIdtyByPubkey: () => Q(null)
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('A pubkey who was never a member cannot be revoked');
+  }));
+
+  it('a block with a yet revoked identity should fail', test(rules.GLOBAL.checkRevoked, blocks.BLOCK_WITH_YET_REVOKED, {
+    getWrittenIdtyByPubkey: () => Q({ revoked: true })
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('A revoked identity cannot be revoked again');
+  }));
+
+  it('a block with a wrong revocation signature should fail', test(rules.GLOBAL.checkRevoked, blocks.BLOCK_WITH_WRONG_REVOCATION_SIG, {
+    getWrittenIdtyByPubkey: () => Q({})
+  }, function (err) {
+    should.exist(err);
+    err.message.should.equal('Revocation signature must match');
+  }));
+});
+
+function test (rule, raw, dal, callback) {
+  return function() {
+    return co(function *() {
+      let obj = parser.syncWrite(raw);
+      let block = new Block(obj);
+      if (rule == rules.GLOBAL.checkProofOfWork || rule == rules.GLOBAL.checkVersion) {
+        yield rule(block, dal.bcContext);
+      } else if (rule.length == 2) {
+        yield rule(block, dal);
+      } else {
+        yield rule(block, conf, dal);
+      }
+    })
+      .then(callback).catch(callback);
+  };
+}
+
+function validate (raw, dal, bcContext, callback) {
+  var block;
+  return function() {
+    return Q.Promise(function(resolve, reject){
+      async.waterfall([
+        function (next){
+          block = new Block(parser.syncWrite(raw));
+          rules.CHECK.ASYNC.ALL_GLOBAL(block, conf, dal, bcContext, next);
+        }
+      ], function (err) {
+        err && console.error(err.stack);
+        err ? reject(err) : resolve();
+      });
+    })
+      .then(callback).catch(callback);
+  };
+}
diff --git a/test/fast/block_local.js b/test/fast/block_local.js
new file mode 100644
index 0000000000000000000000000000000000000000..c3a796da1544fb1a9f7c2bc2f5fd40348f3c89a0
--- /dev/null
+++ b/test/fast/block_local.js
@@ -0,0 +1,105 @@
+"use strict";
+const co             = require('co');
+const should         = require('should');
+const parsers        = require('duniter-common').parsers;
+const rules          = require('../../app/lib/rules')
+const blocks         = require('../data/blocks.js');
+const parser         = parsers.parseBlock;
+const Block          = require('duniter-common').document.Block
+
+const conf = {
+
+  sigQty: 1,
+  powZeroMin: 1,
+  powPeriod: 18,
+  incDateMin: 10,
+  avgGenTime: 60,
+  medianTimeBlocks: 20,
+  dt: 100,
+  ud0: 100,
+  c: 0.1
+}
+
+describe("Block local coherence", function(){
+
+  it('a valid block should be well formatted',                                                        test(rules.ALIAS.ALL_LOCAL_BUT_POW_AND_SIGNATURE, blocks.VALID_ROOT));
+
+  describe("should be rejected", function(){
+
+    it('if wrong signature block',                                                                    test(rules.LOCAL.checkBlockSignature, blocks.WRONG_SIGNATURE, 'Block\'s signature must match'));
+    it('if root block does not have Parameters',                                                      test(rules.LOCAL.checkParameters, blocks.ROOT_WITHOUT_PARAMETERS, 'Parameters must be provided for root block'));
+    it('if proof-of-work does not match PoWMin field',                                                test(rules.LOCAL.checkProofOfWork, blocks.WRONG_PROOF_OF_WORK, 'Not a proof-of-work'));
+    it('if non-root has Parameters',                                                                  test(rules.LOCAL.checkParameters, blocks.NON_ROOT_WITH_PARAMETERS, 'Parameters must not be provided for non-root block'));
+    it('if root block has PreviousHash',                                                              test(rules.LOCAL.checkPreviousHash, blocks.ROOT_WITH_PREVIOUS_HASH, 'PreviousHash must not be provided for root block'));
+    it('if root block has PreviousIssuer',                                                            test(rules.LOCAL.checkPreviousIssuer, blocks.ROOT_WITH_PREVIOUS_ISSUER, 'PreviousIssuer must not be provided for root block'));
+    it('if non-root block does not have PreviousHash',                                                test(rules.LOCAL.checkPreviousHash, blocks.NON_ROOT_WITHOUT_PREVIOUS_HASH, 'PreviousHash must be provided for non-root block'));
+    it('if non-root block does not have PreviousIssuer',                                              test(rules.LOCAL.checkPreviousIssuer, blocks.NON_ROOT_WITHOUT_PREVIOUS_ISSUER, 'PreviousIssuer must be provided for non-root block'));
+    it('a V2 block with Dividend must have UnitBase field',                                           test(rules.LOCAL.checkUnitBase, blocks.UD_BLOCK_WIHTOUT_BASE, 'Document has unkown fields or wrong line ending format'));
+    it('a V3 root block must have UnitBase field',                                                    test(rules.LOCAL.checkUnitBase, blocks.V3_ROOT_BLOCK_NOBASE, 'Document has unkown fields or wrong line ending format'));
+    it('a V3 root block must have UnitBase field equal 0',                                            test(rules.LOCAL.checkUnitBase, blocks.V3_ROOT_BLOCK_POSITIVE_BASE, 'UnitBase must equal 0 for root block'));
+    it('a block with wrong date (in past)',                                                           test(rules.LOCAL.checkBlockTimes, blocks.WRONG_DATE_LOWER, 'A block must have its Time between MedianTime and MedianTime + 1440'));
+    it('a block with wrong date (in future, but too far)',                                            test(rules.LOCAL.checkBlockTimes, blocks.WRONG_DATE_HIGHER_BUT_TOO_HIGH, 'A block must have its Time between MedianTime and MedianTime + 1440'));
+    it('a root block with different time & medianTime should fail',                                   test(rules.LOCAL.checkBlockTimes, blocks.WRONG_ROOT_TIMES, 'Root block must have Time equal MedianTime'));
+    it('a block with good date',                                                                      test(rules.LOCAL.checkBlockTimes, blocks.GOOD_DATE_HIGHER));
+    it('Block cannot contain wrongly signed identities',                                              test(rules.LOCAL.checkIdentitiesSignature, blocks.WRONGLY_SIGNED_IDENTITIES, 'Identity\'s signature must match'));
+    it('block with colliding uids in identities',                                                     test(rules.LOCAL.checkIdentitiesUserIDConflict, blocks.COLLIDING_UIDS, 'Block must not contain twice same identity uid'));
+    it('a block with colliding pubkeys in identities',                                                test(rules.LOCAL.checkIdentitiesPubkeyConflict, blocks.COLLIDING_PUBKEYS, 'Block must not contain twice same identity pubkey'));
+    it('a block with identities not matchin joins',                                                   test(rules.LOCAL.checkIdentitiesMatchJoin, blocks.WRONG_IDTY_MATCH_JOINS, 'Each identity must match a newcomer line with same userid and certts'));
+    it('Block cannot contain wrongly signed join',                                                    test(rules.LOCAL.checkMembershipsSignature, blocks.WRONGLY_SIGNED_JOIN, 'Membership\'s signature must match'));
+    it('Block cannot contain wrongly signed active',                                                  test(rules.LOCAL.checkMembershipsSignature, blocks.WRONGLY_SIGNED_ACTIVE, 'Membership\'s signature must match'));
+    it('Block cannot contain wrongly signed leave',                                                   test(rules.LOCAL.checkMembershipsSignature, blocks.WRONGLY_SIGNED_LEAVE, 'Membership\'s signature must match'));
+    it('Block cannot contain a same pubkey more than once in joiners',                                test(rules.LOCAL.checkPubkeyUnicity, blocks.MULTIPLE_JOINERS, 'Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded'));
+    it('Block cannot contain a same pubkey more than once in actives',                                test(rules.LOCAL.checkPubkeyUnicity, blocks.MULTIPLE_ACTIVES, 'Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded'));
+    it('Block cannot contain a same pubkey more than once in leavers',                                test(rules.LOCAL.checkPubkeyUnicity, blocks.MULTIPLE_LEAVES, 'Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded'));
+    it('Block cannot contain a same pubkey more than once in excluded',                               test(rules.LOCAL.checkPubkeyUnicity, blocks.MULTIPLE_EXCLUDED, 'Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded'));
+    it('Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded', test(rules.LOCAL.checkPubkeyUnicity, blocks.MULTIPLE_OVER_ALL, 'Block cannot contain a same pubkey more than once in joiners, actives, leavers and excluded'));
+    it('Block cannot have revoked key in joiners,actives,leavers',                                    test(rules.LOCAL.checkMembershipUnicity, blocks.REVOKED_WITH_MEMBERSHIPS, 'Unicity constraint PUBLIC_KEY on MINDEX is not respected'));
+    it('Block cannot have revoked key duplicates',                                                    test(rules.LOCAL.checkRevokedUnicity, blocks.REVOKED_WITH_DUPLICATES, 'A single revocation per member is allowed'));
+    it('Block revoked keys must be in excluded',                                                      test(rules.LOCAL.checkRevokedAreExcluded, blocks.REVOKED_NOT_IN_EXCLUDED, 'A revoked member must be excluded'));
+    it('Block cannot contain 2 certifications from same issuer',                                      test(rules.LOCAL.checkCertificationOneByIssuer, blocks.MULTIPLE_CERTIFICATIONS_FROM_SAME_ISSUER, 'Block cannot contain two certifications from same issuer'));
+    it('Block cannot contain identical certifications',                                               test(rules.LOCAL.checkCertificationUnicity, blocks.IDENTICAL_CERTIFICATIONS, 'Block cannot contain identical certifications (A -> B)'));
+    it('Block cannot contain certifications concerning a leaver',                                     test(rules.LOCAL.checkCertificationIsntForLeaverOrExcluded, blocks.LEAVER_WITH_CERTIFICATIONS, 'Block cannot contain certifications concerning leavers or excluded members'));
+    it('Block cannot contain certifications concerning an excluded member',                           test(rules.LOCAL.checkCertificationIsntForLeaverOrExcluded, blocks.EXCLUDED_WITH_CERTIFICATIONS, 'Block cannot contain certifications concerning leavers or excluded members'));
+    it('Block cannot contain transactions without issuers (1)',                                       test(rules.LOCAL.checkTxIssuers, blocks.TRANSACTION_WITHOUT_ISSUERS, 'A transaction must have at least 1 issuer'));
+    it('Block cannot contain transactions without issuers (2)',                                       test(rules.LOCAL.checkTxSources, blocks.TRANSACTION_WITHOUT_SOURCES, 'A transaction must have at least 1 source'));
+    it('Block cannot contain transactions without issuers (3)',                                       test(rules.LOCAL.checkTxRecipients, blocks.TRANSACTION_WITHOUT_RECIPIENT, 'A transaction must have at least 1 recipient'));
+    it('Block cannot contain transactions with identical sources in one transaction',                 test(rules.LOCAL.checkTxSources, blocks.TRANSACTION_WITH_DUPLICATED_SOURCE_SINGLE_TX, 'It cannot exist 2 identical sources for transactions inside a given block'));
+    it('Block cannot contain transactions with identical sources in a pack of transactions',          test(rules.LOCAL.checkTxSources, blocks.TRANSACTION_WITH_DUPLICATED_SOURCE_MULTIPLE_TX, 'It cannot exist 2 identical sources for transactions inside a given block'));
+    it('Block cannot contain transactions with empty output conditions',                              test(rules.LOCAL.checkTxRecipients, blocks.TRANSACTION_WITH_EMPTY_TX_CONDITIONS, 'Empty conditions are forbidden'));
+    it('Block cannot contain transactions with wrong total',                                          test(rules.LOCAL.checkTxAmounts, blocks.TRANSACTION_WRONG_TOTAL, 'Transaction inputs sum must equal outputs sum'));
+    it('Block cannot contain transactions with wrong base transformation',                            test(rules.LOCAL.checkTxAmounts, blocks.TRANSACTION_WRONG_TRANSFORM, 'Transaction output base amount does not equal previous base deltas'));
+    it('Block cannot contain transactions with unexisting lower base in sources',                     test(rules.LOCAL.checkTxAmounts, blocks.TRANSACTION_WRONG_TRANSFORM_LOW_BASE, 'Transaction output base amount does not equal previous base deltas'));
+    it('Block cannot contain transactions with more than 100 lines',                                  test(rules.LOCAL.checkTxLen, blocks.TRANSACTION_TOO_LONG, 'A transaction has a maximum size of 100 lines'));
+    it('Block cannot contain transactions with a too large output',                                   test(rules.LOCAL.checkTxLen, blocks.OUTPUT_TOO_LONG, 'A transaction output has a maximum size of 2000 characters'));
+    it('Block cannot contain transactions with a too large unlock',                                   test(rules.LOCAL.checkTxLen, blocks.UNLOCK_TOO_LONG, 'A transaction unlock has a maximum size of 2000 characters'));
+    it('Block cannot be refused with a good V3 transaction',                                          test(rules.LOCAL.checkTxAmounts, blocks.TRANSACTION_V3_GOOD_AMOUNTS));
+    it('Block cannot contain transactions with wrong signatures',                                     test(rules.LOCAL.checkTxSignature, blocks.TRANSACTION_WITH_WRONG_SIGNATURES, 'Signature from a transaction must match'));
+  });
+  
+});
+
+
+function test (rule, raw, expectedMessage) {
+  return () => co(function *() {
+    try {
+      let obj = parser.syncWrite(raw);
+      let block = Block.fromJSON(obj);
+      yield rule(block, conf); // conf parameter is not always used
+      if (expectedMessage) {
+        throw 'Test should have thrown an error';
+      }
+    } catch (e) {
+      if (!expectedMessage) {
+        console.error(e.stack || e);
+      }
+      if (e.uerr) {
+        // This is a controlled error
+        e.uerr.message.should.equal(expectedMessage);
+      } else {
+        e.message.should.equal(expectedMessage);
+        // Display non wrapped errors (wrapped error is an error in constants.js)
+        // console.error(e.stack || e);
+      }
+    }
+  });
+}
diff --git a/test/fast/protocol-brg106-number.js b/test/fast/protocol-brg106-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..803df1873abe2ee773f1be140586dee0a9577d08
--- /dev/null
+++ b/test/fast/protocol-brg106-number.js
@@ -0,0 +1,89 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+describe("Protocol BR_G106 - Garbaging", function(){
+
+  it('An account with balance < 1,00 should be cleaned up', () => co(function*(){
+    const balances = {
+      pubkeyA: { balance: 103 },
+      pubkeyB: { balance: 11 + 22 + 68 }, // 101
+      pubkeyC: { balance: 100 },
+      pubkeyD: { balance: 0 },
+      pubkeyE: { balance: 0 }
+    }
+    const sources = {
+      pubkeyA: [ // 103
+        { amount: 103, base: 0, tx: 'A1', identifier: 'I1', pos: 0 }
+      ],
+      pubkeyB: [ // 104
+        { amount: 14, base: 0, tx: 'B1', identifier: 'I4', pos: 0 },
+        { amount: 22, base: 0, tx: 'B2', identifier: 'I10', pos: 0 },
+        { amount: 68, base: 0, tx: null, identifier: 'I11', pos: 0 } // UD
+      ],
+      pubkeyC: [ // 100
+        { amount: 100, base: 0, tx: 'C1', identifier: 'I8', pos: 0 }
+      ],
+      pubkeyD: [],
+      pubkeyE: []
+    }
+    const dal = {
+      getWallet: (conditions) => Promise.resolve(balances[conditions]),
+      sindexDAL: {
+        getAvailableForConditions: (conditions) => Promise.resolve(sources[conditions]),
+      }
+    };
+    const HEAD   = { unitBase: 0 };
+    const cleaning = yield indexer.ruleIndexGarbageSmallAccounts(HEAD, [
+      // A sends 3 to D --> A keeps 100
+      { op: 'UPDATE', conditions: 'pubkeyA', amount: 103, base: 0, identifier: 'I1', pos: 0 },
+      { op: 'CREATE', conditions: 'pubkeyA', amount: 100, base: 0, identifier: 'I2', pos: 0 },
+      { op: 'CREATE', conditions: 'pubkeyD', amount: 3,   base: 0, identifier: 'I3', pos: 0 },
+      // B sends 5 to D --> B keeps 99
+      { op: 'UPDATE', conditions: 'pubkeyB', amount: 14,  base: 0, identifier: 'I4', pos: 0 },
+      { op: 'CREATE', conditions: 'pubkeyB', amount: 9,   base: 0, identifier: 'I5', pos: 0 },
+      { op: 'CREATE', conditions: 'pubkeyD', amount: 5,   base: 0, identifier: 'I6', pos: 0 },
+      { op: 'UPDATE', conditions: 'pubkeyD', amount: 5,   base: 0, identifier: 'I6', pos: 0 }, // |-- Chaining transaction
+      { op: 'CREATE', conditions: 'pubkeyD', amount: 5,   base: 0, identifier: 'I7', pos: 0 }, // |-- Chaining transaction
+      // C sends 100 to E --> C keeps 0
+      { op: 'UPDATE', conditions: 'pubkeyC', amount: 100, base: 0, identifier: 'I8', pos: 0 },
+      { op: 'CREATE', conditions: 'pubkeyE', amount: 100, base: 0, identifier: 'I9', pos: 0 },
+      ], dal);
+    cleaning.should.have.length(5);
+    cleaning[0].should.have.property('identifier').equal('I3');
+    cleaning[0].should.have.property('amount').equal(3);
+    cleaning[0].should.have.property('base').equal(0);
+    cleaning[0].should.have.property('tx').equal(undefined);
+    cleaning[0].should.have.property('consumed').equal(true);
+    cleaning[0].should.have.property('op').equal('UPDATE');
+
+    cleaning[1].should.have.property('identifier').equal('I7');
+    cleaning[1].should.have.property('amount').equal(5);
+    cleaning[1].should.have.property('base').equal(0);
+    cleaning[1].should.have.property('tx').equal(undefined);
+    cleaning[1].should.have.property('consumed').equal(true);
+    cleaning[1].should.have.property('op').equal('UPDATE');
+
+    cleaning[2].should.have.property('identifier').equal('I5');
+    cleaning[2].should.have.property('amount').equal(9);
+    cleaning[2].should.have.property('base').equal(0);
+    cleaning[2].should.have.property('tx').equal(undefined);
+    cleaning[2].should.have.property('consumed').equal(true);
+    cleaning[2].should.have.property('op').equal('UPDATE');
+
+    cleaning[3].should.have.property('identifier').equal('I10');
+    cleaning[3].should.have.property('amount').equal(22);
+    cleaning[3].should.have.property('base').equal(0);
+    cleaning[3].should.have.property('tx').equal('B2');
+    cleaning[3].should.have.property('consumed').equal(true);
+    cleaning[3].should.have.property('op').equal('UPDATE');
+
+    cleaning[4].should.have.property('identifier').equal('I11');
+    cleaning[4].should.have.property('amount').equal(68);
+    cleaning[4].should.have.property('base').equal(0);
+    cleaning[4].should.have.property('tx').equal(null);
+    cleaning[4].should.have.property('consumed').equal(true);
+    cleaning[4].should.have.property('op').equal('UPDATE');
+  }));
+});
diff --git a/test/fast/protocol-brg107-udEffectiveTime.js b/test/fast/protocol-brg107-udEffectiveTime.js
new file mode 100644
index 0000000000000000000000000000000000000000..b4487b70d0a28981ab8c6420b4f94beea448fecb
--- /dev/null
+++ b/test/fast/protocol-brg107-udEffectiveTime.js
@@ -0,0 +1,40 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+describe("Protocol BR_G107 - udReevalTime", function(){
+
+  it('root block good udReevalTime', () => co(function*(){
+    const conf   = { udReevalTime0: 1500000000 };
+    const HEAD_1 = null;
+    const HEAD   = { number: 0 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udReevalTime.should.equal(conf.udReevalTime0);
+  }));
+
+  it('block with medianTime < udReevalTime', () => co(function*(){
+    const conf   = { dt: 100, dtReeval: 20 };
+    const HEAD_1 = { number: 59, udReevalTime: 1500000900 };
+    const HEAD   = { number: 60, medianTime:   1500000899 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udReevalTime.should.equal(HEAD_1.udReevalTime);
+  }));
+
+  it('block with medianTime == udReevalTime', () => co(function*(){
+    const conf   = { dt: 100, dtReeval: 20 };
+    const HEAD_1 = { number: 59, udReevalTime: 1500000900 };
+    const HEAD   = { number: 60, medianTime:   1500000900 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udReevalTime.should.equal(HEAD_1.udReevalTime + conf.dtReeval);
+  }));
+
+  it('block with medianTime > udReevalTime', () => co(function*(){
+    const conf   = { dt: 100, dtReeval: 20 };
+    const HEAD_1 = { number: 59, udReevalTime: 1500000900 };
+    const HEAD   = { number: 60, medianTime:   1500000901 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udReevalTime.should.equal(HEAD_1.udReevalTime + conf.dtReeval);
+  }));
+
+});
diff --git a/test/fast/protocol-brg11-udTime.js b/test/fast/protocol-brg11-udTime.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6745aeec2204cc5ed5540f49f7abd0d18d6a85c
--- /dev/null
+++ b/test/fast/protocol-brg11-udTime.js
@@ -0,0 +1,40 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+describe("Protocol BR_G11 - udTime", function(){
+
+  it('root block good udTime', () => co(function*(){
+    const conf   = { udTime0: 1500000000 };
+    const HEAD_1 = null;
+    const HEAD   = { number: 0 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(conf.udTime0);
+  }));
+
+  it('block with medianTime < udTime', () => co(function*(){
+    const conf   = { dt: 100 };
+    const HEAD_1 = { number: 59, udTime:     1500000900 };
+    const HEAD   = { number: 60, medianTime: 1500000899 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(HEAD_1.udTime);
+  }));
+
+  it('block with medianTime == udTime', () => co(function*(){
+    const conf   = { dt: 100 };
+    const HEAD_1 = { number: 59, udTime:     1500000900 };
+    const HEAD   = { number: 60, medianTime: 1500000900 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(HEAD_1.udTime + conf.dt);
+  }));
+
+  it('block with medianTime > udTime', () => co(function*(){
+    const conf   = { dt: 100 };
+    const HEAD_1 = { number: 59, udTime:     1500000900 };
+    const HEAD   = { number: 60, medianTime: 1500000901 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(HEAD_1.udTime + conf.dt);
+  }));
+
+});
diff --git a/test/fast/protocol-brg13-dividend.js b/test/fast/protocol-brg13-dividend.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd05682445fd7077f02b596a1fc87c1dfea7e896
--- /dev/null
+++ b/test/fast/protocol-brg13-dividend.js
@@ -0,0 +1,47 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+describe("Protocol BR_G13 - dividend", function(){
+
+  it('root block has no dividend', () => co(function*(){
+    const conf   = { udTime0: 1500000000, dt: 100 };
+    const HEAD_1 = null;
+    const HEAD   = { number: 0 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    indexer.prepareDividend(HEAD, HEAD_1, conf);
+    should.equal(HEAD.dividend, null);
+  }));
+
+  it('block with medianTime < udTime has no dividend', () => co(function*(){
+    const conf   = { dt: 100 };
+    const HEAD_1 = { number: 59, udTime:     1500000900 };
+    const HEAD   = { number: 60, medianTime: 1500000899 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    indexer.prepareDividend(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(HEAD_1.udTime);
+    should.equal(HEAD.dividend, null);
+  }));
+
+  it('block with medianTime == udTime', () => co(function*(){
+    const conf   = { dt: 100, dtReeval: 100, c: 0.0488 };
+    const HEAD_1 = { number: 59, udTime:     1500000900, udReevalTime: 1500000900, dividend: 100, mass: 18000, massReeval: 18000, unitBase: 1 };
+    const HEAD   = { number: 60, medianTime: 1500000900, membersCount: 3 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    indexer.prepareDividend(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(HEAD_1.udTime + conf.dt);
+    should.equal(HEAD.dividend, 102);
+  }));
+
+  it('block with medianTime > udTime', () => co(function*(){
+    const conf   = { dt: 100, dtReeval: 100, c: 0.0488 };
+    const HEAD_1 = { number: 59, udTime:     1500000900, udReevalTime: 1500000900, dividend: 100, mass: 18000, massReeval: 18000, unitBase: 1 };
+    const HEAD   = { number: 60, medianTime: 1500000901, membersCount: 3 };
+    indexer.prepareUDTime(HEAD, HEAD_1, conf);
+    indexer.prepareDividend(HEAD, HEAD_1, conf);
+    HEAD.udTime.should.equal(HEAD_1.udTime + conf.dt);
+    should.equal(HEAD.dividend, 102);
+  }));
+
+});
diff --git a/test/fast/protocol-brg49-version.js b/test/fast/protocol-brg49-version.js
new file mode 100644
index 0000000000000000000000000000000000000000..1121aedbc9a242606d7f8f00031bcbc5fc188c72
--- /dev/null
+++ b/test/fast/protocol-brg49-version.js
@@ -0,0 +1,34 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+const FAIL = false;
+const SUCCESS = true;
+
+describe("Protocol BR_G49 - Version", function(){
+
+  it('V13 following V12 should fail', () => co(function*(){
+    const HEAD_1 = { number: 17, version: 13 };
+    const HEAD   = { number: 18, version: 12 };
+    indexer.ruleVersion(HEAD, HEAD_1).should.equal(FAIL);
+  }));
+
+  it('V14 following V12 should fail', () => co(function*(){
+    const HEAD_1 = { number: 17, version: 14 };
+    const HEAD   = { number: 18, version: 12 };
+    indexer.ruleVersion(HEAD, HEAD_1).should.equal(FAIL);
+  }));
+
+  it('V13 following V14 should succeed', () => co(function*(){
+    const HEAD_1 = { number: 17, version: 13 };
+    const HEAD   = { number: 18, version: 14 };
+    indexer.ruleVersion(HEAD, HEAD_1).should.equal(SUCCESS);
+  }));
+
+  it('V13 following V15 should fail', () => co(function*(){
+    const HEAD_1 = { number: 17, version: 13 };
+    const HEAD   = { number: 18, version: 15 };
+    indexer.ruleVersion(HEAD, HEAD_1).should.equal(FAIL);
+  }));
+});
diff --git a/test/fast/protocol-brg50-blocksize.js b/test/fast/protocol-brg50-blocksize.js
new file mode 100644
index 0000000000000000000000000000000000000000..8f4951e88a2d401802512dec4a8951c6a0ddc3cf
--- /dev/null
+++ b/test/fast/protocol-brg50-blocksize.js
@@ -0,0 +1,55 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+const FAIL = false;
+const SUCCESS = true;
+
+describe("Protocol BR_G50 - Block size", function(){
+
+  it('2 for an AVG(10) should succeed', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 2, avgBlockSize: 10 };
+    indexer.ruleBlockSize(HEAD).should.equal(SUCCESS);
+  }));
+
+  it('400 for an AVG(10) should succeed', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 400, avgBlockSize: 10 };
+    indexer.ruleBlockSize(HEAD).should.equal(SUCCESS);
+  }));
+
+  it('499 for an AVG(10) should succeed', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 499, avgBlockSize: 10 };
+    indexer.ruleBlockSize(HEAD).should.equal(SUCCESS);
+  }));
+
+  it('500 for an AVG(10) should fail', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 500, avgBlockSize: 10 };
+    indexer.ruleBlockSize(HEAD).should.equal(FAIL);
+  }));
+
+  it('500 for an AVG(454) should fail', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 500, avgBlockSize: 454 };
+    indexer.ruleBlockSize(HEAD).should.equal(FAIL);
+  }));
+
+  it('500 for an AVG(455) should succeed', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 500, avgBlockSize: 455 };
+    indexer.ruleBlockSize(HEAD).should.equal(SUCCESS);
+  }));
+
+  it('1100 for an AVG(1000) should fail', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 1100, avgBlockSize: 1000 };
+    indexer.ruleBlockSize(HEAD).should.equal(FAIL);
+  }));
+
+  it('1100 for an AVG(1001) should succeed', () => co(function*(){
+    const HEAD   = { number: 24, bsize: 1100, avgBlockSize: 1001 };
+    indexer.ruleBlockSize(HEAD).should.equal(SUCCESS);
+  }));
+
+  it('1100 for block#0 should succeed', () => co(function*(){
+    const HEAD   = { number: 0, bsize: 1100, avgBlockSize: 0 };
+    indexer.ruleBlockSize(HEAD).should.equal(SUCCESS);
+  }));
+});
diff --git a/test/fast/protocol-brg51-number.js b/test/fast/protocol-brg51-number.js
new file mode 100644
index 0000000000000000000000000000000000000000..27e76e5aa3d7452c57e927bce7d1fece6217ef91
--- /dev/null
+++ b/test/fast/protocol-brg51-number.js
@@ -0,0 +1,67 @@
+"use strict";
+const co            = require('co');
+const should        = require('should');
+const indexer       = require('../../app/lib/indexer');
+
+const FAIL = false;
+const SUCCESS = true;
+
+describe("Protocol BR_G51 - Number", function(){
+
+  it('1 following 1 should fail', () => co(function*(){
+    const block  = { number: 1 };
+    const HEAD_1 = { number: 1 };
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(FAIL);
+  }));
+
+  it('1 following 0 should succeed', () => co(function*(){
+    const block  = { number: 1 };
+    const HEAD_1 = { number: 0 };
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(SUCCESS);
+  }));
+
+  it('0 following 0 should fail', () => co(function*(){
+    const block  = { number: 0 };
+    const HEAD_1 = { number: 0 };
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(FAIL);
+  }));
+
+  it('0 following nothing should succeed', () => co(function*(){
+    const block  = { number: 0 };
+    const HEAD_1 = null;
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(SUCCESS);
+  }));
+
+  it('4 following nothing should fail', () => co(function*(){
+    const block  = { number: 4 };
+    const HEAD_1 = null;
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(FAIL);
+  }));
+
+  it('4 following 2 should fail', () => co(function*(){
+    const block  = { number: 4 };
+    const HEAD_1 = { number: 2 };
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(FAIL);
+  }));
+
+  it('4 following 3 should succeed', () => co(function*(){
+    const block  = { number: 4 };
+    const HEAD_1 = { number: 3 };
+    const HEAD   = {};
+    indexer.prepareNumber(HEAD, HEAD_1);
+    indexer.ruleNumber(block, HEAD).should.equal(SUCCESS);
+  }));
+
+});
diff --git a/test/fast/v1.0-local-index.js b/test/fast/v1.0-local-index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2af4f3996904f56426f4ed4a5c9038b3d4468a1c
--- /dev/null
+++ b/test/fast/v1.0-local-index.js
@@ -0,0 +1,158 @@
+"use strict";
+
+const _       = require('underscore');
+const should  = require('should');
+const parsers = require('duniter-common').parsers;
+const indexer = require('../../app/lib/indexer');
+const constants = require('duniter-common').constants;
+
+const raw = "Version: 10\n" +
+  "Type: Block\n" +
+  "Currency: beta_brousouf\n" +
+  "Number: 10\n" +
+  "PoWMin: 1\n" +
+  "Time: 1411785481\n" +
+  "MedianTime: 1411776000\n" +
+  "UnitBase: 2\n" +
+  "Issuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+  "IssuersFrame: 100\n" +
+  "IssuersFrameVar: 0\n" +
+  "DifferentIssuersCount: 3\n" +
+  "PreviousHash: 2A27BD040B16B7AF59DDD88890E616987F4DD28AA47B9ABDBBEE46257B88E945\n" +
+  "PreviousIssuer: HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd\n" +
+  "MembersCount: 3\n" +
+  "Identities:\n" +
+  "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:CTmlh3tO4B8f8IbL8iDy5ZEr3jZDcxkPmDmRPQY74C39MRLXi0CKUP+oFzTZPYmyUC7fZrUXrb3LwRKWw1jEBQ==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+  "Joiners:\n" +
+  "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:cat\n" +
+  "65dKz7JEvZzy6Znr9hATtvm7Kd9fCwxhWKgyrbyL2jhX:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+  "Actives:\n" +
+  "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:ze+ftHWFLYmjfvXyrx4a15N2VQjf6oen8kkMiYNYrVllbpb5IUcb28CenlOQbVd9cZCNGSkTP7xP5bt8KAqUAw==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:toc\n" +
+  "Leavers:\n" +
+  "HEgBcwtkrnWBgwDqELYht6aBZrmjm8jQY4DtFRjcB437:25xK7+ph7IYeN9Hu8PvuIBjYdVURYtvKayPHZg7zrrYTs6ii2fMtk5J65a3bT/NKr2Qsd7I5TCL29QyiAXa7BA==:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:0-E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855:tac\n" +
+  "Revoked:\n" +
+  "EKWJvwPaYuLTv1VoCEtZLmtUTxTC5gWVfdWeRgKgZChN:iSQvl1VVc6+b1AUaBJ/VTTurGGHgaIcjASBhIlzI7M/7KVQV2Wi3oGUZUzLWqCAtGUsPcsj1HCV2/sRyxHmqAw==\n" +
+  "Excluded:\n" +
+  "EKWJvwPaYuLTv1VoCEtZLmtUTxTC5gWVfdWeRgKgZChN\n" +
+  "BNmj8fnZuDtpvismiWnFneJkPHpB98bZdc5ozNYzBW78\n" +
+  "Certifications:\n" +
+  "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:CK6UDDJM3d0weE1RVtzFJnw/+J507lPAtspleHc59T4+N1tzQj1RRGWrzPiTknCjnCO6SxBSJX0B+MIUWrpNAw==\n" +
+  "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:0:a7SFapoVaXq27NU+wZj4afmxp0SbwLGqLJih8pfX6TRKPvNp/V93fbKixbqg10cwa1CadNenztxq3ZgOivqADw==\n" +
+  "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:bJyoM2Tz4hltVXkLvYHOOmLP4qqh2fx7aMLkS5q0cMoEg5AFER3iETj13uoFyhz8yiAKESyAZSDjjQwp8A1QDw==\n" +
+  "F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:0:h8D/dx/z5K2dx06ktp7fnmLRdxkdV5wRkJgnmEvKy2k55mM2RyREpHfD7t/1CC5Ew+UD0V9N27PfaoLxZc1KCQ==\n" +
+  "HgTTJLAQ5sqfknMq7yLPZbehtuLSsKj9CxWN7k8QvYJd:F5PtTpt8QFYMGtpZaETygB2C2yxCSxH1UW1VopBNZ6qg:0:eefk9Gg0Ijz0GvrNnRc55CCCBd4yk8j0fNzWzVZFKR3kZ7lsKav6dWyAsaVhlNG5S6XwEwvPoMwKJq1Vn7OjBg==\n" +
+  "Transactions:\n" +
+  "TX:10:1:6:6:8:1:0\n" +
+  "33753-0000054FC8AC7B450BA7D8BA7ED873FEDD5BF1E98D5D3B0DEE38DED55CB80CB3\n" +
+  "G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU\n" +
+  "150605:3:T:01B1AB40E7C1021712FF40D5605037C0ACEECA547BF519ABDCB6473A9F6BDF45:1\n" +
+  "297705:3:D:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:33530\n" +
+  "2244725:3:T:507CBE120DB654645B55431A9967789ACB7CD260EA962B839F1708834D1E5491:0\n" +
+  "972091:2:D:G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU:30324\n" +
+  "3808457:2:T:657229C5433FB9FFE64BF2E795E79DA796E0B1AF536DC740ECC26CCBBE104C33:1\n" +
+  "4:2:T:507CBE120DB654645B55431A9967789ACB7CD260EA962B839F1708834D1E5491:1\n" +
+  "0:SIG(0)\n" +
+  "1:SIG(0)\n" +
+  "2:SIG(0)\n" +
+  "3:SIG(0)\n" +
+  "4:SIG(0)\n" +
+  "5:SIG(0)\n" +
+  "3171064:3:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+  "3:2:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+  "4:1:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+  "8:0:SIG(5ocqzyDMMWf1V8bsoNhWb1iNwax1e9M7VTUN6navs8of)\n" +
+  "25:3:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+  "8:2:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+  "5:1:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+  "2:0:SIG(G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU)\n" +
+  "all 10.6517\n" +
+  "42yQm4hGTJYWkPg39hQAUgP6S6EQ4vTfXdJuxKEHL1ih6YHiDL2hcwrFgBHjXLRgxRhj2VNVqqc6b4JayKqTE14r\n" +
+  "TX:10:1:1:1:1:0:0\n" +
+  "5-2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326\n" +
+  "HsLShAtzXTVxeUtQd7yi5Z5Zh4zNvbu8sTEZ53nfKcqY\n" +
+  "10:3:T:2C31D8915801E759F6D4FF3DA8DA983D7D56DCF4F8D94619FCFAD4B128362326:88\n" +
+  "0:SIG(0)\n" +
+  "1:4:SIG(BYfWYFrsyjpvpFysgu19rGK3VHBkz4MqmQbNyEuVU64g)\n" +
+  "I6gJkJIQJ9vwDRXZ6kdBsOArQ3zzMYPmFxDbJqseBVq5NWlmJ7l7oY9iWtqhPF38rp7/iitbgyftsRR8djOGDg==\n" +
+  "InnerHash: DE837CA3F49C423A6A6C124819ABA31A41C1C4A4E2728B5721DF891B98FA8D0D\n" +
+  "Nonce: 1\n" +
+  "kNsKdC8eH0d4zdHh1djyMzRXjFrwk3Bc3M8wo4DV/7clE9J66K/U0FljyS79SI78ZZUPaVmrImKJ9SNiubCiBg==\n";
+
+describe("v1.0 Local Index", function(){
+
+  let block, index;
+
+  before(() => {
+    block = parsers.parseBlock.syncWrite(raw);
+    index = indexer.localIndex(block, { sigValidity: 100, msValidity: 40 });
+  });
+
+  it('should have 30 index entries', () => {
+    index.should.have.length(30);
+  });
+
+  /*********
+   * IINDEX
+   ********/
+
+  it('should have 4 iindex entries', () => {
+    _(index).where({ index: constants.I_INDEX}).should.have.length(4);
+  });
+
+  it('should have 1 iindex CREATE entries', () => {
+    _(index).where({ index: constants.I_INDEX, op: constants.IDX_CREATE }).should.have.length(1);
+  });
+
+  it('should have 3 iindex UPDATE entries', () => {
+    _(index).where({ index: constants.I_INDEX, op: constants.IDX_UPDATE }).should.have.length(3);
+  });
+
+  /*********
+   * MINDEX
+   ********/
+
+  it('should have 5 mindex entries', () => {
+    _(index).where({ index: constants.M_INDEX}).should.have.length(5);
+  });
+
+  it('should have 1 mindex CREATE entries', () => {
+    _(index).where({ index: constants.M_INDEX, op: constants.IDX_CREATE }).should.have.length(1);
+  });
+
+  it('should have 4 mindex UPDATE entries', () => {
+    _(index).where({ index: constants.M_INDEX, op: constants.IDX_UPDATE }).should.have.length(4);
+  });
+
+  /*********
+   * CINDEX
+   ********/
+
+  it('should have 5 cindex entries', () => {
+    _(index).where({ index: constants.C_INDEX}).should.have.length(5);
+  });
+
+  it('should have 5 cindex CREATE entries', () => {
+    _(index).where({ index: constants.C_INDEX, op: constants.IDX_CREATE }).should.have.length(5);
+  });
+
+  it('should have 0 cindex UPDATE entries', () => {
+    _(index).where({ index: constants.C_INDEX, op: constants.IDX_UPDATE }).should.have.length(0);
+  });
+
+  /*********
+   * SINDEX
+   ********/
+
+  it('should have 16 cindex entries', () => {
+    _(index).where({ index: constants.S_INDEX}).should.have.length(16);
+  });
+
+  it('should have 9 cindex CREATE entries', () => {
+    _(index).where({ index: constants.S_INDEX, op: constants.IDX_CREATE }).should.have.length(9);
+  });
+
+  it('should have 7 cindex UPDATE entries', () => {
+    _(index).where({ index: constants.S_INDEX, op: constants.IDX_UPDATE }).should.have.length(7);
+  });
+
+});
diff --git a/yarn.lock b/yarn.lock
index d3c1fba6d29693793fed936ef98a20b169279cbe..a140cfcecbf063aa195e735fce989e81a43615ab 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -233,12 +233,6 @@ base-x@^2.0.1:
   dependencies:
     safe-buffer "^5.0.1"
 
-base-x@^3.0.2:
-  version "3.0.2"
-  resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.2.tgz#bf873861b7514279b7969f340929eab87c11d130"
-  dependencies:
-    safe-buffer "^5.0.1"
-
 basic-auth@~1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
@@ -322,18 +316,12 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7:
     balanced-match "^1.0.0"
     concat-map "0.0.1"
 
-bs58@4.0.0:
+bs58@4.0.0, bs58@^4.0.0:
   version "4.0.0"
   resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.0.tgz#65f5deaf6d74e6135a99f763ca6209ab424b9172"
   dependencies:
     base-x "^2.0.1"
 
-bs58@^4.0.0:
-  version "4.0.1"
-  resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
-  dependencies:
-    base-x "^3.0.2"
-
 buffer-crc32@^0.2.1:
   version "0.2.13"
   resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
@@ -755,7 +743,7 @@ duniter-bma@1.3.x:
     underscore "1.8.3"
     ws "1.1.1"
 
-duniter-common@1.3.x, duniter-common@^1.3.0, duniter-common@^1.3.5:
+duniter-common@1.3.x, duniter-common@^1.3.0:
   version "1.3.5"
   resolved "https://registry.yarnpkg.com/duniter-common/-/duniter-common-1.3.5.tgz#b727117a2c9463d0486b7c0feb845df60b65e247"
   dependencies:
@@ -767,6 +755,18 @@ duniter-common@1.3.x, duniter-common@^1.3.0, duniter-common@^1.3.5:
     tweetnacl "0.14.3"
     underscore "1.8.3"
 
+duniter-common@1.4.x:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/duniter-common/-/duniter-common-1.4.1.tgz#e2093478ca3367d3ecb9b3b6891122c1054e95c4"
+  dependencies:
+    bs58 "^4.0.0"
+    co "4.6.0"
+    jison "0.4.17"
+    naclb "1.3.9"
+    seedrandom "^2.4.3"
+    tweetnacl "0.14.3"
+    underscore "1.8.3"
+
 duniter-crawler@1.3.x:
   version "1.3.7"
   resolved "https://registry.yarnpkg.com/duniter-crawler/-/duniter-crawler-1.3.7.tgz#1f3226566e8ab1557cbe15f08fed22bef3ea5f3d"
@@ -1761,20 +1761,13 @@ js-yaml@3.0.1:
     argparse "~ 0.1.11"
     esprima "~ 1.0.2"
 
-js-yaml@3.8.2:
+js-yaml@3.8.2, js-yaml@3.x, js-yaml@^3.2.5, js-yaml@^3.5.1:
   version "3.8.2"
   resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.2.tgz#02d3e2c0f6beab20248d412c352203827d786721"
   dependencies:
     argparse "^1.0.7"
     esprima "^3.1.1"
 
-js-yaml@3.x, js-yaml@^3.2.5, js-yaml@^3.5.1:
-  version "3.8.4"
-  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
-  dependencies:
-    argparse "^1.0.7"
-    esprima "^3.1.1"
-
 jsbn@~0.1.0:
   version "0.1.1"
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"