The following script does not work. Can you correct it please. Please keep the FastLed library.  
#define LED_PIN 6
#define COLOR_ORDER GRB
#define CHIPSET WS2811
#define NUM_LEDS 30

#define BRIGHTNESS 100
#define FRAMES_PER_SECOND 60

#define BUTTON_PIN 2

bool gReverseDirection = false;

int currentPalette = 0;
int buttonState = HIGH;
int prevButtonState = HIGH;

CRGB leds[NUM_LEDS];

CRGBPalette16 gPal;

void setup() {
  delay(3000); // sanity delay
  FastLED.addLeds<CHIPSET, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  FastLED.setBrightness( BRIGHTNESS );
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  // Set initial button state
  buttonState = digitalRead(BUTTON_PIN);
  prevButtonState = buttonState;

  // This first palette is the basic ‘black body radiation’ colors,
  // which run from black to red to bright yellow to white.
  // gPal = HeatColors_p;

  // These are other ways to set up the color palette for the ‘fire’.
  // First, a gradient from black to red to yellow to white – similar to HeatColors_p
  // (GPAL A)
  // gPal = CRGBPalette16( CRGB::Black, CRGB::Red, CRGB::Yellow, CRGB::White);

  // Second, this palette is like the heat colors, but blue/aqua instead of red/yellow
  // (GPAL B)
  // gPal = CRGBPalette16( CRGB::Black, CRGB::Blue, CRGB::Aqua, CRGB::White);

  // Third, here’s a simpler, three-step gradient, from black to red to white
  // (GPAL C)
  gPal = CRGBPalette16( CRGB::Black, CRGB::Green, CRGB::Yellow);
}

void loop() {
  // Update button state
  buttonState = digitalRead(BUTTON_PIN);

  // Detect button press to toggle palette
  if (buttonState == LOW && prevButtonState == HIGH) {
    currentPalette++;
    if (currentPalette > 2) {
      currentPalette = 0;
    }
    // Clear the LED strip
    fill_solid(leds, NUM_LEDS, CRGB::Black);
    FastLED.show();
    delay(250); // Debounce delay
  }

  prevButtonState = buttonState;

  // Add entropy to random number generator; we use a lot of it.
  random16_add_entropy( random());

  // Update palette based on currentPalette variable
  switch (currentPalette) {
    case 0:
      gPal = CRGBPalette16( CRGB::Red, CRGB::Red, CRGB::Yellow, CRGB::White);
      break;
    case 1:
      gPal = CRGBPalette16( CRGB::Aqua, CRGB::Blue, CRGB::Aqua, CRGB::White);
      break;
    case 2:
      gPal = CRGBPalette16( CRGB::Green, CRGB::Green, CRGB::Yellow);
      break;
  }

  Fire2012WithPalette(); // run simulation frame, using palette colors

  FastLED.show(); // display this frame
  FastLED.delay(500 / FRAMES_PER_SECOND);
}

#define COOLING 55
#define SPARKING 120
#define FALLING 50

//********************************************************************************************//
// PLAY WITH FALLING, COOLING AND SPARKLING

void Fire2012WithPalette() {
  // Array of temperature readings at each simulation cell
  static uint8_t heat[NUM_LEDS];

  // Step 1. Cool down every cell a little
  for( int i = 0; i < NUM_LEDS; i++) {
    heat[i] = qsub8( heat[i], random8(0, ((COOLING * 10) / NUM_LEDS) + 2));
  }

  // Step 2. Heat from each cell drifts ‘up’ and diffuses a little
  for(int k = NUM_LEDS - 1; k >= 2; k--) {
    heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2] ) / 3;
  }

  // Step 3. Randomly ignite new ‘sparks’ of heat near the bottom
  if( random8() < FALLING ) {
    int y = random8(7);
    heat[y] = qadd8( heat[y], random8(160,255) );
  }

  // Step 4. Map from heat cells to LED colors
  for( int j = 0; j < NUM_LEDS; j++) {
    // Scale the heat value from 0-255 down to 0-240
    // for best results with color palettes.
    uint8_t colorindex = scale8( heat[j], 240);
    CRGB color = ColorFromPalette( gPal, colorindex);
    int pixelnumber;
    if( gReverseDirection ) {
      pixelnumber = (NUM_LEDS-1) - j;
    } else {
      pixelnumber = j;
    }
    leds[pixelnumber] = color;
  }
}