-       return bitIndex;
- }
- 
- int ManchesterConvertFrom1(const int * data, const size_t len, uint8_t * dataout, int clock, int startIndex){
-
-       int i,j, bitindex, lc, tolerance, warnings;
-       warnings = 0;
-       int upperlimit = len*2/clock+8;
-       i = startIndex;
-       j = 0;
-       tolerance = clock/4;
-       uint8_t decodedArr[len];
-       
-       /* Then detect duration between 2 successive transitions */
-       for (bitindex = 1; i < len; i++) {
-       
-               if (data[i-1] != data[i]) {
-                       lc = i - startIndex;
-                       startIndex = i;
-
-                       // Error check: if bitindex becomes too large, we do not
-                       // have a Manchester encoded bitstream or the clock is really wrong!
-                       if (bitindex > upperlimit ) {
-                               PrintAndLog("Error: the clock you gave is probably wrong, aborting.");
-                               return 0;
-                       }
-                       // Then switch depending on lc length:
-                       // Tolerance is 1/4 of clock rate (arbitrary)
-                       if (abs((lc-clock)/2) < tolerance) {
-                               // Short pulse : either "1" or "0"
-                               decodedArr[bitindex++] = data[i-1];
-                       } else if (abs(lc-clock) < tolerance) {
-                               // Long pulse: either "11" or "00"
-                               decodedArr[bitindex++] = data[i-1];
-                               decodedArr[bitindex++] = data[i-1];
-                       } else {
-                               ++warnings;
-                               PrintAndLog("Warning: Manchester decode error for pulse width detection.");
-                               if (warnings > 10) {
-                                       PrintAndLog("Error: too many detection errors, aborting.");
-                                       return 0; 
-                               }
-                       }
-               }
-       }
-       
-       /* 
-       * We have a decodedArr of "01" ("1") or "10" ("0")
-       * parse it into final decoded dataout
-    */ 
-    for (i = 0; i < bitindex; i += 2) {
-
-           if ((decodedArr[i] == 0) && (decodedArr[i+1] == 1)) {
-                       dataout[j++] = 1;
-               } else if ((decodedArr[i] == 1) && (decodedArr[i+1] == 0)) {
-                       dataout[j++] = 0;
-               } else {
-                       i++;
-                       warnings++;
-                       PrintAndLog("Unsynchronized, resync...");
-                       PrintAndLog("(too many of those messages mean the stream is not Manchester encoded)");
-
-                       if (warnings > 10) {    
-                               PrintAndLog("Error: too many decode errors, aborting.");
-                               return 0;
-                       }
-               }
-    }
-       
-       PrintAndLog("%s", sprint_hex(dataout, j));
-       return j;
- }
- 
- void ManchesterDiffDecodedString(const uint8_t* bitstream, size_t len, uint8_t invert){
-       /* 
-       * We have a bitstream of "01" ("1") or "10" ("0")
-       * parse it into final decoded bitstream
-    */ 
-       int i, j, warnings; 
-       uint8_t decodedArr[(len/2)+1];
-
-       j = warnings = 0;
-       
-       uint8_t lastbit = 0;
-       
-    for (i = 0; i < len; i += 2) {
-       
-               uint8_t first = bitstream[i];
-               uint8_t second = bitstream[i+1];
-
-               if ( first == second ) {
-                       ++i;
-                       ++warnings;
-                       if (warnings > 10) {
-                               PrintAndLog("Error: too many decode errors, aborting.");
-                               return;
-                       }
-               } 
-               else if ( lastbit != first ) {
-                       decodedArr[j++] = 0 ^ invert;
-               }
-               else {
-                       decodedArr[j++] = 1 ^ invert;
-               }
-               lastbit = second;
-    }
-       
-       PrintAndLog("%s", sprint_hex(decodedArr, j));