docs: public void apply(FaceletContext ctx, UIComponent parent) throws IOException, FacesException, FaceletException,
              ELException
      {
          AbstractFaceletContext actx = (AbstractFaceletContext) ctx;
          // eval include
          try
          {
              String[] names = null;
              ValueExpression[] values = null;
              if (this._vars.length > 0)
              {
                  names = new String[_vars.length];
                  values = new ValueExpression[_vars.length];
                  for (int i = 0; i < _vars.length; i++)
                  {
                      names[i] = _vars[i].getLocalName();
                      values[i] = _vars[i].getValueExpression(ctx, Object.class);
                  }
              }
              actx.pushTemplateContext(new TemplateContextImpl());
              actx.pushClient(this);
              FaceletCompositionContext fcc = FaceletCompositionContext.getCurrentInstance(ctx);
              String uniqueId = fcc.startComponentUniqueIdSection();
              try
              {
                  if (this._vars.length > 0)
                  {
                      if (ELExpressionCacheMode.alwaysRecompile.equals(actx.getELExpressionCacheMode()))
                      {
                          FaceletState faceletState = ComponentSupport.getFaceletState(ctx, parent, true);
                          for (int i = 0; i < this._vars.length; i++)
                          {
                              //((AbstractFaceletContext) ctx).getTemplateContext().setParameter(names[i], values[i]);
                              faceletState.putBinding(uniqueId, names[i], values[i]);
                              ValueExpression ve;
                              if (ExternalSpecifications.isUnifiedELAvailable())
                              {
                                  ve = new FaceletStateValueExpressionUEL(uniqueId, names[i]);
                              }
                              else
                              {
                                  ve = new FaceletStateValueExpression(uniqueId, names[i]);
                              }
                              actx.getTemplateContext().setParameter(names[i], ve);
                          }
                      }
                      else
                      {
                          for (int i = 0; i < this._vars.length; i++)
                          {
                              ((AbstractFaceletContext) ctx).getTemplateContext().setParameter(names[i], values[i]);
                          }
                      }
                  }
                  // Disable caching always, even in 'always' mode
                  // The only mode that can support EL caching in this condition is alwaysRedirect.
                  if (!ELExpressionCacheMode.alwaysRecompile.equals(actx.getELExpressionCacheMode()))
                  {
                      actx.getTemplateContext().setAllowCacheELExpressions(false);
                  }
                  ctx.includeFacelet(parent, this._location);
              }
              finally
              {
                  fcc.endComponentUniqueIdSection();
              }
          }
          catch (FileNotFoundException e)
          {
              throw new TagException(this.tag, e.getMessage());
          }
          finally
          {
  
              // make sure we undo our changes
              actx.popClient(this);
              actx.popTemplateContext();
              //ctx.setVariableMapper(orig);
          }
      }