Problem with while and buttons

#include <Button.h>
#include <Streaming.h> //debug


#define PULLUP true        
#define INVERT true        

#define DEBOUNCE_MS 20


#define SWI_1 2 
#define SWI_2 3
#define SWI_3 4
#define SWI_4 5

#define led1 6
#define led2 7
#define led3 8
#define led4 9

#define rel1 10
#define rel2 11
#define rel3 12
#define rel4 13

Button sw1(SWI_1, PULLUP, INVERT, DEBOUNCE_MS);
Button sw2(SWI_2, PULLUP, INVERT, DEBOUNCE_MS);
Button sw3(SWI_3, PULLUP, INVERT, DEBOUNCE_MS);
Button sw4(SWI_4, PULLUP, INVERT, DEBOUNCE_MS);

byte st1, st2, st3, st4;

boolean dev_startup;
boolean dev_setup;

void setup()
{
  Serial.begin(9600); //debug
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  
  pinMode(rel1, OUTPUT);
  pinMode(rel2, OUTPUT);
  pinMode(rel3, OUTPUT);
  pinMode(rel4, OUTPUT);
  
  
  st1=0;
  st2=0;
  st3=0;
  st4=0;
  
}

void loop() {
  sw1.read();
  sw2.read();
  sw3.read();
  sw4.read();

  if(sw1.pressedFor(1500)){  //long press - works
    
    digitalWrite(led1, HIGH);
    delay(300);
    digitalWrite(led1, LOW);
    delay(300);
    digitalWrite(led1, HIGH);
    delay(300);
    digitalWrite(led1, LOW);
    Serial << "Setup\n"; //debug
    //DO SOME SETUP
  }
  
  if(sw1.pressedFor(2500)&&sw4.pressedFor(2500)){ //factory reset
    Serial << "FACTORY RESET\n"; //debug
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    //digitalWrite(led4, HIGH);
    while(true){                        //problem here
      if(sw4.wasReleased()){  
        Serial << "RESET OK\n"; 
        digitalWrite(led1, LOW);
        digitalWrite(led2, LOW);
        digitalWrite(led3, LOW);
        digitalWrite(led4, LOW);
        delay(400);
        digitalWrite(led3, HIGH);
        delay(300);
        digitalWrite(led3, LOW);
        delay(300);
        digitalWrite(led3, HIGH);
        delay(300);
        digitalWrite(led3, LOW);
        //EEPROM erase
        break;
      } else if(sw1.wasReleased()||sw2.wasReleased()||sw3.wasReleased()){
        Serial << "RESET CANCEL\n"; //debug
        break;
      }
    }
  }
    
  
   
  
  if((sw1.wasReleased())&&(st1==0)){      //works
    digitalWrite(led1, HIGH);
    digitalWrite(rel1, HIGH);
    st1=1;
  } else if((sw1.wasReleased())&&(st1==1)){
    digitalWrite(led1, LOW);
    digitalWrite(rel1, LOW);
    st1=0;
  }
  
    if((sw2.wasReleased())&&(st2==0)){      //works
    digitalWrite(led2, HIGH);
    digitalWrite(rel2, HIGH);
    st2=1;
  } else if((sw2.wasReleased())&&(st2==1)){
    digitalWrite(led2, LOW);
    digitalWrite(rel2, LOW);
    st2=0;
  }
  
    if((sw3.wasReleased())&&(st3==0)){      //works
    digitalWrite(led3, HIGH);
    digitalWrite(rel3, HIGH);
    st3=1;
  } else if((sw3.wasReleased())&&(st3==1)){
    digitalWrite(led3, LOW);
    digitalWrite(rel3, LOW);
    st3=0;
  }
  
    if((sw4.wasReleased())&&(st4==0)){      //works
    digitalWrite(led4, HIGH);
    digitalWrite(rel4, HIGH);
    st4=1;
  } else if((sw4.wasReleased())&&(st4==1)){
    digitalWrite(led4, LOW);
    digitalWrite(rel4, LOW);
    st4=0;
  }
}

Hi everyone. I'm using this library for switches GitHub - JChristensen/JC_Button: Arduino library to debounce button switches, detect presses, releases, and long presses
This is my code and I've just done some simple things right now but I've stuck with while statement (find "problem here" in comments in code). HW is working perfectly, because all other if statements work. When I enter in "factory reset", first some LEDs are lit and after that it should perform factory reset if I press switch 4 and cancel if I press any other switch. The problem is when I enter in "factory reset" mode which ever switch do I press, nothing happens. Any Ideas?

What do your debugging displays tell you?

when I turn on and then enter "factory reset" and while in "factory reset" I've pressed all buttons one by one, this is the result:

BOOTING...
FACTORY RESET

  if(sw1.pressedFor(2500)&&sw4.pressedFor(2500)){ //factory reset
 ...
      } else if(sw1.wasReleased()||sw2.wasReleased()||sw3.wasReleased()){

So you want sw1 pressed, and sw4 pressed, but also sw2 and sw3 released?

When I hold sw1 and sw4 for 2.5sec, device enters in certain mode. Then program enters into loop. After entering the loop, I don't need to hold any button any more. Then if I press sw4, program will perform memory initialisation (not yet written) and if I press any other button, program will simply exit the loop.
And also else if statement is for if sw4 was pressed while in the loop

I've put inside of the while loop serial message. When I enter the loop that message is printed in serial monitor but system does not respond to any button press. What I want to accomplish is this

void loop(){
long press button enter "config mode"
    enter loop
        short press buttons for config parameter
        short press button to save config and exit the loop

short press buttons for realtime config of main parameters of circuit

I want to do some kind of loop within a loop for "config mode" so I can have several separated loops.

I want to do some kind of loop within a loop for "config mode" so I can have several separated loops.

Permission granted. Go for it.