text: /**
   * @file
   * JavaScript behaviors for Select2 integration.
   */
  
  (function ($, Drupal) {
  
    'use strict';
  
    // @see https://select2.github.io/options.html
    Drupal.webform = Drupal.webform || {};
    Drupal.webform.select2 = Drupal.webform.select2 || {};
    Drupal.webform.select2.options = Drupal.webform.select2.options || {};
    Drupal.webform.select2.options.width = Drupal.webform.select2.options.width || '100%';
    Drupal.webform.select2.options.widthInline = Drupal.webform.select2.options.widthInline || '50%';
  
    /**
     * Initialize Select2 support.
     *
     * @type {Drupal~behavior}
     */
    Drupal.behaviors.webformSelect2 = {
      attach: function (context) {
        if (!$.fn.select2) {
          return;
        }
  
        $(context)
          .find('select.js-webform-select2, .js-webform-select2 select')
          .once('webform-select2')
          .each(function () {
            var $select = $(this);
  
            var options = {};
            if ($select.parents('.webform-element--title-inline').length) {
              options.width = Drupal.webform.select2.options.widthInline;
            }
            options = $.extend(options, Drupal.webform.select2.options);
            if ($select.data('placeholder')) {
              options.placeholder = $select.data('placeholder');
              if (!$select.prop('multiple')) {
                // Allow single option to be deselected.
                options.allowClear = true;
              }
            }
            if ($select.data('limit')) {
              options.maximumSelectionLength = $select.data('limit');
            }
  
            // Remove required attribute from IE11 which breaks
            // HTML5 clientside validation.
            // @see https://github.com/select2/select2/issues/5114
            if (window.navigator.userAgent.indexOf('Trident/') !== false
              && $select.attr('multiple')
              && $select.attr('required')) {
              $select.removeAttr('required');
            }
  
            $select.select2(options);
          });
  
      }
    };
  
    /**
     * ISSUE:
     * Hiding/showing element via #states API cause select2 dropdown to appear in the wrong position.
     *
     * WORKAROUND:
     * Close (aka hide) select2 dropdown when #states API hides or shows an element.
     *
     * Steps to reproduce:
     * - Add custom 'Submit button(s)'
     * - Hide submit button
     * - Save
     * - Open 'Submit button(s)' dialog
     *
     * Dropdown body is positioned incorrectly when dropdownParent isn't statically positioned.
     * @see https://github.com/select2/select2/issues/3303
     */
    $(function () {
      if ($.fn.select2) {
        $(document).on('state:visible state:visible-slide', function (e) {
          $('select.select2-hidden-accessible').select2('close');
        });
      }
  
      // Select2 search broken inside jQuery UI 1.10.x modal Dialog.
      // @see https://github.com/select2/select2/issues/1246
      if ($.ui && $.ui.dialog && $.ui.dialog.prototype._allowInteraction) {
        var ui_dialog_interaction = $.ui.dialog.prototype._allowInteraction;
        $.ui.dialog.prototype._allowInteraction = function (e) {
          if ($(e.target).closest('.select2-dropdown').length) {
            return true;
          }
          return ui_dialog_interaction.apply(this, arguments);
        };
      }
    });
  
  
  })(jQuery, Drupal);
  ;
  /**
   * @file
   * JavaScript behaviors for admin pages.
   */
  
  (function ($, Drupal, debounce) {
  
    'use strict';
  
    /**
     * Filter webform autocomplete handler.
     *
     * @type {Drupal~behavior}
     */
    Drupal.behaviors.webformFilterAutocomplete = {
      attach: function (context) {
        $('.webform-filter-form input.form-autocomplete', context).once('webform-autocomplete')
          .each(function () {
            // If input value is an autocomplete match, reset the input to its
            // default value.
            if (/\(([^)]+)\)$/.test(this.value)) {
              this.value = this.defaultValue;
            }
  
            // From: http://stackoverflow.com/questions/5366068/jquery-ui-autocomplete-submit-onclick-result
            $(this).bind('autocompleteselect', function (event, ui) {
              if (ui.item) {
                $(this).val(ui.item.value);
                this.form.trigger('submit');
              }
            });
          });
      }
    };
  
    /**
     * Allow table rows to be hyperlinked.
     *
     * @type {Drupal~behavior}
     */
    Drupal.behaviors.webformTableRowHref = {
      attach: function (context) {
        // Only attach the click event handler to the entire table and determine
        // which row triggers the event.
        $('.webform-results-table', context).once('webform-results-table').on('click', function (event) {
          if (event.target.tagName === 'A' || event.target.tagName === 'BUTTON') {
            return true;
          }
  
          if ($(event.target).parents('a[href]').length || $(event.target).parents('.dropbutton-widget').length) {
            return true;
          }
  
          var $tr = $(event.target).parents('tr[data-webform-href]');
          if (!$tr.length) {
            return true;
          }
  
          window.location = $tr.attr('data-webform-href');
          return false;
        });
      }
    };
  
  })(jQuery, Drupal, Drupal.debounce);
  ;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, displace) {
    function TableHeader(table) {
      var $table = $(table);
      this.$originalTable = $table;
      this.$originalHeader = $table.children('thead');
      this.$originalHeaderCells = this.$originalHeader.find('> tr > th');
      this.displayWeight = null;
      this.$originalTable.addClass('sticky-table');
      this.tableHeight = $table[0].clientHeight;
      this.tableOffset = this.$originalTable.offset();
      this.$originalTable.on('columnschange', {
        tableHeader: this
      }, function (e, display) {
        var tableHeader = e.data.tableHeader;
  
        if (tableHeader.displayWeight === null || tableHeader.displayWeight !== display) {
          tableHeader.recalculateSticky();
        }
  
        tableHeader.displayWeight = display;
      });
      this.createSticky();
    }
  
    function forTables(method, arg) {
      var tables = TableHeader.tables;
      var il = tables.length;
  
      for (var i = 0; i < il; i++) {
        tables[i][method](arg);
      }
    }
  
    function tableHeaderInitHandler(e) {
      var $tables = $(e.data.context).find('table.sticky-enabled').once('tableheader');
      var il = $tables.length;
  
      for (var i = 0; i < il; i++) {
        TableHeader.tables.push(new TableHeader($tables[i]));
      }
  
      forTables('onScroll');
    }
  
    Drupal.behaviors.tableHeader = {
      attach: function attach(context) {
        $(window).one('scroll.TableHeaderInit', {
          context: context
        }, tableHeaderInitHandler);
      }
    };
  
    function scrollValue(position) {
      return document.documentElement[position] || document.body[position];
    }
  
    function tableHeaderResizeHandler(e) {
      forTables('recalculateSticky');
    }
  
    function tableHeaderOnScrollHandler(e) {
      forTables('onScroll');
    }
  
    function tableHeaderOffsetChangeHandler(e, offsets) {
      forTables('stickyPosition', offsets.top);
    }
  
    $(window).on({
      'resize.TableHeader': tableHeaderResizeHandler,
      'scroll.TableHeader': tableHeaderOnScrollHandler
    });
    $(document).on({
      'columnschange.TableHeader drupalToolbarTrayChange': tableHeaderResizeHandler,
      'drupalViewportOffsetChange.TableHeader': tableHeaderOffsetChangeHandler
    });
    $.extend(TableHeader, {
      tables: []
    });
    $.extend(TableHeader.prototype, {
      minHeight: 100,
      tableOffset: null,
      tableHeight: null,
      stickyVisible: false,
      createSticky: function createSticky() {
        var $stickyHeader = this.$originalHeader.clone(true);
        this.$stickyTable = $('<table class="sticky-header"></table>').css({
          visibility: 'hidden',
          position: 'fixed',
          top: '0px'
        }).append($stickyHeader).insertBefore(this.$originalTable);
        this.$stickyHeaderCells = $stickyHeader.find('> tr > th');
        this.recalculateSticky();
      },
      stickyPosition: function stickyPosition(offsetTop, offsetLeft) {
        var css = {};
  
        if (typeof offsetTop === 'number') {
          css.top = "".concat(offsetTop, "px");
        }
  
        if (typeof offsetLeft === 'number') {
          css.left = "".concat(this.tableOffset.left - offsetLeft, "px");
        }
  
        return this.$stickyTable.css(css);
      },
      checkStickyVisible: function checkStickyVisible() {
        var scrollTop = scrollValue('scrollTop');
        var tableTop = this.tableOffset.top - displace.offsets.top;
        var tableBottom = tableTop + this.tableHeight;
        var visible = false;
  
        if (tableTop < scrollTop && scrollTop < tableBottom - this.minHeight) {
          visible = true;
        }
  
        this.stickyVisible = visible;
        return visible;
      },
      onScroll: function onScroll(e) {
        this.checkStickyVisible();
        this.stickyPosition(null, scrollValue('scrollLeft'));
        this.$stickyTable.css('visibility', this.stickyVisible ? 'visible' : 'hidden');
      },
      recalculateSticky: function recalculateSticky(event) {
        this.tableHeight = this.$originalTable[0].clientHeight;
        displace.offsets.top = displace.calculateOffset('top');
        this.tableOffset = this.$originalTable.offset();
        this.stickyPosition(displace.offsets.top, scrollValue('scrollLeft'));
        var $that = null;
        var $stickyCell = null;
        var display = null;
        var il = this.$originalHeaderCells.length;
  
        for (var i = 0; i < il; i++) {
          $that = $(this.$originalHeaderCells[i]);
          $stickyCell = this.$stickyHeaderCells.eq($that.index());
          display = $that.css('display');
  
          if (display !== 'none') {
            $stickyCell.css({
              width: $that.css('width'),
              display: display
            });
          } else {
            $stickyCell.css('display', 'none');
          }
        }
  
        this.$stickyTable.css('width', this.$originalTable.outerWidth());
      }
    });
    Drupal.TableHeader = TableHeader;
  })(jQuery, Drupal, window.Drupal.displace);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, window) {
    function TableResponsive(table) {
      this.table = table;
      this.$table = $(table);
      this.showText = Drupal.t('Show all columns');
      this.hideText = Drupal.t('Hide lower priority columns');
      this.$headers = this.$table.find('th');
      this.$link = $('<button type="button" class="link tableresponsive-toggle"></button>').attr('title', Drupal.t('Show table cells that were hidden to make the table fit within a small screen.')).on('click', $.proxy(this, 'eventhandlerToggleColumns'));
      this.$table.before($('<div class="tableresponsive-toggle-columns"></div>').append(this.$link));
      $(window).on('resize.tableresponsive', $.proxy(this, 'eventhandlerEvaluateColumnVisibility')).trigger('resize.tableresponsive');
    }
  
    Drupal.behaviors.tableResponsive = {
      attach: function attach(context, settings) {
        var $tables = $(context).find('table.responsive-enabled').once('tableresponsive');
  
        if ($tables.length) {
          var il = $tables.length;
  
          for (var i = 0; i < il; i++) {
            TableResponsive.tables.push(new TableResponsive($tables[i]));
          }
        }
      }
    };
    $.extend(TableResponsive, {
      tables: []
    });
    $.extend(TableResponsive.prototype, {
      eventhandlerEvaluateColumnVisibility: function eventhandlerEvaluateColumnVisibility(e) {
        var pegged = parseInt(this.$link.data('pegged'), 10);
        var hiddenLength = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden').length;
  
        if (hiddenLength > 0) {
          this.$link.show().text(this.showText);
        }
  
        if (!pegged && hiddenLength === 0) {
          this.$link.hide().text(this.hideText);
        }
      },
      eventhandlerToggleColumns: function eventhandlerToggleColumns(e) {
        e.preventDefault();
        var self = this;
        var $hiddenHeaders = this.$headers.filter('.priority-medium:hidden, .priority-low:hidden');
        this.$revealedCells = this.$revealedCells || $();
  
        if ($hiddenHeaders.length > 0) {
          $hiddenHeaders.each(function (index, element) {
            var $header = $(this);
            var position = $header.prevAll('th').length;
            self.$table.find('tbody tr').each(function () {
              var $cells = $(this).find('td').eq(position);
              $cells.show();
              self.$revealedCells = $().add(self.$revealedCells).add($cells);
            });
            $header.show();
            self.$revealedCells = $().add(self.$revealedCells).add($header);
          });
          this.$link.text(this.hideText).data('pegged', 1);
        } else {
            this.$revealedCells.hide();
            this.$revealedCells.each(function (index, element) {
              var $cell = $(this);
              var properties = $cell.attr('style').split(';');
              var newProps = [];
              var match = /^display\s*:\s*none$/;
  
              for (var i = 0; i < properties.length; i++) {
                var prop = properties[i];
                prop.trim();
                var isDisplayNone = match.exec(prop);
  
                if (isDisplayNone) {
                  continue;
                }
  
                newProps.push(prop);
              }
  
              $cell.attr('style', newProps.join(';'));
            });
            this.$link.text(this.showText).data('pegged', 0);
            $(window).trigger('resize.tableresponsive');
          }
      }
    });
    Drupal.TableResponsive = TableResponsive;
  })(jQuery, Drupal, window);;
  /**
   * @file
   * JavaScript behaviors for details element.
   */
  
  (function ($, Drupal) {
  
    'use strict';
  
    Drupal.webform = Drupal.webform || {};
    Drupal.webform.detailsToggle = Drupal.webform.detailsToggle || {};
    Drupal.webform.detailsToggle.options = Drupal.webform.detailsToggle.options || {};
  
    /**
     * Attach handler to toggle details open/close state.
     *
     * @type {Drupal~behavior}
     */
    Drupal.behaviors.webformDetailsToggle = {
      attach: function (context) {
        $('.js-webform-details-toggle', context).once('webform-details-toggle').each(function () {
          var $form = $(this);
          var $tabs = $form.find('.webform-tabs');
  
          // Get only the main details elements and ignore all nested details.
          var selector = ($tabs.length) ? '.webform-tab' : '.js-webform-details-toggle, .webform-elements';
          var $details = $form.find('details').filter(function () {
            var $parents = $(this).parentsUntil(selector);
            return ($parents.find('details').length === 0);
          });
  
          // Toggle is only useful when there are two or more details elements.
          if ($details.length < 2) {
            return;
          }
  
          var options = $.extend({
            button: '<button type="button" class="webform-details-toggle-state"></button>'
          }, Drupal.webform.detailsToggle.options);
  
          // Create toggle buttons.
          var $toggle = $(options.button)
            .attr('title', Drupal.t('Toggle details widget state.'))
            .on('click', function (e) {
              // Get details that are not vertical tabs pane.
              var $details = $form.find('details:not(.vertical-tabs__pane)');
              var open;
              if (Drupal.webform.detailsToggle.isFormDetailsOpen($form)) {
                $details.removeAttr('open');
                open = 0;
              }
              else {
                $details.attr('open', 'open');
                open = 1;
              }
              Drupal.webform.detailsToggle.setDetailsToggleLabel($form);
  
              // Set the saved states for all the details elements.
              // @see webform.element.details.save.js
              if (Drupal.webformDetailsSaveGetName) {
                $details.each(function () {
                  // Note: Drupal.webformDetailsSaveGetName checks if localStorage
                  // exists and is enabled.
                  // @see webform.element.details.save.js
                  var name = Drupal.webformDetailsSaveGetName($(this));
                  if (name) {
                    localStorage.setItem(name, open);
                  }
                });
              }
            })
            .wrap('<div class="webform-details-toggle-state-wrapper"></div>')
            .parent();
  
          if ($tabs.length) {
            // Add toggle state before the tabs.
            $tabs.find('.item-list:first-child').eq(0).before($toggle);
          }
          else {
            // Add toggle state link to first details element.
            $details.eq(0).before($toggle);
          }
  
          Drupal.webform.detailsToggle.setDetailsToggleLabel($form);
        });
      }
    };
  
    /**
     * Determine if a webform's details are all opened.
     *
     * @param {jQuery} $form
     *   A webform.
     *
     * @return {boolean}
     *   TRUE if a webform's details are all opened.
     */
    Drupal.webform.detailsToggle.isFormDetailsOpen = function ($form) {
      return ($form.find('details[open]').length === $form.find('details').length);
    };
  
    /**
     * Set a webform's details toggle state widget label.
     *
     * @param {jQuery} $form
     *   A webform.
     */
    Drupal.webform.detailsToggle.setDetailsToggleLabel = function ($form) {
      var isOpen = Drupal.webform.detailsToggle.isFormDetailsOpen($form);
  
      var label = (isOpen) ? Drupal.t('Collapse all') : Drupal.t('Expand all');
      $form.find('.webform-details-toggle-state').html(label);
  
      var text = (isOpen) ? Drupal.t('All details have been expanded.') : Drupal.t('All details have been collapsed.');
      Drupal.announce(text);
    };
  
  })(jQuery, Drupal);
  ;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal) {
    function DetailsSummarizedContent(node) {
      this.$node = $(node);
      this.setupSummary();
    }
  
    $.extend(DetailsSummarizedContent, {
      instances: []
    });
    $.extend(DetailsSummarizedContent.prototype, {
      setupSummary: function setupSummary() {
        this.$detailsSummarizedContentWrapper = $(Drupal.theme('detailsSummarizedContentWrapper'));
        this.$node.on('summaryUpdated', $.proxy(this.onSummaryUpdated, this)).trigger('summaryUpdated').find('> summary').append(this.$detailsSummarizedContentWrapper);
      },
      onSummaryUpdated: function onSummaryUpdated() {
        var text = $.trim(this.$node.drupalGetSummary());
        this.$detailsSummarizedContentWrapper.html(Drupal.theme('detailsSummarizedContentText', text));
      }
    });
    Drupal.behaviors.detailsSummary = {
      attach: function attach(context) {
        var $detailsElements = $(context).find('details').once('details');
        DetailsSummarizedContent.instances = DetailsSummarizedContent.instances.concat($detailsElements.map(function (index, details) {
          return new DetailsSummarizedContent(details);
        }).get());
      }
    };
    Drupal.DetailsSummarizedContent = DetailsSummarizedContent;
  
    Drupal.theme.detailsSummarizedContentWrapper = function () {
      return "<span class=\"summary\"></span>";
    };
  
    Drupal.theme.detailsSummarizedContentText = function (text) {
      return text ? " (".concat(text, ")") : '';
    };
  })(jQuery, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal) {
    Drupal.behaviors.detailsAria = {
      attach: function attach() {
        $('body').once('detailsAria').on('click.detailsAria', 'summary', function (event) {
          var $summary = $(event.currentTarget);
          var open = $(event.currentTarget.parentNode).attr('open') === 'open' ? 'false' : 'true';
          $summary.attr({
            'aria-expanded': open,
            'aria-pressed': open
          });
        });
      }
    };
  })(jQuery, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Modernizr, Drupal) {
    function CollapsibleDetails(node) {
      this.$node = $(node);
      this.$node.data('details', this);
      var anchor = window.location.hash && window.location.hash !== '#' ? ", ".concat(window.location.hash) : '';
  
      if (this.$node.find(".error".concat(anchor)).length) {
        this.$node.attr('open', true);
      }
  
      this.setupSummaryPolyfill();
    }
  
    $.extend(CollapsibleDetails, {
      instances: []
    });
    $.extend(CollapsibleDetails.prototype, {
      setupSummaryPolyfill: function setupSummaryPolyfill() {
        var $summary = this.$node.find('> summary');
        $('<span class="details-summary-prefix visually-hidden"></span>').append(this.$node.attr('open') ? Drupal.t('Hide') : Drupal.t('Show')).prependTo($summary).after(document.createTextNode(' '));
        $('<a class="details-title"></a>').attr('href', "#".concat(this.$node.attr('id'))).prepend($summary.contents()).appendTo($summary);
        $summary.append(this.$summary).on('click', $.proxy(this.onSummaryClick, this));
      },
      onSummaryClick: function onSummaryClick(e) {
        this.toggle();
        e.preventDefault();
      },
      toggle: function toggle() {
        var _this = this;
  
        var isOpen = !!this.$node.attr('open');
        var $summaryPrefix = this.$node.find('> summary span.details-summary-prefix');
  
        if (isOpen) {
          $summaryPrefix.html(Drupal.t('Show'));
        } else {
          $summaryPrefix.html(Drupal.t('Hide'));
        }
  
        setTimeout(function () {
          _this.$node.attr('open', !isOpen);
        }, 0);
      }
    });
    Drupal.behaviors.collapse = {
      attach: function attach(context) {
        if (Modernizr.details) {
          return;
        }
  
        var $collapsibleDetails = $(context).find('details').once('collapse').addClass('collapse-processed');
  
        if ($collapsibleDetails.length) {
          for (var i = 0; i < $collapsibleDetails.length; i++) {
            CollapsibleDetails.instances.push(new CollapsibleDetails($collapsibleDetails[i]));
          }
        }
      }
    };
  
    var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e, $target) {
      $target.parents('details').not('[open]').find('> summary').trigger('click');
    };
  
    $('body').on('formFragmentLinkClickOrHashChange.details', handleFragmentLinkClickOrHashChange);
    Drupal.CollapsibleDetails = CollapsibleDetails;
  })(jQuery, Modernizr, Drupal);;
  /*!
   * jQuery UI Menu 1.12.1
   * http://jqueryui.com
   *
   * Copyright jQuery Foundation and other contributors
   * Released under the MIT license.
   * http://jquery.org/license
   */
  !function(e){"function"==typeof define&&define.amd?define(["jquery","../keycode","../position","../safe-active-element","../unique-id","../version","../widget"],e):e(jQuery)}((function(e){return e.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(e){e.preventDefault()},"click .ui-menu-item":function(t){var i=e(t.target),s=e(e.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(t){if(!this.previousFilter){var i=e(t.target).closest(".ui-menu-item"),s=e(t.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(e,t){var i=this.active||this.element.find(this.options.items).eq(0);t||this.focus(e,i)},blur:function(t){this._delay((function(){!e.contains(this.element[0],e.ui.safeActiveElement(this.document[0]))&&this.collapseAll(t)}))},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(e){this._closeOnDocumentClick(e)&&this.collapseAll(e),this.mouseHandled=!1}})},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each((function(){var t=e(this);t.data("ui-menu-submenu-caret")&&t.remove()}))},_keydown:function(t){var i,s,n,a,u=!0;switch(t.keyCode){case e.ui.keyCode.PAGE_UP:this.previousPage(t);break;case e.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case e.ui.keyCode.HOME:this._move("first","first",t);break;case e.ui.keyCode.END:this._move("last","last",t);break;case e.ui.keyCode.UP:this.previous(t);break;case e.ui.keyCode.DOWN:this.next(t);break;case e.ui.keyCode.LEFT:this.collapse(t);break;case e.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case e.ui.keyCode.ENTER:case e.ui.keyCode.SPACE:this._activate(t);break;case e.ui.keyCode.ESCAPE:this.collapse(t);break;default:u=!1,s=this.previousFilter||"",a=!1,n=t.keyCode>=96&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),n===s?a=!0:n=s+n,i=this._filterMenuItems(n),(i=a&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i).length||(n=String.fromCharCode(t.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(t,i),this.previousFilter=n,this.filterTimer=this._delay((function(){delete this.previousFilter}),1e3)):delete this.previousFilter}u&&t.preventDefault()},_activate:function(e){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(e):this.select(e))},refresh:function(){var t,i,s,n,a=this,u=this.options.icons.submenu,o=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),i=o.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each((function(){var t=e(this),i=t.prev(),s=e("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+u),i.attr("aria-haspopup","true").prepend(s),t.attr("aria-labelledby",i.attr("id"))})),this._addClass(i,"ui-menu","ui-widget ui-widget-content ui-front"),(t=o.add(this.element).find(this.options.items)).not(".ui-menu-item").each((function(){var t=e(this);a._isDivider(t)&&a._addClass(t,"ui-menu-divider","ui-widget-content")})),n=(s=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(s,"ui-menu-item")._addClass(n,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!e.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(e,t){if("icons"===e){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,t.submenu)}this._super(e,t)},_setOptionDisabled:function(e){this._super(e),this.element.attr("aria-disabled",String(e)),this._toggleClass(null,"ui-state-disabled",!!e)},focus:function(e,t){var i,s,n;this.blur(e,e&&"focus"===e.type),this._scrollIntoView(t),this.active=t.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),e&&"keydown"===e.type?this._close():this.timer=this._delay((function(){this._close()}),this.delay),(i=t.children(".ui-menu")).length&&e&&/^mouse/.test(e.type)&&this._startOpening(i),this.activeMenu=t.parent(),this._trigger("focus",e,{item:t})},_scrollIntoView:function(t){var i,s,n,a,u,o;this._hasScroll()&&(i=parseFloat(e.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(e.css(this.activeMenu[0],"paddingTop"))||0,n=t.offset().top-this.activeMenu.offset().top-i-s,a=this.activeMenu.scrollTop(),u=this.activeMenu.height(),o=t.outerHeight(),n<0?this.activeMenu.scrollTop(a+n):n+o>u&&this.activeMenu.scrollTop(a+n-u+o))},blur:function(e,t){t||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",e,{item:this.active}),this.active=null)},_startOpening:function(e){clearTimeout(this.timer),"true"===e.attr("aria-hidden")&&(this.timer=this._delay((function(){this._close(),this._open(e)}),this.delay))},_open:function(t){var i=e.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(t.parents(".ui-menu")).hide().attr("aria-hidden","true"),t.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(t,i){clearTimeout(this.timer),this.timer=this._delay((function(){var s=i?this.element:e(t&&t.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(t),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s}),this.delay)},_close:function(e){e||(e=this.active?this.active.parent():this.element),e.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(t){return!e(t.target).closest(".ui-menu").length},_isDivider:function(e){return!/[^\-\u2014\u2013\s]/.test(e.text())},collapse:function(e){var t=this.active&&this.active.parent().closest(".ui-menu-item",this.element);t&&t.length&&(this._close(),this.focus(e,t))},expand:function(e){var t=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();t&&t.length&&(this._open(t.parent()),this._delay((function(){this.focus(e,t)})))},next:function(e){this._move("next","first",e)},previous:function(e){this._move("prev","last",e)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(e,t,i){var s;this.active&&(s="first"===e||"last"===e?this.active["first"===e?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[e+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[t]()),this.focus(i,s)},nextPage:function(t){var i,s,n;this.active?this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each((function(){return(i=e(this)).offset().top-s-n<0})),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())):this.next(t)},previousPage:function(t){var i,s,n;this.active?this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each((function(){return(i=e(this)).offset().top-s+n>0})),this.focus(t,i)):this.focus(t,this.activeMenu.find(this.options.items).first())):this.next(t)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(t){this.active=this.active||e(t.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(t,!0),this._trigger("select",t,i)},_filterMenuItems:function(t){var i=t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=new RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter((function(){return s.test(e.trim(e(this).children(".ui-menu-item-wrapper").text()))}))}})}));;
  /*!
   * jQuery UI Autocomplete 1.12.1
   * http://jqueryui.com
   *
   * Copyright jQuery Foundation and other contributors
   * Released under the MIT license.
   * http://jquery.org/license
   */
  !function(e){"function"==typeof define&&define.amd?define(["jquery","./menu","../keycode","../position","../safe-active-element","../version","../widget"],e):e(jQuery)}((function(e){return e.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var t,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,u="input"===n;this.isMultiLine=o||!u&&this._isContentEditable(this.element),this.valueMethod=this.element[o||u?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return t=!0,s=!0,void(i=!0);t=!1,s=!1,i=!1;var o=e.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:t=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:t=!0,this._move("nextPage",n);break;case o.UP:t=!0,this._keyEvent("previous",n);break;case o.DOWN:t=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(t=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(t)return t=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||s.preventDefault());if(!i){var n=e.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(e){if(s)return s=!1,void e.preventDefault();this._searchTimeout(e)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){this.cancelBlur?delete this.cancelBlur:(clearTimeout(this.searching),this.close(e),this._change(e))}}),this._initSource(),this.menu=e("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault(),this.cancelBlur=!0,this._delay((function(){delete this.cancelBlur,this.element[0]!==e.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")}))},menufocus:function(t,i){var s,n;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",(function(){e(t.target).trigger(t.originalEvent)}));n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:n})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(n.value),(s=i.item.attr("aria-label")||n.value)&&e.trim(s).length&&(this.liveRegion.children().hide(),e("<div>").text(s).appendTo(this.liveRegion))},menuselect:function(t,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==e.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay((function(){this.previous=n,this.selectedItem=s}))),!1!==this._trigger("select",t,{item:s})&&this._value(s.value),this.term=this._value(),this.close(t),this.selectedItem=s}}),this.liveRegion=e("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var i=this.menu.element[0];return t.target===this.element[0]||t.target===i||e.contains(i,t.target)},_closeOnClickOutside:function(e){this._isEventTargetInWidget(e)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t&&(t=t.jquery||t.nodeType?e(t):this.document.find(t).eq(0)),t&&t[0]||(t=this.element.closest(".ui-front, dialog")),t.length||(t=this.document[0].body),t},_initSource:function(){var t,i,s=this;e.isArray(this.options.source)?(t=this.options.source,this.source=function(i,s){s(e.ui.autocomplete.filter(t,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(t,n){s.xhr&&s.xhr.abort(),s.xhr=e.ajax({url:i,data:t,dataType:"json",success:function(e){n(e)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(e){clearTimeout(this.searching),this.searching=this._delay((function(){var t=this.term===this._value(),i=this.menu.element.is(":visible"),s=e.altKey||e.ctrlKey||e.metaKey||e.shiftKey;t&&(!t||i||s)||(this.selectedItem=null,this.search(null,e))}),this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length<this.options.minLength?this.close(t):!1!==this._trigger("search",t)?this._search(e):void 0},_search:function(e){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:e},this._response())},_response:function(){var t=++this.requestIndex;return e.proxy((function(e){t===this.requestIndex&&this.__response(e),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")}),this)},__response:function(e){e&&(e=this._normalize(e)),this._trigger("response",null,{content:e}),!this.options.disabled&&e&&e.length&&!this.cancelSearch?(this._suggest(e),this._trigger("open")):this._close()},close:function(e){this.cancelSearch=!0,this._close(e)},_close:function(e){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",e))},_change:function(e){this.previous!==this._value()&&this._trigger("change",e,{item:this.selectedItem})},_normalize:function(t){return t.length&&t[0].label&&t[0].value?t:e.map(t,(function(t){return"string"==typeof t?{label:t,value:t}:e.extend({},t,{label:t.label||t.value,value:t.value||t.label})}))},_suggest:function(t){var i=this.menu.element.empty();this._renderMenu(i,t),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(e.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var e=this.menu.element;e.outerWidth(Math.max(e.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(t,i){var s=this;e.each(i,(function(e,i){s._renderItemData(t,i)}))},_renderItemData:function(e,t){return this._renderItem(e,t).data("ui-autocomplete-item",t)},_renderItem:function(t,i){return e("<li>").append(e("<div>").text(i.label)).appendTo(t)},_move:function(e,t){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[e](t);this.search(null,t)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(e,t),t.preventDefault())},_isContentEditable:function(e){if(!e.length)return!1;var t=e.prop("contentEditable");return"inherit"===t?this._isContentEditable(e.parent()):"true"===t}}),e.extend(e.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,i){var s=new RegExp(e.ui.autocomplete.escapeRegex(i),"i");return e.grep(t,(function(e){return s.test(e.label||e.value||e)}))}}),e.widget("ui.autocomplete",e.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(e>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(t){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=t&&t.length?this.options.messages.results(t.length):this.options.messages.noResults,this.liveRegion.children().hide(),e("<div>").text(i).appendTo(this.liveRegion))}}),e.ui.autocomplete}));;
  /**
   * @file
   * JavaScript behaviors for help.
   */
  
  (function ($, Drupal) {
  
    'use strict';
  
    /**
     * Handles disabling help dialog for mobile devices.
     *
     * @type {Drupal~behavior}
     *
     * @prop {Drupal~behaviorAttach} attach
     *   Attaches the behavior for disabling help dialog for mobile devices.
     */
    Drupal.behaviors.webformHelpDialog = {
      attach: function (context) {
        $(context).find('.button-webform-play').once('webform-help-dialog').on('click', function (event) {
          if ($(window).width() < 768) {
            event.stopImmediatePropagation();
          }
        }).each(function () {
          // Must make sure that this click event handler is execute first and
          // before the Ajax dialog handler.
          // @see http://stackoverflow.com/questions/2360655/jquery-event-handlers-always-execute-in-order-they-were-bound-any-way-around-t
          var handlers = $._data(this, 'events')['click'];
          var handler = handlers.pop();
          // Move it at the beginning.
          handlers.splice(0, 0, handler);
        });
      }
    };
  
  })(jQuery, Drupal);
  ;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal) {
    function init(i, tab) {
      var $tab = $(tab);
      var $target = $tab.find('[data-drupal-nav-tabs-target]');
      var isCollapsible = $tab.hasClass('is-collapsible');
  
      function openMenu(e) {
        $target.toggleClass('is-open');
      }
  
      function handleResize(e) {
        $tab.addClass('is-horizontal');
        var $tabs = $tab.find('.tabs');
        var isHorizontal = $tabs.outerHeight() <= $tabs.find('.tabs__tab').outerHeight();
        $tab.toggleClass('is-horizontal', isHorizontal);
  
        if (isCollapsible) {
          $tab.toggleClass('is-collapse-enabled', !isHorizontal);
        }
  
        if (isHorizontal) {
          $target.removeClass('is-open');
        }
      }
  
      $tab.addClass('position-container is-horizontal-enabled');
      $tab.on('click.tabs', '[data-drupal-nav-tabs-trigger]', openMenu);
      $(window).on('resize.tabs', Drupal.debounce(handleResize, 150)).trigger('resize.tabs');
    }
  
    Drupal.behaviors.navTabs = {
      attach: function attach(context, settings) {
        var $tabs = $(context).find('[data-drupal-nav-tabs]');
  
        if ($tabs.length) {
          var notSmartPhone = window.matchMedia('(min-width: 300px)');
  
          if (notSmartPhone.matches) {
            $tabs.once('nav-tabs').each(init);
          }
        }
      }
    };
  })(jQuery, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, drupalSettings) {
    var activeItem = Drupal.url(drupalSettings.path.currentPath);
  
    $.fn.drupalToolbarMenu = function () {
      var ui = {
        handleOpen: Drupal.t('Extend'),
        handleClose: Drupal.t('Collapse')
      };
  
      function toggleList($item, switcher) {
        var $toggle = $item.children('.toolbar-box').children('.toolbar-handle');
        switcher = typeof switcher !== 'undefined' ? switcher : !$item.hasClass('open');
        $item.toggleClass('open', switcher);
        $toggle.toggleClass('open', switcher);
        $toggle.find('.action').text(switcher ? ui.handleClose : ui.handleOpen);
      }
  
      function toggleClickHandler(event) {
        var $toggle = $(event.target);
        var $item = $toggle.closest('li');
        toggleList($item);
        var $openItems = $item.siblings().filter('.open');
        toggleList($openItems, false);
      }
  
      function linkClickHandler(event) {
        if (!Drupal.toolbar.models.toolbarModel.get('isFixed')) {
          Drupal.toolbar.models.toolbarModel.set('activeTab', null);
        }
  
        event.stopPropagation();
      }
  
      function initItems($menu) {
        var options = {
          class: 'toolbar-icon toolbar-handle',
          action: ui.handleOpen,
          text: ''
        };
        $menu.find('li > a').wrap('<div class="toolbar-box">');
        $menu.find('li').each(function (index, element) {
          var $item = $(element);
  
          if ($item.children('ul.toolbar-menu').length) {
            var $box = $item.children('.toolbar-box');
            options.text = Drupal.t('@label', {
              '@label': $box.find('a').text()
            });
            $item.children('.toolbar-box').append(Drupal.theme('toolbarMenuItemToggle', options));
          }
        });
      }
  
      function markListLevels($lists, level) {
        level = !level ? 1 : level;
        var $lis = $lists.children('li').addClass("level-".concat(level));
        $lists = $lis.children('ul');
  
        if ($lists.length) {
          markListLevels($lists, level + 1);
        }
      }
  
      function openActiveItem($menu) {
        var pathItem = $menu.find("a[href=\"".concat(window.location.pathname, "\"]"));
  
        if (pathItem.length && !activeItem) {
          activeItem = window.location.pathname;
        }
  
        if (activeItem) {
          var $activeItem = $menu.find("a[href=\"".concat(activeItem, "\"]")).addClass('menu-item--active');
          var $activeTrail = $activeItem.parentsUntil('.root', 'li').addClass('menu-item--active-trail');
          toggleList($activeTrail, true);
        }
      }
  
      return this.each(function (selector) {
        var $menu = $(this).once('toolbar-menu');
  
        if ($menu.length) {
          $menu.on('click.toolbar', '.toolbar-box', toggleClickHandler).on('click.toolbar', '.toolbar-box a', linkClickHandler);
          $menu.addClass('root');
          initItems($menu);
          markListLevels($menu);
          openActiveItem($menu);
        }
      });
    };
  
    Drupal.theme.toolbarMenuItemToggle = function (options) {
      return "<button class=\"".concat(options.class, "\"><span class=\"action\">").concat(options.action, "</span> <span class=\"label\">").concat(options.text, "</span></button>");
    };
  })(jQuery, Drupal, drupalSettings);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, drupalSettings) {
    var options = $.extend({
      breakpoints: {
        'toolbar.narrow': '',
        'toolbar.standard': '',
        'toolbar.wide': ''
      }
    }, drupalSettings.toolbar, {
      strings: {
        horizontal: Drupal.t('Horizontal orientation'),
        vertical: Drupal.t('Vertical orientation')
      }
    });
    Drupal.behaviors.toolbar = {
      attach: function attach(context) {
        if (!window.matchMedia('only screen').matches) {
          return;
        }
  
        $(context).find('#toolbar-administration').once('toolbar').each(function () {
          var model = new Drupal.toolbar.ToolbarModel({
            locked: JSON.parse(localStorage.getItem('Drupal.toolbar.trayVerticalLocked')),
            activeTab: document.getElementById(JSON.parse(localStorage.getItem('Drupal.toolbar.activeTabID'))),
            height: $('#toolbar-administration').outerHeight()
          });
          Drupal.toolbar.models.toolbarModel = model;
          Object.keys(options.breakpoints).forEach(function (label) {
            var mq = options.breakpoints[label];
            var mql = window.matchMedia(mq);
            Drupal.toolbar.mql[label] = mql;
            mql.addListener(Drupal.toolbar.mediaQueryChangeHandler.bind(null, model, label));
            Drupal.toolbar.mediaQueryChangeHandler.call(null, model, label, mql);
          });
          Drupal.toolbar.views.toolbarVisualView = new Drupal.toolbar.ToolbarVisualView({
            el: this,
            model: model,
            strings: options.strings
          });
          Drupal.toolbar.views.toolbarAuralView = new Drupal.toolbar.ToolbarAuralView({
            el: this,
            model: model,
            strings: options.strings
          });
          Drupal.toolbar.views.bodyVisualView = new Drupal.toolbar.BodyVisualView({
            el: this,
            model: model
          });
          model.trigger('change:isFixed', model, model.get('isFixed'));
          model.trigger('change:activeTray', model, model.get('activeTray'));
          var menuModel = new Drupal.toolbar.MenuModel();
          Drupal.toolbar.models.menuModel = menuModel;
          Drupal.toolbar.views.menuVisualView = new Drupal.toolbar.MenuVisualView({
            el: $(this).find('.toolbar-menu-administration').get(0),
            model: menuModel,
            strings: options.strings
          });
          Drupal.toolbar.setSubtrees.done(function (subtrees) {
            menuModel.set('subtrees', subtrees);
            var theme = drupalSettings.ajaxPageState.theme;
            localStorage.setItem("Drupal.toolbar.subtrees.".concat(theme), JSON.stringify(subtrees));
            model.set('areSubtreesLoaded', true);
          });
          Drupal.toolbar.views.toolbarVisualView.loadSubtrees();
          $(document).on('drupalViewportOffsetChange.toolbar', function (event, offsets) {
            model.set('offsets', offsets);
          });
          model.on('change:orientation', function (model, orientation) {
            $(document).trigger('drupalToolbarOrientationChange', orientation);
          }).on('change:activeTab', function (model, tab) {
            $(document).trigger('drupalToolbarTabChange', tab);
          }).on('change:activeTray', function (model, tray) {
            $(document).trigger('drupalToolbarTrayChange', tray);
          });
  
          if (Drupal.toolbar.models.toolbarModel.get('orientation') === 'horizontal' && Drupal.toolbar.models.toolbarModel.get('activeTab') === null) {
            Drupal.toolbar.models.toolbarModel.set({
              activeTab: $('.toolbar-bar .toolbar-tab:not(.home-toolbar-tab) a').get(0)
            });
          }
  
          $(window).on({
            'dialog:aftercreate': function dialogAftercreate(event, dialog, $element, settings) {
              var $toolbar = $('#toolbar-bar');
              $toolbar.css('margin-top', '0');
  
              if (settings.drupalOffCanvasPosition === 'top') {
                var height = Drupal.offCanvas.getContainer($element).outerHeight();
                $toolbar.css('margin-top', "".concat(height, "px"));
                $element.on('dialogContentResize.off-canvas', function () {
                  var newHeight = Drupal.offCanvas.getContainer($element).outerHeight();
                  $toolbar.css('margin-top', "".concat(newHeight, "px"));
                });
              }
            },
            'dialog:beforeclose': function dialogBeforeclose() {
              $('#toolbar-bar').css('margin-top', '0');
            }
          });
        });
      }
    };
    Drupal.toolbar = {
      views: {},
      models: {},
      mql: {},
      setSubtrees: new $.Deferred(),
      mediaQueryChangeHandler: function mediaQueryChangeHandler(model, label, mql) {
        switch (label) {
          case 'toolbar.narrow':
            model.set({
              isOriented: mql.matches,
              isTrayToggleVisible: false
            });
  
            if (!mql.matches || !model.get('orientation')) {
              model.set({
                orientation: 'vertical'
              }, {
                validate: true
              });
            }
  
            break;
  
          case 'toolbar.standard':
            model.set({
              isFixed: mql.matches
            });
            break;
  
          case 'toolbar.wide':
            model.set({
              orientation: mql.matches && !model.get('locked') ? 'horizontal' : 'vertical'
            }, {
              validate: true
            });
            model.set({
              isTrayToggleVisible: mql.matches
            });
            break;
  
          default:
            break;
        }
      }
    };
  
    Drupal.theme.toolbarOrientationToggle = function () {
      return '<div class="toolbar-toggle-orientation"><div class="toolbar-lining">' + '<button class="toolbar-icon" type="button"></button>' + '</div></div>';
    };
  
    Drupal.AjaxCommands.prototype.setToolbarSubtrees = function (ajax, response, status) {
      Drupal.toolbar.setSubtrees.resolve(response.subtrees);
    };
  })(jQuery, Drupal, drupalSettings);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function (Backbone, Drupal) {
    Drupal.toolbar.MenuModel = Backbone.Model.extend({
      defaults: {
        subtrees: {}
      }
    });
  })(Backbone, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function (Backbone, Drupal) {
    Drupal.toolbar.ToolbarModel = Backbone.Model.extend({
      defaults: {
        activeTab: null,
        activeTray: null,
        isOriented: false,
        isFixed: false,
        areSubtreesLoaded: false,
        isViewportOverflowConstrained: false,
        orientation: 'horizontal',
        locked: false,
        isTrayToggleVisible: true,
        height: null,
        offsets: {
          top: 0,
          right: 0,
          bottom: 0,
          left: 0
        }
      },
      validate: function validate(attributes, options) {
        if (attributes.orientation === 'horizontal' && this.get('locked') && !options.override) {
          return Drupal.t('The toolbar cannot be set to a horizontal orientation when it is locked.');
        }
      }
    });
  })(Backbone, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, Backbone) {
    Drupal.toolbar.BodyVisualView = Backbone.View.extend({
      initialize: function initialize() {
        this.listenTo(this.model, 'change:activeTray ', this.render);
        this.listenTo(this.model, 'change:isFixed change:isViewportOverflowConstrained', this.isToolbarFixed);
      },
      isToolbarFixed: function isToolbarFixed() {
        var isViewportOverflowConstrained = this.model.get('isViewportOverflowConstrained');
        $('body').toggleClass('toolbar-fixed', isViewportOverflowConstrained || this.model.get('isFixed'));
      },
      render: function render() {
        $('body').toggleClass('toolbar-tray-open', !!this.model.get('activeTray'));
      }
    });
  })(jQuery, Drupal, Backbone);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Backbone, Drupal) {
    Drupal.toolbar.MenuVisualView = Backbone.View.extend({
      initialize: function initialize() {
        this.listenTo(this.model, 'change:subtrees', this.render);
      },
      render: function render() {
        var _this = this;
  
        var subtrees = this.model.get('subtrees');
        Object.keys(subtrees || {}).forEach(function (id) {
          _this.$el.find("#toolbar-link-".concat(id)).once('toolbar-subtrees').after(subtrees[id]);
        });
  
        if ('drupalToolbarMenu' in $.fn) {
          this.$el.children('.toolbar-menu').drupalToolbarMenu();
        }
      }
    });
  })(jQuery, Backbone, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function (Backbone, Drupal) {
    Drupal.toolbar.ToolbarAuralView = Backbone.View.extend({
      initialize: function initialize(options) {
        this.strings = options.strings;
        this.listenTo(this.model, 'change:orientation', this.onOrientationChange);
        this.listenTo(this.model, 'change:activeTray', this.onActiveTrayChange);
      },
      onOrientationChange: function onOrientationChange(model, orientation) {
        Drupal.announce(Drupal.t('Tray orientation changed to @orientation.', {
          '@orientation': orientation
        }));
      },
      onActiveTrayChange: function onActiveTrayChange(model, tray) {
        var relevantTray = tray === null ? model.previous('activeTray') : tray;
  
        if (!relevantTray) {
          return;
        }
  
        var action = tray === null ? Drupal.t('closed') : Drupal.t('opened');
        var trayNameElement = relevantTray.querySelector('.toolbar-tray-name');
        var text;
  
        if (trayNameElement !== null) {
          text = Drupal.t('Tray "@tray" @action.', {
            '@tray': trayNameElement.textContent,
            '@action': action
          });
        } else {
          text = Drupal.t('Tray @action.', {
            '@action': action
          });
        }
  
        Drupal.announce(text);
      }
    });
  })(Backbone, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, drupalSettings, Backbone) {
    Drupal.toolbar.ToolbarVisualView = Backbone.View.extend({
      events: function events() {
        var touchEndToClick = function touchEndToClick(event) {
          event.preventDefault();
          event.target.click();
        };
  
        return {
          'click .toolbar-bar .toolbar-tab .trigger': 'onTabClick',
          'click .toolbar-toggle-orientation button': 'onOrientationToggleClick',
          'touchend .toolbar-bar .toolbar-tab .trigger': touchEndToClick,
          'touchend .toolbar-toggle-orientation button': touchEndToClick
        };
      },
      initialize: function initialize(options) {
        this.strings = options.strings;
        this.listenTo(this.model, 'change:activeTab change:orientation change:isOriented change:isTrayToggleVisible', this.render);
        this.listenTo(this.model, 'change:mqMatches', this.onMediaQueryChange);
        this.listenTo(this.model, 'change:offsets', this.adjustPlacement);
        this.listenTo(this.model, 'change:activeTab change:orientation change:isOriented', this.updateToolbarHeight);
        this.$el.find('.toolbar-tray .toolbar-lining').append(Drupal.theme('toolbarOrientationToggle'));
        this.model.trigger('change:activeTab');
      },
      updateToolbarHeight: function updateToolbarHeight() {
        var toolbarTabOuterHeight = $('#toolbar-bar').find('.toolbar-tab').outerHeight() || 0;
        var toolbarTrayHorizontalOuterHeight = $('.is-active.toolbar-tray-horizontal').outerHeight() || 0;
        this.model.set('height', toolbarTabOuterHeight + toolbarTrayHorizontalOuterHeight);
        $('body').css({
          'padding-top': this.model.get('height')
        });
        this.triggerDisplace();
      },
      triggerDisplace: function triggerDisplace() {
        _.defer(function () {
          Drupal.displace(true);
        });
      },
      render: function render() {
        this.updateTabs();
        this.updateTrayOrientation();
        this.updateBarAttributes();
        $('body').removeClass('toolbar-loading');
  
        if (this.model.changed.orientation === 'vertical' || this.model.changed.activeTab) {
          this.loadSubtrees();
        }
  
        return this;
      },
      onTabClick: function onTabClick(event) {
        if (event.currentTarget.hasAttribute('data-toolbar-tray')) {
          var activeTab = this.model.get('activeTab');
          var clickedTab = event.currentTarget;
          this.model.set('activeTab', !activeTab || clickedTab !== activeTab ? clickedTab : null);
          event.preventDefault();
          event.stopPropagation();
        }
      },
      onOrientationToggleClick: function onOrientationToggleClick(event) {
        var orientation = this.model.get('orientation');
        var antiOrientation = orientation === 'vertical' ? 'horizontal' : 'vertical';
        var locked = antiOrientation === 'vertical';
  
        if (locked) {
          localStorage.setItem('Drupal.toolbar.trayVerticalLocked', 'true');
        } else {
          localStorage.removeItem('Drupal.toolbar.trayVerticalLocked');
        }
  
        this.model.set({
          locked: locked,
          orientation: antiOrientation
        }, {
          validate: true,
          override: true
        });
        event.preventDefault();
        event.stopPropagation();
      },
      updateTabs: function updateTabs() {
        var $tab = $(this.model.get('activeTab'));
        $(this.model.previous('activeTab')).removeClass('is-active').prop('aria-pressed', false);
        $(this.model.previous('activeTray')).removeClass('is-active');
  
        if ($tab.length > 0) {
          $tab.addClass('is-active').prop('aria-pressed', true);
          var name = $tab.attr('data-toolbar-tray');
          var id = $tab.get(0).id;
  
          if (id) {
            localStorage.setItem('Drupal.toolbar.activeTabID', JSON.stringify(id));
          }
  
          var $tray = this.$el.find("[data-toolbar-tray=\"".concat(name, "\"].toolbar-tray"));
  
          if ($tray.length) {
            $tray.addClass('is-active');
            this.model.set('activeTray', $tray.get(0));
          } else {
            this.model.set('activeTray', null);
          }
        } else {
          this.model.set('activeTray', null);
          localStorage.removeItem('Drupal.toolbar.activeTabID');
        }
      },
      updateBarAttributes: function updateBarAttributes() {
        var isOriented = this.model.get('isOriented');
  
        if (isOriented) {
          this.$el.find('.toolbar-bar').attr('data-offset-top', '');
        } else {
          this.$el.find('.toolbar-bar').removeAttr('data-offset-top');
        }
  
        this.$el.toggleClass('toolbar-oriented', isOriented);
      },
      updateTrayOrientation: function updateTrayOrientation() {
        var orientation = this.model.get('orientation');
        var antiOrientation = orientation === 'vertical' ? 'horizontal' : 'vertical';
        $('body').toggleClass('toolbar-vertical', orientation === 'vertical').toggleClass('toolbar-horizontal', orientation === 'horizontal');
        var removeClass = antiOrientation === 'horizontal' ? 'toolbar-tray-horizontal' : 'toolbar-tray-vertical';
        var $trays = this.$el.find('.toolbar-tray').removeClass(removeClass).addClass("toolbar-tray-".concat(orientation));
        var iconClass = "toolbar-icon-toggle-".concat(orientation);
        var iconAntiClass = "toolbar-icon-toggle-".concat(antiOrientation);
        var $orientationToggle = this.$el.find('.toolbar-toggle-orientation').toggle(this.model.get('isTrayToggleVisible'));
        $orientationToggle.find('button').val(antiOrientation).attr('title', this.strings[antiOrientation]).text(this.strings[antiOrientation]).removeClass(iconClass).addClass(iconAntiClass);
        var dir = document.documentElement.dir;
        var edge = dir === 'rtl' ? 'right' : 'left';
        $trays.removeAttr('data-offset-left data-offset-right data-offset-top');
        $trays.filter('.toolbar-tray-vertical.is-active').attr("data-offset-".concat(edge), '');
        $trays.filter('.toolbar-tray-horizontal.is-active').attr('data-offset-top', '');
      },
      adjustPlacement: function adjustPlacement() {
        var $trays = this.$el.find('.toolbar-tray');
  
        if (!this.model.get('isOriented')) {
          $trays.removeClass('toolbar-tray-horizontal').addClass('toolbar-tray-vertical');
        }
      },
      loadSubtrees: function loadSubtrees() {
        var $activeTab = $(this.model.get('activeTab'));
        var orientation = this.model.get('orientation');
  
        if (!this.model.get('areSubtreesLoaded') && typeof $activeTab.data('drupal-subtrees') !== 'undefined' && orientation === 'vertical') {
          var subtreesHash = drupalSettings.toolbar.subtreesHash;
          var theme = drupalSettings.ajaxPageState.theme;
          var endpoint = Drupal.url("toolbar/subtrees/".concat(subtreesHash));
          var cachedSubtreesHash = localStorage.getItem("Drupal.toolbar.subtreesHash.".concat(theme));
          var cachedSubtrees = JSON.parse(localStorage.getItem("Drupal.toolbar.subtrees.".concat(theme)));
          var isVertical = this.model.get('orientation') === 'vertical';
  
          if (isVertical && subtreesHash === cachedSubtreesHash && cachedSubtrees) {
            Drupal.toolbar.setSubtrees.resolve(cachedSubtrees);
          } else if (isVertical) {
              localStorage.removeItem("Drupal.toolbar.subtreesHash.".concat(theme));
              localStorage.removeItem("Drupal.toolbar.subtrees.".concat(theme));
              Drupal.ajax({
                url: endpoint
              }).execute();
              localStorage.setItem("Drupal.toolbar.subtreesHash.".concat(theme), subtreesHash);
            }
        }
      }
    });
  })(jQuery, Drupal, drupalSettings, Backbone);;
    /*
   * jQuery Foundation Joyride Plugin 2.1
   * http://foundation.zurb.com
   * Copyright 2013, ZURB
   * Free to use under the MIT license.
   * http://www.opensource.org/licenses/mit-license.php
  */
  
  /*jslint unparam: true, browser: true, indent: 2 */
  
  ;(function ($, window, undefined) {
    'use strict';
  
    var defaults = {
        'version'              : '2.1',
        'tipLocation'          : 'bottom',  // 'top' or 'bottom' in relation to parent
        'nubPosition'          : 'auto',    // override on a per tooltip bases
        'scroll'               : true,      // whether to scroll to tips
        'scrollSpeed'          : 300,       // Page scrolling speed in milliseconds
        'timer'                : 0,         // 0 = no timer , all other numbers = timer in milliseconds
        'autoStart'            : false,     // true or false - false tour starts when restart called
        'startTimerOnClick'    : true,      // true or false - true requires clicking the first button start the timer
        'startOffset'          : 0,         // the index of the tooltip you want to start on (index of the li)
        'nextButton'           : true,      // true or false to control whether a next button is used
        'tipAnimation'         : 'fade',    // 'pop' or 'fade' in each tip
        'pauseAfter'           : [],        // array of indexes where to pause the tour after
        'tipAnimationFadeSpeed': 300,       // when tipAnimation = 'fade' this is speed in milliseconds for the transition
        'cookieMonster'        : false,     // true or false to control whether cookies are used
        'cookieName'           : 'joyride', // Name the cookie you'll use
        'cookieDomain'         : false,     // Will this cookie be attached to a domain, ie. '.notableapp.com'
        'cookiePath'           : false,     // Set to '/' if you want the cookie for the whole website
        'localStorage'         : false,     // true or false to control whether localstorage is used
        'localStorageKey'      : 'joyride', // Keyname in localstorage
        'tipContainer'         : 'body',    // Where will the tip be attached
        'modal'                : false,     // Whether to cover page with modal during the tour
        'expose'               : false,     // Whether to expose the elements at each step in the tour (requires modal:true)
        'postExposeCallback'   : $.noop,    // A method to call after an element has been exposed
        'preRideCallback'      : $.noop,    // A method to call before the tour starts (passed index, tip, and cloned exposed element)
        'postRideCallback'     : $.noop,    // A method to call once the tour closes (canceled or complete)
        'preStepCallback'      : $.noop,    // A method to call before each step
        'postStepCallback'     : $.noop,    // A method to call after each step
        'template' : { // HTML segments for tip layout
          'link'    : '<a href="#close" class="joyride-close-tip">X</a>',
          'timer'   : '<div class="joyride-timer-indicator-wrap"><span class="joyride-timer-indicator"></span></div>',
          'tip'     : '<div class="joyride-tip-guide"><span class="joyride-nub"></span></div>',
          'wrapper' : '<div class="joyride-content-wrapper" role="dialog"></div>',
          'button'  : '<a href="#" class="joyride-next-tip"></a>',
          'modal'   : '<div class="joyride-modal-bg"></div>',
          'expose'  : '<div class="joyride-expose-wrapper"></div>',
          'exposeCover': '<div class="joyride-expose-cover"></div>'
        }
      },
  
      Modernizr = Modernizr || false,
  
      settings = {},
  
      methods = {
  
        init : function (opts) {
          return this.each(function () {
  
            if ($.isEmptyObject(settings)) {
              settings = $.extend(true, defaults, opts);
  
              // non configurable settings
              settings.document = window.document;
              settings.$document = $(settings.document);
              settings.$window = $(window);
              settings.$content_el = $(this);
              settings.$body = $(settings.tipContainer);
              settings.body_offset = $(settings.tipContainer).position();
              settings.$tip_content = $('> li', settings.$content_el);
              settings.paused = false;
              settings.attempts = 0;
  
              settings.tipLocationPatterns = {
                top: ['bottom'],
                bottom: [], // bottom should not need to be repositioned
                left: ['right', 'top', 'bottom'],
                right: ['left', 'top', 'bottom']
              };
  
              // are we using jQuery 1.7+
              methods.jquery_check();
  
              // can we create cookies?
              if (!$.isFunction($.cookie)) {
                settings.cookieMonster = false;
              }
  
              // generate the tips and insert into dom.
              if ( (!settings.cookieMonster || !$.cookie(settings.cookieName) ) &&
                (!settings.localStorage || !methods.support_localstorage() || !localStorage.getItem(settings.localStorageKey) ) ) {
  
                settings.$tip_content.each(function (index) {
                  methods.create({$li : $(this), index : index});
                });
  
                // show first tip
                if(settings.autoStart)
                {
                  if (!settings.startTimerOnClick && settings.timer > 0) {
                    methods.show('init');
                    methods.startTimer();
                  } else {
                    methods.show('init');
                  }
                }
  
              }
  
              settings.$document.on('click.joyride', '.joyride-next-tip, .joyride-modal-bg', function (e) {
                e.preventDefault();
  
                if (settings.$li.next().length < 1) {
                  methods.end();
                } else if (settings.timer > 0) {
                  clearTimeout(settings.automate);
                  methods.hide();
                  methods.show();
                  methods.startTimer();
                } else {
                  methods.hide();
                  methods.show();
                }
  
              });
  
              settings.$document.on('click.joyride', '.joyride-close-tip', function (e) {
                e.preventDefault();
                methods.end(true /* isAborted */);
              });
  
              settings.$window.on('resize.joyride', function (e) {
                if(settings.$li){
                if(settings.exposed && settings.exposed.length>0){
                  var $els = $(settings.exposed);
                  $els.each(function(){
                    var $this = $(this);
                    methods.un_expose($this);
                    methods.expose($this);
                  });
                }
                if (methods.is_phone()) {
                  methods.pos_phone();
                } else {
                  methods.pos_default();
                }
                }
              });
            } else {
              methods.restart();
            }
  
          });
        },
  
        // call this method when you want to resume the tour
        resume : function () {
          methods.set_li();
          methods.show();
        },
  
        nextTip: function(){
              if (settings.$li.next().length < 1) {
              methods.end();
              } else if (settings.timer > 0) {
              clearTimeout(settings.automate);
              methods.hide();
              methods.show();
              methods.startTimer();
              } else {
              methods.hide();
              methods.show();
              }
        },
  
        tip_template : function (opts) {
          var $blank, content, $wrapper;
  
          opts.tip_class = opts.tip_class || '';
  
          $blank = $(settings.template.tip).addClass(opts.tip_class);
          content = $.trim($(opts.li).html()) +
            methods.button_text(opts.button_text) +
            settings.template.link +
            methods.timer_instance(opts.index);
  
          $wrapper = $(settings.template.wrapper);
          if (opts.li.attr('data-aria-labelledby')) {
            $wrapper.attr('aria-labelledby', opts.li.attr('data-aria-labelledby'))
          }
          if (opts.li.attr('data-aria-describedby')) {
            $wrapper.attr('aria-describedby', opts.li.attr('data-aria-describedby'))
          }
          $blank.append($wrapper);
          $blank.first().attr('data-index', opts.index);
          $('.joyride-content-wrapper', $blank).append(content);
  
          return $blank[0];
        },
  
        timer_instance : function (index) {
          var txt;
  
          if ((index === 0 && settings.startTimerOnClick && settings.timer > 0) || settings.timer === 0) {
            txt = '';
          } else {
            txt = methods.outerHTML($(settings.template.timer)[0]);
          }
          return txt;
        },
  
        button_text : function (txt) {
          if (settings.nextButton) {
            txt = $.trim(txt) || 'Next';
            txt = methods.outerHTML($(settings.template.button).append(txt)[0]);
          } else {
            txt = '';
          }
          return txt;
        },
  
        create : function (opts) {
          // backwards compatibility with data-text attribute
          var buttonText = opts.$li.attr('data-button') || opts.$li.attr('data-text'),
            tipClass = opts.$li.attr('class'),
            $tip_content = $(methods.tip_template({
              tip_class : tipClass,
              index : opts.index,
              button_text : buttonText,
              li : opts.$li
            }));
  
          $(settings.tipContainer).append($tip_content);
        },
  
        show : function (init) {
          var opts = {}, ii, opts_arr = [], opts_len = 0, p,
              $timer = null;
  
          // are we paused?
          if (settings.$li === undefined || ($.inArray(settings.$li.index(), settings.pauseAfter) === -1)) {
  
            // don't go to the next li if the tour was paused
            if (settings.paused) {
              settings.paused = false;
            } else {
              methods.set_li(init);
            }
  
            settings.attempts = 0;
  
            if (settings.$li.length && settings.$target.length > 0) {
              if(init){ //run when we first start
                  settings.preRideCallback(settings.$li.index(), settings.$next_tip );
                  if(settings.modal){
                      methods.show_modal();
                  }
              }
              settings.preStepCallback(settings.$li.index(), settings.$next_tip );
  
              // parse options
              opts_arr = (settings.$li.data('options') || ':').split(';');
              opts_len = opts_arr.length;
              for (ii = opts_len - 1; ii >= 0; ii--) {
                p = opts_arr[ii].split(':');
  
                if (p.length === 2) {
                  opts[$.trim(p[0])] = $.trim(p[1]);
                }
              }
              settings.tipSettings = $.extend({}, settings, opts);
              settings.tipSettings.tipLocationPattern = settings.tipLocationPatterns[settings.tipSettings.tipLocation];
  
              if(settings.modal && settings.expose){
                methods.expose();
              }
  
              // scroll if not modal
              if (!settings.$target.is("body") && settings.scroll) {
                methods.scroll_to();
              }
  
              if (methods.is_phone()) {
                methods.pos_phone(true);
              } else {
                methods.pos_default(true);
              }
  
              $timer = $('.joyride-timer-indicator', settings.$next_tip);
  
              if (/pop/i.test(settings.tipAnimation)) {
  
                $timer.outerWidth(0);
  
                if (settings.timer > 0) {
  
                  settings.$next_tip.show();
                  $timer.animate({
                    width: $('.joyride-timer-indicator-wrap', settings.$next_tip).outerWidth()
                  }, settings.timer);
  
                } else {
  
                  settings.$next_tip.show();
  
                }
  
  
              } else if (/fade/i.test(settings.tipAnimation)) {
  
                $timer.outerWidth(0);
  
                if (settings.timer > 0) {
  
                  settings.$next_tip.fadeIn(settings.tipAnimationFadeSpeed);
  
                  settings.$next_tip.show();
                  $timer.animate({
                    width: $('.joyride-timer-indicator-wrap', settings.$next_tip).outerWidth()
                  }, settings.timer);
  
                } else {
  
                  settings.$next_tip.fadeIn(settings.tipAnimationFadeSpeed);
  
                }
              }
  
              settings.$current_tip = settings.$next_tip;
              // Focus next button for keyboard users.
              $('.joyride-next-tip', settings.$current_tip).focus();
              methods.tabbable(settings.$current_tip);
            // skip non-existent targets
            } else if (settings.$li && settings.$target.length < 1) {
  
              methods.show();
  
            } else {
  
              methods.end();
  
            }
          } else {
  
            settings.paused = true;
  
          }
  
        },
  
        // detect phones with media queries if supported.
        is_phone : function () {
          if (Modernizr) {
            return Modernizr.mq('only screen and (max-width: 767px)');
          }
  
          return (settings.$window.width() < 767) ? true : false;
        },
  
        support_localstorage : function () {
          if (Modernizr) {
            return Modernizr.localstorage;
          } else {
            return !!window.localStorage;
          }
        },
  
        hide : function () {
          if(settings.modal && settings.expose){
            methods.un_expose();
          }
          if(!settings.modal){
          $('.joyride-modal-bg').hide();
          }
          settings.$current_tip.hide();
          settings.postStepCallback(settings.$li.index(), settings.$current_tip);
        },
  
        set_li : function (init) {
          if (init) {
            settings.$li = settings.$tip_content.eq(settings.startOffset);
            methods.set_next_tip();
            settings.$current_tip = settings.$next_tip;
          } else {
            settings.$li = settings.$li.next();
            methods.set_next_tip();
          }
  
          methods.set_target();
        },
  
        set_next_tip : function () {
          settings.$next_tip = $('.joyride-tip-guide[data-index=' + settings.$li.index() + ']');
        },
  
        set_target : function () {
          var cl = settings.$li.attr('data-class'),
              id = settings.$li.attr('data-id'),
              $sel = function () {
                if (id) {
                  return $(settings.document.getElementById(id));
                } else if (cl) {
                  return $('.' + cl).filter(":visible").first();
                } else {
                  return $('body');
                }
              };
  
          settings.$target = $sel();
        },
  
        scroll_to : function () {
          var window_half, tipOffset;
  
          window_half = settings.$window.height() / 2;
          tipOffset = Math.ceil(settings.$target.offset().top - window_half + settings.$next_tip.outerHeight());
  
          $("html, body").stop().animate({
            scrollTop: tipOffset
          }, settings.scrollSpeed);
        },
  
        paused : function () {
          if (($.inArray((settings.$li.index() + 1), settings.pauseAfter) === -1)) {
            return true;
          }
  
          return false;
        },
  
        destroy : function () {
          if(!$.isEmptyObject(settings)){
          settings.$document.off('.joyride');
          }
  
          $(window).off('.joyride');
          $('.joyride-close-tip, .joyride-next-tip, .joyride-modal-bg').off('.joyride');
          $('.joyride-tip-guide, .joyride-modal-bg').remove();
          clearTimeout(settings.automate);
          settings = {};
        },
  
        restart : function () {
          if(!settings.autoStart)
          {
            if (!settings.startTimerOnClick && settings.timer > 0) {
              methods.show('init');
              methods.startTimer();
            } else {
              methods.show('init');
            }
            settings.autoStart = true;
          }
          else
          {
          methods.hide();
          settings.$li = undefined;
          methods.show('init');
          }
        },
  
        pos_default : function (init) {
          var half_fold = Math.ceil(settings.$window.height() / 2),
              tip_position = settings.$next_tip.offset(),
              $nub = $('.joyride-nub', settings.$next_tip),
              nub_width = Math.ceil($nub.outerWidth() / 2),
              nub_height = Math.ceil($nub.outerHeight() / 2),
              toggle = init || false;
  
          // tip must not be "display: none" to calculate position
          if (toggle) {
            settings.$next_tip.css('visibility', 'hidden');
            settings.$next_tip.show();
          }
  
          if (!settings.$target.is("body")) {
              var
                topAdjustment = settings.tipSettings.tipAdjustmentY ? parseInt(settings.tipSettings.tipAdjustmentY) : 0,
                leftAdjustment = settings.tipSettings.tipAdjustmentX ? parseInt(settings.tipSettings.tipAdjustmentX) : 0;
  
              if (methods.bottom()) {
                settings.$next_tip.css({
                  top: (settings.$target.offset().top + nub_height + settings.$target.outerHeight() + topAdjustment),
                  left: settings.$target.offset().left + leftAdjustment});
  
                if (/right/i.test(settings.tipSettings.nubPosition)) {
                  settings.$next_tip.css('left', settings.$target.offset().left - settings.$next_tip.outerWidth() + settings.$target.outerWidth());
                }
  
                methods.nub_position($nub, settings.tipSettings.nubPosition, 'top');
  
              } else if (methods.top()) {
  
                settings.$next_tip.css({
                  top: (settings.$target.offset().top - settings.$next_tip.outerHeight() - nub_height + topAdjustment),
                  left: settings.$target.offset().left + leftAdjustment});
  
                methods.nub_position($nub, settings.tipSettings.nubPosition, 'bottom');
  
              } else if (methods.right()) {
  
                settings.$next_tip.css({
                  top: settings.$target.offset().top + topAdjustment,
                  left: (settings.$target.outerWidth() + settings.$target.offset().left + nub_width) + leftAdjustment});
  
                methods.nub_position($nub, settings.tipSettings.nubPosition, 'left');
  
              } else if (methods.left()) {
  
                settings.$next_tip.css({
                  top: settings.$target.offset().top + topAdjustment,
                  left: (settings.$target.offset().left - settings.$next_tip.outerWidth() - nub_width) + leftAdjustment});
  
                methods.nub_position($nub, settings.tipSettings.nubPosition, 'right');
  
              }
  
              if (!methods.visible(methods.corners(settings.$next_tip)) && settings.attempts < settings.tipSettings.tipLocationPattern.length) {
  
                $nub.removeClass('bottom')
                  .removeClass('top')
                  .removeClass('right')
                  .removeClass('left');
  
                settings.tipSettings.tipLocation = settings.tipSettings.tipLocationPattern[settings.attempts];
  
                settings.attempts++;
  
                methods.pos_default(true);
  
              }
  
          } else if (settings.$li.length) {
  
            methods.pos_modal($nub);
  
          }
  
          if (toggle) {
            settings.$next_tip.hide();
            settings.$next_tip.css('visibility', 'visible');
          }
  
        },
  
        pos_phone : function (init) {
          var tip_height = settings.$next_tip.outerHeight(),
              tip_offset = settings.$next_tip.offset(),
              target_height = settings.$target.outerHeight(),
              $nub = $('.joyride-nub', settings.$next_tip),
              nub_height = Math.ceil($nub.outerHeight() / 2),
              toggle = init || false;
  
          $nub.removeClass('bottom')
            .removeClass('top')
            .removeClass('right')
            .removeClass('left');
  
          if (toggle) {
            settings.$next_tip.css('visibility', 'hidden');
            settings.$next_tip.show();
          }
  
          if (!settings.$target.is("body")) {
  
            if (methods.top()) {
  
                settings.$next_tip.offset({top: settings.$target.offset().top - tip_height - nub_height});
                $nub.addClass('bottom');
  
            } else {
  
              settings.$next_tip.offset({top: settings.$target.offset().top + target_height + nub_height});
              $nub.addClass('top');
  
            }
  
          } else if (settings.$li.length) {
  
            methods.pos_modal($nub);
  
          }
  
          if (toggle) {
            settings.$next_tip.hide();
            settings.$next_tip.css('visibility', 'visible');
          }
        },
  
        pos_modal : function ($nub) {
          methods.center();
          $nub.hide();
  
          methods.show_modal();
  
        },
  
        show_modal : function() {
          if ($('.joyride-modal-bg').length < 1) {
              $('body').append(settings.template.modal).show();
          }
  
          if (/pop/i.test(settings.tipAnimation)) {
            $('.joyride-modal-bg').show();
          } else {
            $('.joyride-modal-bg').fadeIn(settings.tipAnimationFadeSpeed);
          }
        },
  
        expose: function(){
          var expose,
            exposeCover,
            el,
            origCSS,
            randId = 'expose-'+Math.floor(Math.random()*10000);
          if (arguments.length>0 && arguments[0] instanceof $){
            el = arguments[0];
          } else if(settings.$target && !settings.$target.is("body")){
            el = settings.$target;
          }  else {
            return false;
          }
          if(el.length < 1){
            if(window.console){
              console.error('element not valid', el);
            }
            return false;
          }
          expose = $(settings.template.expose);
          settings.$body.append(expose);
          expose.css({
            top: el.offset().top,
            left: el.offset().left,
            width: el.outerWidth(true),
            height: el.outerHeight(true)
          });
          exposeCover = $(settings.template.exposeCover);
          origCSS = {
                    zIndex: el.css('z-index'),
                    position: el.css('position')
                    };
          el.css('z-index',expose.css('z-index')*1+1);
          if(origCSS.position == 'static'){
            el.css('position','relative');
          }
          el.data('expose-css',origCSS);
          exposeCover.css({
            top: el.offset().top,
            left: el.offset().left,
            width: el.outerWidth(true),
            height: el.outerHeight(true)
          });
          settings.$body.append(exposeCover);
          expose.addClass(randId);
          exposeCover.addClass(randId);
          if(settings.tipSettings['exposeClass']){
            expose.addClass(settings.tipSettings['exposeClass']);
            exposeCover.addClass(settings.tipSettings['exposeClass']);
          }
          el.data('expose', randId);
          settings.postExposeCallback(settings.$li.index(), settings.$next_tip, el);
          methods.add_exposed(el);
        },
  
        un_expose: function(){
          var exposeId,
            el,
            expose ,
            origCSS,
            clearAll = false;
          if (arguments.length>0 && arguments[0] instanceof $){
            el = arguments[0];
          } else if(settings.$target && !settings.$target.is("body")){
            el = settings.$target;
          }  else {
            return false;
          }
          if(el.length < 1){
            if(window.console){
              console.error('element not valid', el);
            }
            return false;
          }
          exposeId = el.data('expose');
          expose = $('.'+exposeId);
          if(arguments.length>1){
            clearAll = arguments[1];
          }
          if(clearAll === true){
            $('.joyride-expose-wrapper,.joyride-expose-cover').remove();
          } else {
            expose.remove();
          }
          origCSS = el.data('expose-css');
          if(origCSS.zIndex == 'auto'){
            el.css('z-index', '');
          } else {
            el.css('z-index',origCSS.zIndex);
          }
          if(origCSS.position != el.css('position')){
            if(origCSS.position == 'static'){// this is default, no need to set it.
              el.css('position', '');
            } else {
              el.css('position',origCSS.position);
            }
          }
          el.removeData('expose');
          el.removeData('expose-z-index');
          methods.remove_exposed(el);
        },
  
        add_exposed: function(el){
          settings.exposed = settings.exposed || [];
          if(el instanceof $){
            settings.exposed.push(el[0]);
          } else if(typeof el == 'string'){
            settings.exposed.push(el);
          }
        },
  
        remove_exposed: function(el){
          var search;
          if(el instanceof $){
            search = el[0]
          } else if (typeof el == 'string'){
            search = el;
          }
          settings.exposed = settings.exposed || [];
          for(var i=0; i<settings.exposed.length; i++){
            if(settings.exposed[i] == search){
              settings.exposed.splice(i,1);
              return;
            }
          }
        },
  
        center : function () {
          var $w = settings.$window;
  
          settings.$next_tip.css({
            top : ((($w.height() - settings.$next_tip.outerHeight()) / 2) + $w.scrollTop()),
            left : ((($w.width() - settings.$next_tip.outerWidth()) / 2) + $w.scrollLeft())
          });
  
          return true;
        },
  
        bottom : function () {
          return /bottom/i.test(settings.tipSettings.tipLocation);
        },
  
        top : function () {
          return /top/i.test(settings.tipSettings.tipLocation);
        },
  
        right : function () {
          return /right/i.test(settings.tipSettings.tipLocation);
        },
  
        left : function () {
          return /left/i.test(settings.tipSettings.tipLocation);
        },
  
        corners : function (el) {
          var w = settings.$window,
              window_half = w.height() / 2,
              tipOffset = Math.ceil(settings.$target.offset().top - window_half + settings.$next_tip.outerHeight()),//using this to calculate since scroll may not have finished yet.
              right = w.width() + w.scrollLeft(),
              offsetBottom =  w.height() + tipOffset,
              bottom = w.height() + w.scrollTop(),
              top = w.scrollTop();
  
              if(tipOffset < top){
                if (tipOffset <0 ){
                  top = 0;
                } else {
                  top = tipOffset;
                }
              }
  
              if(offsetBottom > bottom){
                bottom = offsetBottom;
              }
  
          return [
            el.offset().top < top,
            right < el.offset().left + el.outerWidth(),
            bottom < el.offset().top + el.outerHeight(),
            w.scrollLeft() > el.offset().left
          ];
        },
  
        visible : function (hidden_corners) {
          var i = hidden_corners.length;
  
          while (i--) {
            if (hidden_corners[i]) return false;
          }
  
          return true;
        },
  
        nub_position : function (nub, pos, def) {
          if (pos === 'auto') {
            nub.addClass(def);
          } else {
            nub.addClass(pos);
          }
        },
  
        startTimer : function () {
          if (settings.$li.length) {
            settings.automate = setTimeout(function () {
              methods.hide();
              methods.show();
              methods.startTimer();
            }, settings.timer);
          } else {
            clearTimeout(settings.automate);
          }
        },
  
        end : function (isAborted) {
          isAborted = isAborted || false;
  
          // Unbind resize events.
          if (isAborted) {
            settings.$window.off('resize.joyride');
          }
  
          if (settings.cookieMonster) {
            $.cookie(settings.cookieName, 'ridden', { expires: 365, domain: settings.cookieDomain, path: settings.cookiePath });
          }
  
          if (settings.localStorage) {
            localStorage.setItem(settings.localStorageKey, true);
          }
  
          if (settings.timer > 0) {
            clearTimeout(settings.automate);
          }
          if(settings.modal && settings.expose){
            methods.un_expose();
          }
          if (settings.$current_tip) {
            settings.$current_tip.hide();
          }
          if (settings.$li) {
            settings.postStepCallback(settings.$li.index(), settings.$current_tip, isAborted);
            settings.postRideCallback(settings.$li.index(), settings.$current_tip, isAborted);
          }
          $('.joyride-modal-bg').hide();
        },
  
        jquery_check : function () {
          // define on() and off() for older jQuery
          if (!$.isFunction($.fn.on)) {
  
            $.fn.on = function (types, sel, fn) {
  
              return this.delegate(sel, types, fn);
  
            };
  
            $.fn.off = function (types, sel, fn) {
  
              return this.undelegate(sel, types, fn);
  
            };
  
            return false;
          }
  
          return true;
        },
  
        outerHTML : function (el) {
          // support FireFox < 11
          return el.outerHTML || new XMLSerializer().serializeToString(el);
        },
  
        version : function () {
          return settings.version;
        },
  
        tabbable : function (el) {
          $(el).on('keydown', function( event ) {
            if (!event.isDefaultPrevented() && event.keyCode &&
                // Escape key.
                event.keyCode === 27 ) {
              event.preventDefault();
              methods.end(true /* isAborted */);
              return;
            }
  
            // Prevent tabbing out of tour items.
            if ( event.keyCode !== 9 ) {
              return;
            }
            var tabbables = $(el).find(":tabbable"),
              first = tabbables.filter(":first"),
              last  = tabbables.filter(":last");
            if ( event.target === last[0] && !event.shiftKey ) {
              first.focus( 1 );
              event.preventDefault();
            } else if ( event.target === first[0] && event.shiftKey ) {
              last.focus( 1 );
              event.preventDefault();
            }
          });
        }
  
      };
  
    $.fn.joyride = function (method) {
      if (methods[method]) {
        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
      } else if (typeof method === 'object' || !method) {
        return methods.init.apply(this, arguments);
      } else {
        $.error('Method ' +  method + ' does not exist on jQuery.joyride');
      }
    };
  
  }(jQuery, this));
  ;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Backbone, Drupal, document) {
    var queryString = decodeURI(window.location.search);
    Drupal.behaviors.tour = {
      attach: function attach(context) {
        $('body').once('tour').each(function () {
          var model = new Drupal.tour.models.StateModel();
          new Drupal.tour.views.ToggleTourView({
            el: $(context).find('#toolbar-tab-tour'),
            model: model
          });
          model.on('change:isActive', function (model, isActive) {
            $(document).trigger(isActive ? 'drupalTourStarted' : 'drupalTourStopped');
          }).set('tour', $(context).find('ol#tour'));
  
          if (/tour=?/i.test(queryString)) {
            model.set('isActive', true);
          }
        });
      }
    };
    Drupal.tour = Drupal.tour || {
      models: {},
      views: {}
    };
    Drupal.tour.models.StateModel = Backbone.Model.extend({
      defaults: {
        tour: [],
        isActive: false,
        activeTour: []
      }
    });
    Drupal.tour.views.ToggleTourView = Backbone.View.extend({
      events: {
        click: 'onClick'
      },
      initialize: function initialize() {
        this.listenTo(this.model, 'change:tour change:isActive', this.render);
        this.listenTo(this.model, 'change:isActive', this.toggleTour);
      },
      render: function render() {
        this.$el.toggleClass('hidden', this._getTour().length === 0);
        var isActive = this.model.get('isActive');
        this.$el.find('button').toggleClass('is-active', isActive).prop('aria-pressed', isActive);
        return this;
      },
      toggleTour: function toggleTour() {
        if (this.model.get('isActive')) {
          var $tour = this._getTour();
  
          this._removeIrrelevantTourItems($tour, this._getDocument());
  
          var that = this;
          var close = Drupal.t('Close');
  
          if ($tour.find('li').length) {
            $tour.joyride({
              autoStart: true,
              postRideCallback: function postRideCallback() {
                that.model.set('isActive', false);
              },
              template: {
                link: "<a href=\"#close\" class=\"joyride-close-tip\" aria-label=\"".concat(close, "\">&times;</a>"),
                button: '<a href="#" class="button button--primary joyride-next-tip"></a>'
              }
            });
            this.model.set({
              isActive: true,
              activeTour: $tour
            });
          }
        } else {
          this.model.get('activeTour').joyride('destroy');
          this.model.set({
            isActive: false,
            activeTour: []
          });
        }
      },
      onClick: function onClick(event) {
        this.model.set('isActive', !this.model.get('isActive'));
        event.preventDefault();
        event.stopPropagation();
      },
      _getTour: function _getTour() {
        return this.model.get('tour');
      },
      _getDocument: function _getDocument() {
        return $(document);
      },
      _removeIrrelevantTourItems: function _removeIrrelevantTourItems($tour, $document) {
        var removals = false;
        var tips = /tips=([^&]+)/.exec(queryString);
        $tour.find('li').each(function () {
          var $this = $(this);
          var itemId = $this.attr('data-id');
          var itemClass = $this.attr('data-class');
  
          if (tips && !$(this).hasClass(tips[1])) {
            removals = true;
            $this.remove();
            return;
          }
  
          if (!itemId && !itemClass || itemId && $document.find("#".concat(itemId)).length || itemClass && $document.find(".".concat(itemClass)).length) {
            return;
          }
  
          removals = true;
          $this.remove();
        });
  
        if (removals) {
          var total = $tour.find('li').length;
  
          if (!total) {
            this.model.set({
              tour: []
            });
          }
  
          $tour.find('li').each(function (index) {
            var progress = Drupal.t('!tour_item of !total', {
              '!tour_item': index + 1,
              '!total': total
            });
            $(this).find('.tour-progress').text(progress);
          }).eq(-1).attr('data-text', Drupal.t('End tour'));
        }
      }
    });
  })(jQuery, Backbone, Drupal, document);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal) {
    function TabbingManager() {
      this.stack = [];
    }
  
    function TabbingContext(options) {
      $.extend(this, {
        level: null,
        $tabbableElements: $(),
        $disabledElements: $(),
        released: false,
        active: false
      }, options);
    }
  
    $.extend(TabbingManager.prototype, {
      constrain: function constrain(elements) {
        var il = this.stack.length;
  
        for (var i = 0; i < il; i++) {
          this.stack[i].deactivate();
        }
  
        var $elements = $(elements).find(':tabbable').addBack(':tabbable');
        var tabbingContext = new TabbingContext({
          level: this.stack.length,
          $tabbableElements: $elements
        });
        this.stack.push(tabbingContext);
        tabbingContext.activate();
        $(document).trigger('drupalTabbingConstrained', tabbingContext);
        return tabbingContext;
      },
      release: function release() {
        var toActivate = this.stack.length - 1;
  
        while (toActivate >= 0 && this.stack[toActivate].released) {
          toActivate--;
        }
  
        this.stack.splice(toActivate + 1);
  
        if (toActivate >= 0) {
          this.stack[toActivate].activate();
        }
      },
      activate: function activate(tabbingContext) {
        var $set = tabbingContext.$tabbableElements;
        var level = tabbingContext.level;
        var $disabledSet = $(':tabbable').not($set);
        tabbingContext.$disabledElements = $disabledSet;
        var il = $disabledSet.length;
  
        for (var i = 0; i < il; i++) {
          this.recordTabindex($disabledSet.eq(i), level);
        }
  
        $disabledSet.prop('tabindex', -1).prop('autofocus', false);
        var $hasFocus = $set.filter('[autofocus]').eq(-1);
  
        if ($hasFocus.length === 0) {
          $hasFocus = $set.eq(0);
        }
  
        $hasFocus.trigger('focus');
      },
      deactivate: function deactivate(tabbingContext) {
        var $set = tabbingContext.$disabledElements;
        var level = tabbingContext.level;
        var il = $set.length;
  
        for (var i = 0; i < il; i++) {
          this.restoreTabindex($set.eq(i), level);
        }
      },
      recordTabindex: function recordTabindex($el, level) {
        var tabInfo = $el.data('drupalOriginalTabIndices') || {};
        tabInfo[level] = {
          tabindex: $el[0].getAttribute('tabindex'),
          autofocus: $el[0].hasAttribute('autofocus')
        };
        $el.data('drupalOriginalTabIndices', tabInfo);
      },
      restoreTabindex: function restoreTabindex($el, level) {
        var tabInfo = $el.data('drupalOriginalTabIndices');
  
        if (tabInfo && tabInfo[level]) {
          var data = tabInfo[level];
  
          if (data.tabindex) {
            $el[0].setAttribute('tabindex', data.tabindex);
          } else {
              $el[0].removeAttribute('tabindex');
            }
  
          if (data.autofocus) {
            $el[0].setAttribute('autofocus', 'autofocus');
          }
  
          if (level === 0) {
            $el.removeData('drupalOriginalTabIndices');
          } else {
            var levelToDelete = level;
  
            while (tabInfo.hasOwnProperty(levelToDelete)) {
              delete tabInfo[levelToDelete];
              levelToDelete++;
            }
  
            $el.data('drupalOriginalTabIndices', tabInfo);
          }
        }
      }
    });
    $.extend(TabbingContext.prototype, {
      release: function release() {
        if (!this.released) {
          this.deactivate();
          this.released = true;
          Drupal.tabbingManager.release(this);
          $(document).trigger('drupalTabbingContextReleased', this);
        }
      },
      activate: function activate() {
        if (!this.active && !this.released) {
          this.active = true;
          Drupal.tabbingManager.activate(this);
          $(document).trigger('drupalTabbingContextActivated', this);
        }
      },
      deactivate: function deactivate() {
        if (this.active) {
          this.active = false;
          Drupal.tabbingManager.deactivate(this);
          $(document).trigger('drupalTabbingContextDeactivated', this);
        }
      }
    });
  
    if (Drupal.tabbingManager) {
      return;
    }
  
    Drupal.tabbingManager = new TabbingManager();
  })(jQuery, Drupal);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, Backbone) {
    var strings = {
      tabbingReleased: Drupal.t('Tabbing is no longer constrained by the Contextual module.'),
      tabbingConstrained: Drupal.t('Tabbing is constrained to a set of @contextualsCount and the edit mode toggle.'),
      pressEsc: Drupal.t('Press the esc key to exit.')
    };
  
    function initContextualToolbar(context) {
      if (!Drupal.contextual || !Drupal.contextual.collection) {
        return;
      }
  
      var contextualToolbar = Drupal.contextualToolbar;
      contextualToolbar.model = new contextualToolbar.StateModel({
        isViewing: localStorage.getItem('Drupal.contextualToolbar.isViewing') !== 'false'
      }, {
        contextualCollection: Drupal.contextual.collection
      });
      var viewOptions = {
        el: $('.toolbar .toolbar-bar .contextual-toolbar-tab'),
        model: contextualToolbar.model,
        strings: strings
      };
      new contextualToolbar.VisualView(viewOptions);
      new contextualToolbar.AuralView(viewOptions);
    }
  
    Drupal.behaviors.contextualToolbar = {
      attach: function attach(context) {
        if ($('body').once('contextualToolbar-init').length) {
          initContextualToolbar(context);
        }
      }
    };
    Drupal.contextualToolbar = {
      model: null
    };
  })(jQuery, Drupal, Backbone);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function (Drupal, Backbone) {
    Drupal.contextualToolbar.StateModel = Backbone.Model.extend({
      defaults: {
        isViewing: true,
        isVisible: false,
        contextualCount: 0,
        tabbingContext: null
      },
      initialize: function initialize(attrs, options) {
        this.listenTo(options.contextualCollection, 'reset remove add', this.countContextualLinks);
        this.listenTo(options.contextualCollection, 'add', this.lockNewContextualLinks);
        this.listenTo(this, 'change:contextualCount', this.updateVisibility);
        this.listenTo(this, 'change:isViewing', function (model, isViewing) {
          options.contextualCollection.each(function (contextualModel) {
            contextualModel.set('isLocked', !isViewing);
          });
        });
      },
      countContextualLinks: function countContextualLinks(contextualModel, contextualCollection) {
        this.set('contextualCount', contextualCollection.length);
      },
      lockNewContextualLinks: function lockNewContextualLinks(contextualModel, contextualCollection) {
        if (!this.get('isViewing')) {
          contextualModel.set('isLocked', true);
        }
      },
      updateVisibility: function updateVisibility() {
        this.set('isVisible', this.get('contextualCount') > 0);
      }
    });
  })(Drupal, Backbone);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, Backbone, _) {
    Drupal.contextualToolbar.AuralView = Backbone.View.extend({
      announcedOnce: false,
      initialize: function initialize(options) {
        this.options = options;
        this.listenTo(this.model, 'change', this.render);
        this.listenTo(this.model, 'change:isViewing', this.manageTabbing);
        $(document).on('keyup', _.bind(this.onKeypress, this));
        this.manageTabbing();
      },
      render: function render() {
        this.$el.find('button').attr('aria-pressed', !this.model.get('isViewing'));
        return this;
      },
      manageTabbing: function manageTabbing() {
        var tabbingContext = this.model.get('tabbingContext');
  
        if (tabbingContext) {
          if (tabbingContext.active) {
            Drupal.announce(this.options.strings.tabbingReleased);
          }
  
          tabbingContext.release();
        }
  
        if (!this.model.get('isViewing')) {
          tabbingContext = Drupal.tabbingManager.constrain($('.contextual-toolbar-tab, .contextual'));
          this.model.set('tabbingContext', tabbingContext);
          this.announceTabbingConstraint();
          this.announcedOnce = true;
        }
      },
      announceTabbingConstraint: function announceTabbingConstraint() {
        var strings = this.options.strings;
        Drupal.announce(Drupal.formatString(strings.tabbingConstrained, {
          '@contextualsCount': Drupal.formatPlural(Drupal.contextual.collection.length, '@count contextual link', '@count contextual links')
        }));
        Drupal.announce(strings.pressEsc);
      },
      onKeypress: function onKeypress(event) {
        if (!this.announcedOnce && event.keyCode === 9 && !this.model.get('isViewing')) {
          this.announceTabbingConstraint();
          this.announcedOnce = true;
        }
  
        if (event.keyCode === 27) {
          this.model.set('isViewing', true);
        }
      }
    });
  })(jQuery, Drupal, Backbone, _);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function (Drupal, Backbone) {
    Drupal.contextualToolbar.VisualView = Backbone.View.extend({
      events: function events() {
        var touchEndToClick = function touchEndToClick(event) {
          event.preventDefault();
          event.target.click();
        };
  
        return {
          click: function click() {
            this.model.set('isViewing', !this.model.get('isViewing'));
          },
          touchend: touchEndToClick
        };
      },
      initialize: function initialize() {
        this.listenTo(this.model, 'change', this.render);
        this.listenTo(this.model, 'change:isViewing', this.persist);
      },
      render: function render() {
        this.$el.toggleClass('hidden', !this.model.get('isVisible'));
        this.$el.find('button').toggleClass('is-active', !this.model.get('isViewing'));
        return this;
      },
      persist: function persist(model, isViewing) {
        if (!isViewing) {
          localStorage.setItem('Drupal.contextualToolbar.isViewing', 'false');
        } else {
          localStorage.removeItem('Drupal.contextualToolbar.isViewing');
        }
      }
    });
  })(Drupal, Backbone);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, drupalSettings) {
    var pathInfo = drupalSettings.path;
    var escapeAdminPath = sessionStorage.getItem('escapeAdminPath');
    var windowLocation = window.location;
  
    if (!pathInfo.currentPathIsAdmin && !/destination=/.test(windowLocation.search)) {
      sessionStorage.setItem('escapeAdminPath', windowLocation);
    }
  
    Drupal.behaviors.escapeAdmin = {
      attach: function attach() {
        var $toolbarEscape = $('[data-toolbar-escape-admin]').once('escapeAdmin');
  
        if ($toolbarEscape.length && pathInfo.currentPathIsAdmin) {
          if (escapeAdminPath !== null) {
            $toolbarEscape.attr('href', escapeAdminPath);
          } else {
            $toolbarEscape.text(Drupal.t('Home'));
          }
        }
      }
    };
  })(jQuery, Drupal, drupalSettings);;
  /**
  * DO NOT EDIT THIS FILE.
  * See the following change record for more information,
  * https://www.drupal.org/node/2815083
  * @preserve
  **/
  
  (function ($, Drupal, drupalSettings) {
    function mapTextContentToAjaxResponse(content) {
      if (content === '') {
        return false;
      }
  
      try {
        return JSON.parse(content);
      } catch (e) {
        return false;
      }
    }
  
    function bigPipeProcessPlaceholderReplacement(index, placeholderReplacement) {
      var placeholderId = placeholderReplacement.getAttribute('data-big-pipe-replacement-for-placeholder-with-id');
      var content = this.textContent.trim();
  
      if (typeof drupalSettings.bigPipePlaceholderIds[placeholderId] !== 'undefined') {
        var response = mapTextContentToAjaxResponse(content);
  
        if (response === false) {
          $(this).removeOnce('big-pipe');
        } else {
          var ajaxObject = Drupal.ajax({
            url: '',
            base: false,
            element: false,
            progress: false
          });
          ajaxObject.success(response, 'success');
        }
      }
    }
  
    var interval = drupalSettings.bigPipeInterval || 50;
    var timeoutID;
  
    function bigPipeProcessDocument(context) {
      if (!context.querySelector('script[data-big-pipe-event="start"]')) {
        return false;
      }
  
      $(context).find('script[data-big-pipe-replacement-for-placeholder-with-id]').once('big-pipe').each(bigPipeProcessPlaceholderReplacement);
  
      if (context.querySelector('script[data-big-pipe-event="stop"]')) {
        if (timeoutID) {
          clearTimeout(timeoutID);
        }
  
        return true;
      }
  
      return false;
    }
  
    function bigPipeProcess() {
      timeoutID = setTimeout(function () {
        if (!bigPipeProcessDocument(document)) {
          bigPipeProcess();
        }
      }, interval);
    }
  
    bigPipeProcess();
    $(window).on('load', function () {
      if (timeoutID) {
        clearTimeout(timeoutID);
      }
  
      bigPipeProcessDocument(document);
    });
  })(jQuery, Drupal, drupalSettings);;
  