docs: public static void main(String args[]) throws InterruptedException, PlatformAlreadyAssignedException, IOException {
  
          // create Pi4J console wrapper/helper
          // (This is a utility class to abstract some of the boilerplate code)
          final Console console = new Console();
  
          // print program title/header
          console.title("<-- The Pi4J Project -->", "GPIO Listen (All Pins) Example");
  
          // allow for user to exit program using CTRL-C
          console.promptForExit();
  
          // create GPIO controller
          final GpioController gpio = GpioFactory.getInstance();
  
          // by default we will use gpio pin PULL-DOWN; however, if an argument
          // has been provided, then use the specified pull resistance
          PinPullResistance pull = CommandArgumentParser.getPinPullResistance(
                  PinPullResistance.PULL_UP,  // default pin pull resistance if no pull argument found
                  args);                      // argument array to search in
  
          // prompt user to wait
          console.println(" ... please wait; provisioning GPIO pins with resistance [" + pull + "]");
  
          // create pins collection to store provisioned pin instances
          List<GpioPinDigitalInput> provisionedPins = new ArrayList<>();
          Pin[] pins;
  
          // get a collection of raw pins based on the board type (model)
          SystemInfo.BoardType board = SystemInfo.getBoardType();
          if(board == SystemInfo.BoardType.RaspberryPi_ComputeModule) {
              // get all pins for compute module
              pins = RCMPin.allPins();
          }
          else {
              // get exclusive set of pins based on RaspberryPi model (board type)
              pins = RaspiPin.allPins(board);
          }
  
          // provision GPIO input pins with its internal pull resistor set
          for (Pin pin : pins) {
              try {
                  GpioPinDigitalInput provisionedPin = gpio.provisionDigitalInputPin(pin, pull);
                  provisionedPins.add(provisionedPin);
  
                  // un-export the provisioned GPIO pins when program exits
                  provisionedPin.setShutdownOptions(true);
              }
              catch (Exception ex){
                  System.err.println(ex.getMessage());
              }
          }
  
          // prompt user that we are ready
          console.println(" ... GPIO pins provisioned and ready for use.");
          console.emptyLine();
          console.box("Please complete the GPIO circuit and see",
                  "the listener feedback here in the console.");
          console.emptyLine();
  
          // --------------------------------
          // EVENT-BASED GPIO PIN MONITORING
          // --------------------------------
  
          // create and register gpio pin listeners for event pins
          gpio.addListener(new GpioPinListenerDigital() {
              @Override
              public void handleGpioPinDigitalStateChangeEvent(GpioPinDigitalStateChangeEvent event) {
                  // display pin state on console
                  console.println(" --> GPIO PIN STATE CHANGE (EVENT): " + event.getPin() + " = " +
                          ConsoleColor.conditional(
                                  event.getState().isHigh(), // conditional expression
                                  ConsoleColor.GREEN,        // positive conditional color
                                  ConsoleColor.RED,          // negative conditional color
                                  event.getState()));        // text to display
              }
          }, provisionedPins.toArray(new GpioPinDigitalInput[0]));
  
          // wait (block) for user to exit program using CTRL-C
          console.waitForExit();
  
          // stop all GPIO activity/threads by shutting down the GPIO controller
          // (this method will forcefully shutdown all GPIO monitoring threads and scheduled tasks)
          gpio.shutdown();
      }