   Serial.println(startingMacroMetadataIndex);
   Serial.println(endingMacroMetadataIndex);
   Serial.println(macroMetadataSize);
-
+  Serial.println("Ready to go");
 }
 
 void loop()

            //
            }
          */
          if (timesToLoop > 0 && loopCounter <= timesToLoop) {
            // Sending this block for redundancy sake, will comment this block if something goes wrong (it shouldn't)
            Serial.print("E BEFORE loopCounter = ");
            Serial.println(loopCounter);
            Serial.write(endingMacroIndex);
            Serial.write(macroInputsToRun);

        if (howManyInnerLoopsMacroHas > 0) {
          // This is where inner loop logic goes (???)
          Serial.println("This macro has inner loops");
          if (inner_loop_metadata[macroMetadataIndex][1] > 0 && inner_loop_metadata[macroMetadataIndex][3] > 0) {
            // Do something
            Serial.println("This inner loop metadata is valid");
            Serial.print("A currentMacroIndexRunning  = ");
            Serial.println(currentMacroIndexRunning);
            if (inner_loop_metadata[macroMetadataIndex][3] > 0 && inner_loop_metadata[macroMetadataIndex][4] <= inner_loop_metadata[macroMetadataIndex][3]) {
              Serial.println("TEST");
              if (inner_loop_metadata[macroMetadataIndex][2] < inner_loop_metadata[macroMetadataIndex][6]) {
                // Current input index is lower than starting index, fix this
                // Write inner loop metadata back to PC here
                Serial.println("Current input index for current inner loop is below what it is supposed to be, fix that!");
                Serial.print("B currentMacroIndexRunning  = ");
                Serial.println(currentMacroIndexRunning);
                inner_loop_metadata[macroMetadataIndex][2] = inner_loop_metadata[macroMetadataIndex][6];
                currentMacroIndexRunning = inner_loop_metadata[macroMetadataIndex][6];
                Serial.print("C currentMacroIndexRunning  = ");
                Serial.println(currentMacroIndexRunning);
                // Write inner loop metadata back to PC here
              }
              if (inner_loop_metadata[macroMetadataIndex][2] >= inner_loop_metadata[macroMetadataIndex][6] && currentMacroIndexRunning <= inner_loop_metadata[macroMetadataIndex][7]) {
                // Current input index is valid
                // Write inner loop metadata back to PC here
                Serial.println("Current input index for current inner loop is in the valid range!");
                Serial.print("D currentMacroIndexRunning  = ");
                Serial.println(currentMacroIndexRunning);
                currentMacroIndexRunning++;
                inner_loop_metadata[macroMetadataIndex][2]++;
                Serial.print("E currentMacroIndexRunning  = ");
                Serial.println(currentMacroIndexRunning);
                // Write inner loop metadata back to PC here
              }
              if (inner_loop_metadata[macroMetadataIndex][2] > inner_loop_metadata[macroMetadataIndex][7]) {
                // Inner loop ended?
                // Write inner loop metadata back to PC here
                Serial.println("Inner loop ended");
                Serial.print("F currentMacroIndexRunning  = ");
                Serial.println(currentMacroIndexRunning);
                currentMacroIndexRunning = inner_loop_metadata[macroMetadataIndex][6];
                inner_loop_metadata[macroMetadataIndex][2] = inner_loop_metadata[macroMetadataIndex][6];
                inner_loop_metadata[macroMetadataIndex][4]++;
                Serial.print("inner_loop_metadata[macroMetadataIndex][4] = ");
                Serial.println(inner_loop_metadata[macroMetadataIndex][4]);
                Serial.print("G currentMacroIndexRunning  = ");
                Serial.println(currentMacroIndexRunning);
                // Write inner loop metadata back to PC here
              }
            }
            if (inner_loop_metadata[macroMetadataIndex][3] > 0 && inner_loop_metadata[macroMetadataIndex][4] > inner_loop_metadata[macroMetadataIndex][3]) {
              Serial.println("Broke out from inner loop?");
              Serial.print("H currentMacroIndexRunning  = ");
              Serial.println(currentMacroIndexRunning);
              //currentMacroIndexRunning = inner_loop_metadata[macroMetadataIndex][7] + 1;
              macroMetadataIndex++;
              Serial.print("I currentMacroIndexRunning  = ");
              Serial.println(currentMacroIndexRunning);
            }
            Serial.print("J currentMacroIndexRunning  = ");
            Serial.println(currentMacroIndexRunning);
          }
          if (inner_loop_metadata[macroMetadataIndex][1] <= 0 || inner_loop_metadata[macroMetadataIndex][3] <= 0) {
            // Ignore this inner loop, it is not valid
            Serial.println("This inner loop metadata is not valid");
            Serial.print("K currentMacroIndexRunning  = ");
            Serial.println(currentMacroIndexRunning);
            currentMacroIndexRunning++;
            Serial.print("L currentMacroIndexRunning  = ");
            Serial.println(currentMacroIndexRunning);
          }
        }
        //Serial.print("B AFTER currentMacroIndexRunning = ");
