/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you under the Apache License, Version 2.0 (the
 *  "License"); you may not use this file except in compliance
 *  with the License.  You may obtain a copy of the License at
 *
 *    https://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing,
 *  software distributed under the License is distributed on an
 *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 *  KIND, either express or implied.  See the License for the
 *  specific language governing permissions and limitations
 *  under the License.
 */

//= require webjars/jquery/2.1.4/jquery.min.js
//= require webjars/jquery-ui/1.10.3/ui/minified/jquery-ui.min.js
//= require webjars/jgrowl/1.4.6/jquery.jgrowl.min.js
//= require jquery/jquery.positionBy.js
//= require webjars/bgiframe/3.0.1/jquery.bgiframe.js
//= require webjars/jquery-form/3.51/jquery.form.js
//= require jquery/jquery.jdMenu.js
//= require spring-security-ui-ajaxLogin.js
